Gem 折腾国产 OAuth 认证服务有感

beenhero · 2012年03月14日 · 最后由 diguage 回复于 2014年01月16日 · 12073 次阅读

这两天在给自己的一个小站做 OmniAuth 登录,折腾有感。

国外用户就用 facebook/twitter, 都有现成可用的 gem, 前者 OAuth2 后者 OAuth, 连上就用起来了。

国内的用户就用 weibo 和 QQ,有现成的 gem,但有这那的问题。 首先,weibo 的 gem 基于 OAuth,但 weibo 已经迁移到 OAuth2,老版本 gem 会有些 bug。得益于 weibo 的 OAuth 认证和相关 api 都是照搬 twitter 的,调试和应用还算省心。

再看 QQ,问题就比较多了,首先开放平台下面有很多支登录认证服务,有 QQ 登录、TQQ 登录、QZone 登录... 选择多,API 也乱,同平台下各自为立,如 QQ 登录用 OAuth2,TQQ 是 OAuth, 拿到的数据也不一致。

再回想起两年前,测试 taobao 的 TOP API...各大拿有点乱! 当然开放平台,整合数据是好事,让开发人员多了很多思路。只是还需要点功夫来节约大家的时间。

还不错啦! 记得我 08 年的时候写了一个豆瓣的 oauth api 客户端(遗骸: http://code.google.com/p/doubanclient-ruby/ )。 写好了以后拿去给老师当作业交,当时豆瓣的 oauth server 还处于调试阶段,给老师验收的时候豆瓣的 server 不知到出了什么毛病。。程序跑不起来了。。

后来写 oauth_china( https://github.com/hooopo/oauth_china )这个 gem 的时候,又有机会和搜狐网易这些 oauth server 打交道。。

然后,再看到 oauth 几个字就躲着走。。。

谁叫咱非得整合那么多平台,自找的

我业余时间是不敢再捣鼓国内的认证了

#3 楼 @Rei 国内认证,除了 Ruby China 的不搞!lol!

我到觉得没那么严重,国内的几个主要 oauth 都有 gem 啊

gem "omniauth-douban", :git => "git://github.com/xdite/omniauth-douban.git"
gem "omniauth-weibo", :git => "git://github.com/ywencn/omniauth-weibo.git"
gem "omniauth-renren", :git => "git://github.com/ywencn/omniauth-renren.git"
gem 'omniauth-qq-connect'

.../xdite/... .../ywencn/... .../beenhero/... 再加上其它 n 多 forker 自己掰出来的,你就看到问题了 #5 楼 @ywencn

#6 楼 @beenhero 其实第二个是我自己 : P 确实有些是有问题的,我不否认。不过有问题的你可以自己 fork 出来倒腾嘛。。终究是要倒腾的。我觉得弄到现在最恶心是还是淘宝的那个登陆,哈哈。。。。

我也调了好久才搞好,调的很是郁闷

#6 楼 @beenhero 对一个 weibo 来说,各家有各家的策略,只能 fork 了来用,除非是使用最通用的方案。一个 omniauth-weibo 肯定是不可能满足各家需求的,现在 rubygems 上面那个都没有更新了,一点不负责任。

现在 weibo 用的 oauth2 是简单很多,我连 gem 都不用了,用 rest-client,认证过程就两行。希望 oauth 的也赶紧迁移到 oauth2。

#10 楼 @Rei ] 我不是太喜欢 oauth2,因为 token 会过期。。

#11 楼 @ywencn weibo 比较奇葩,有过期逻辑,但刷新 api 只提供给认证合作方。

匿名 #13 2012年03月15日

#12 楼 @Rei sina 的 refresh_token 现在连认证的合作方都不提供了。。这就是个摆设。oauth2 的 token 过期了只能重新认证。。没别的办法。

我也用了下新浪微博的 oauth,换了几个插件,都会报错,include? nil:NilClass 这个。后面换成了 oauth-china 才能正常使用。

#14 楼 @huyong36 你是了 omniauth-weibo-oauth2 吗?我开发者帐号可以用,不过普通用户的不行。听开发者论坛里说,要添加测试用户,但我找不到哪里添加。昨天申请提交审核,今天审核被驳,而且没写理由。还是算了,别折腾国产件了。老实做给老外用吧~

#15 楼 @beenhero 我的审核也没通过。。坑爹呢,omniauth-weibo-oauth2 这个没试,试了 omniauth-oauth,omniauth-weibo,ominiauth-sina,整整折腾了一宿

我也被 weibo 那个 gem 折腾了一番,后来自己手动实现算了

当初搞 weibo 的 api,什么都做对了,就是返回 callback 错误,到论坛求助,被教育了一番 oauth2 原理,无果。

发邮件到技术邮箱,回复要截图,然后截图发过去,一周没回应……

之后去试,竟然就好了,也不告诉我一声

关于 oauth2 这个 gem, https://github.com/intridea/oauth2 真的不靠谱吧,用它搞新浪微博登陆,死活有个错误

#19 楼 @fresh_fish 有错误你就找出来,然后提个 patch。

#19 楼 @fresh_fish #20 楼 @_kaichen 有错误要看是什么错误,很多事情有些 server side 对协议实现的不好或者加了自己的限制,也是会导致错误的。曾经被 twitter oauth 搞崩溃的人有感

@_kaichen @yedingding 我看了一下源码,新浪 weibo 获取 access_token 的时候,要手动 :parse 类型和 content-type 不然对不上号 这下可以了 崩溃

@client.auth_code.get_token(code_value, :redirect_uri => REDRECT_URI, :parse => :query) 如果 content-type 是 json 的话 parse 就是 json

@yedingding 请教个问题啊,腾讯微博的开放平台,在开发测试过程中,不需要像新浪微博一样,在腾讯那边还要设置回调地址和测试用户账号吧?没有找到设置的地方哦

#24 楼 @fresh_fish 没玩过国内的开放平台。对于 OAuth 或者 OAuth2 来说,重要的是 consumer key 和 secret,有些服务商会有默认的 callback 地址,也会在发起验证的时候允许你动态指定 callback 地址,这些都是可以的。但是.... 无法设置这个事情不靠谱啊.... 可能是你没找到吧

@yedingding 谢谢,的确没找到,可能是腾讯那边不需要设置吧

最大问题是授权有过期时间的问题,太恶心!

#27 楼 @sandy_xu 这是合理的,不是问题,

#28 楼 @yedingding 过期后不给刷新码还合理么,过期一次用户认证一次啊

.../xdite/... .../ywencn/... .../beenhero/... 再加上其它 n 多 forker 自己掰出来的,你就看到问题了 #6 楼 @beenhero

真的真的很难搞。。。不是各种版本问题,就是各种请求问题……

#32 楼 @yumewang 無緣無掛把上面這個帳號的密碼給搞丟了。

呵呵,不過好在總算把豆瓣,人人的認證搞定。

这个我以前也折腾过。。。 全是自己写的,写了三个,Google, Sina, QQ 的。。。

#33 楼 @yume 您好!能帮忙看看下面这个是什么问题吗? http://ruby-china.org/topics/16442

#36 楼 @diguage 抱歉,今天才看到,解決了就好。

#37 楼 @yume 还是要谢谢您!

需要 登录 后方可回复, 如果你还没有账号请 注册新账号