Rails 多应用统一账户密码登录怎么做?

dagon · 2017年01月17日 · 最后由 dagon 回复于 2017年01月20日 · 4141 次阅读

boss 有个要求,要求我实现我们公司的目前所有应用(公司小,用户数还少)实现统一的账户密码注册登录。目前百度好像就实现了这个功能。 我有两个思路。一个是在数据库中单独建一个用户表。所有应用登录时都调用这个表。二是做一个总的用户中心。通过 oauth2.0 授权其他应用登录,各个不再提供密码登录的页面。但是总感觉不对。 第一种方案,感觉还要在各个应用中也建一个用户表。总表和各个应用的表可能会产生冲突。 请问有没有做过这块的给小弟我提高一个思路?谢谢了

看 Ruby China 源代码,现成的例子🍐啊

https://github.com/ruby-china/homeland/pull/832

演示:

https://try.gethomeland.com (Ruby China 作为主站)

#1 楼 @huacnlee 哇,谢谢了。不过我 ror 新人,纯看源码不一定看得出来清晰的思路。大哥有没有好的文章推荐下(英文的也行),我再对照源码阅读。原谅我遇到高手可以问就不想 google 了。

#3 楼 @Peter 看起来有点复杂啊!

#1 楼 @huacnlee 主要我还没有分清 sso 和 oauth2 的区别,两者是不是要一起设计比较好?

#4 楼 @huacnlee 需要一点点时间消化一下,我把代码 debug 走一遍以后就清楚了,代码很清晰。

我又扩充了 facebook 和 微信扫码 登录功能,真的很好用。

要接入的网站用的 Devise,改下配置文件就可以了,很简单。

OAuth2 就可以满足这个场景下的业务需求。 在规模不大的情况下,强求 SSO 有些技术上的“政治正确”的感觉。

#7 楼 @Peter 大神,我看了一晚上,还没有看完,大致看懂了网站之间的用法。但是现在我还有移动应用,采用 jwt 认证。这种认证方式支持 jwt 或者 access-token 吗?

#8 楼 @pengedy 什么叫政治正确?看了你几个帖子都在胡说八道。

SSO:用户一次登陆后在多个系统免登录。
OAuth:用户授权第三方应用访问自己的资源无需提供账号密码。

场景不同选择不同。

#12 楼 @Rei 我做着做着感觉有点不对劲。boss 的核心需求是本公司的多个应用共用同一个用户数据库进行登录操作,而不一定要求免登录(虽然实现了也好)。请问下我这种需求到底应该搜什么术语。因为按要求,注册,修改密码,忘记密码等功能都要实现。用 sso,库里没有这些方法。是不是得用 webview 加载 cas 的注册,修改密码功能的页面?

#13 楼 @dagon 我开始也有这方面疑问,现在非常清楚了,

你需要一个主站,a.com
一个 CAS server: passport.a.com
另外很多其它站点:c.com d.com

a.com 上除登录以外的功能都用 devise,登录的时候跑到 passport.a.com,这方面 CASino 有文档,也有例子。

a.com 和 passport.a.com 放在一台服务器上最简单,也可以分开放,passport.a.com 有自己的几张表,再指定读取 a.com 上的 user 表,用来验证用户有效性。

c.com d.com 也是用 devise,有自己的 user 表,开始是空的,用户登录的时候,会从 passport.a.com 得到一些字段(字段可定义),再插入到 user 表。以后登录不再插入,看情况更新。c.com d.com 只有登录功能,其它的改密码修改作息都在 a.com 上做。

#14 楼 @Peter 说的非常清楚了,我争取实现下亲身体验一下。另外能不能请教一下怎么能 debug 走一遍,ruby 这种动态语言无法下断点。最后,还是非常感谢你的解答

我还不是很清楚你的场景,多个应用是多个网站还是多个移动应用,以后会不会扩展?需要多站点免登陆还是相同账号密码登陆还是授权验证?

多系统共用的账号系统要优先选用通用的协议,不要从零开始。

#15 楼 @dagon 办法土得很,clone gem 源码,本地引用 gem, 然后看代码,不懂的地方直接输出: Rails.logger.debug "var: #{var}"

#16 楼 @Rei 有网站也有移动应用。以后也会扩展吧。就是相同的账户密码登录。因为都是是本公司的项目,我猜测不用做授权(也可能我不理解你说的授权验证,是 oauth2.0 吗?只懂这个)

#17 楼 @Peter 哦,兄弟很有耐心啊。一直做不到一行行看源码,要向你学习啊。谢谢了。

什么叫动态语言无法无法下断点,不知道你有么有听说过 pry.bindingbyebug @dagon

#20 楼 @geekerzp 没有听过,所以请教他怎么 debug 的啊。谢谢你提了这两个,我去搜下学习下

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