-
Notifications
You must be signed in to change notification settings - Fork 350
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Update with some new freatures #25
Conversation
aimingoo
commented
May 30, 2017
- No client_secret
- Force redirect protocol to support HTTPS/HTTP Github pages site
- protected token
- language translator for default/other theme, a simple method
- ...
@imsun review的怎么样了? |
@sinkcup and @imsun 相关的说明在这里:https://aimingoo.github.io/1-1725.html |
我倒不是不在,但是这个 pr 和我有一些理念上的冲突。本来想找个时间统一说下,不过最近太忙老是忘——其实还是太懒。那我先简单说下:
总之非常感谢 @aimingoo 对项目的关注与支持,也非常抱歉拖了那么久。上述有什么理解不对的地方请指出。 综上目前这个 pr 是不能合的。如果有其他类似需求建议做成自定义主题,或者单开一个项目。 |
各位,谢谢关注这个issue~ 说说我的看法。先讲第二个问题,是个小问题,就是‘Force redirect protocol to support HTTPS/HTTP Github pages site’。这个事情可能之前大家没注意到,而正好我的github.io站点碰巧遇上了,才有这个问题出现。 现在,如果你访问
由于不会自动跳转,所以如果按gitment原来的代码,那就是从url上直接取callback,因此就会导致http/https总有一个不能用的情况——你在git application后台配置的redirect callback只能是二者之一,而网页上从url取的地址是两种都有可能。 所以对于这种情况,才加上了force_redirect_protocol这个选项,它只需要跟后台配置的redirect callback采用一致的http/https协议即可。这样一来,就只从当前的url上来取地址部分,而协议部分可以与后台一致。 再补充一下,我正好遇到这个问题,就是因为我的github pages仓库其实是早在去年上半年就申请过了,只是一直没有放内容。我开始使用的时候,也就正好是http/https两种协议都可以用,而‘Enforce HTTPS’这个配置项在github仓库里正好就没打开。所以糊里糊涂地就碰上了这个问题。而后来,由于我的仓库出了点问题,我又删除了重建,所以现在这个aimingoo.github.io已经是新的了,这个问题也就不能重现了。但我确信,如果用户的github pages是2016.06.15之前申请的,那么问题就一样还有。 好了。上面这个问题简单,但是解释起来很麻烦,呵呵。 下面来说imsun提到的关键问题,也就是No client_secret。 首先,我确实了解imsun这样处理的原因,也确实花了不少时间来思考和假设client_secret暴露之后的后果。在这个问题上,我跟imsun的结论是一样的:我也想不出在callback url限制了回调地址的情况下,暴露client_secret有什么毛病——看起来是安全的。 关于这一点细节,我在博客里并没有写(
但是我虽然跟imsun关于“暴露了client_secret能不能带来攻击”这个问题上结论一样,但我仍然选择“尽可能去隐藏client_secret”。这是因为对风险的认识不同,我认为“风险”之所以是“风险”就在于还没有发生。如果我们找得到办法,或者想得出某种可能性发生,那它就不是“风险”了,而是“错误”。我对风险的态度是阻止——尽管我也想不出它怎么可能发生,但既然是风险,那我就要尽力阻止,而非容忍。 “暴露client_secret”是一望即知的风险,而不是已经存在错误。 这是第一。第二,则是我与imsun在“接口”上的认识不同。我认为接口就是规则,接口上要求隐藏client_secret,那就应该遵循,这是接口的意义。而不是根据对接口内部的实现的猜测,或者探测,甚至于实现代码的分析去假设我们如何使用该接口。接口不变的是约定本身,而不是其具体的实现。所以,我认为在/login/oauth/access_token这个接口上就只应该传入code和client_id,通过其它某种方式传入或暴露client_secret,就是错的。这不仅仅是风险问题,而是怎么对待“接口”这个约束条件的问题。 所以我才会花了不少力气去申请了一个支持ssl的网站,然后写了intersect这个项目去代理api请求的原因。这些事情做完了,我才发现我其实最终还是搞了个新的主页空间出来,已经背离了原来“仅仅在gihub.io上部署静态pages”的初衷。但我还是认为我是对的,因为接口如此。我可以觉得我选错了github api这个接口;但既然选了这个接口,那就按接口的要求来实现,才是对的。 然而,如果真是如此,使用gitment是不是就一定要一个proxy/gateway呢?是不是就非得像我一样去申请一个https并部署intersect这样的网关尼?其实不然。 如果: 简单地说,用{client_domain, client_id}替代{client_secret, client_id},但要开发者在gh-oauth.imsun.net做一次登记。 有两点说明:
这个过程看起来不爽,但只是要求使用gitment的开发者多一次登记(要经过github oAuth之后才好),其它使用过程是一致的。 使用上述过程,其实是在登记过程中信任imsun,或gh-oauth.imsun.net一次即可;而把client_secret放在github pages上,我得信任所有人。 @sinkcup 如果确实不能合并,那么我回头就再开一个好了。谢谢 |
@sinkcup 如你所愿。"A mint on Gitment" at aimingoo/gitmint 另外,你所说的organization的问题 #27 ,在 https://gmirror.org/ 和 https://openwrt.io/about/ 均未能重现,所以……能否给我一个可重现的地址? |
@aimingoo 几天不见,我的 gmirror.org 已经倒闭了,因为发现没什么人用,就关掉了。 这件事恰恰说明了:个人网站提供服务是不靠谱的,随时会倒闭,而完全依靠github api的服务是靠谱的。所以我觉得@imsun 的选择是对的。如果做一个proxy服务隐藏secret,随着用户增多,服务器费用越来越高,谁来出?夜间服务故障时,谁来修复?域名过期了、服务器没有续费了,大家就不能发评论了,多尴尬!别忘了这个项目的初衷就是多说不盈利倒闭了…… OAuth协议定义了 Implicit Grant 模式,无需secret,用于 client(js、android、ios),因为client无法安全保存secret。而 github 不支持 Implicit Grant 模式:
所以我觉得做comment服务有两个原则:
@aimingoo @imsun 目前的确不支持github org项目发评论,我在 openwrt.io 上试了,不能用,又移除了。参考:openwrtio/portal@d847afd |
唔,我觉得当前最重要的是,解决浏览器兼容适配的问题(包括移动端) |
organization的问题已经Ok了。在这里 #87 ,或参考:organization下的仓库无法使用gitment #53 |
好吧。关闭什么的我最擅长了 |