我需要为一个客户端构建多个Rails应用程序。我想给他们所有相同的用户身份验证系统,以便用户不必记住每个应用程序的单独登录凭据。这些是严格的内部应用。 OpenID不是此组织的选项。
我正在考虑创建一个中央Rails应用程序来处理身份验证。其他应用程序将获取提交的用户ID和密码,并向auth应用程序发送请求,并返回一串描述用户及其角色的YAML。
这是一种合理的方法吗?
我应该注意这个问题的标准解决方案吗?
(请注意,由于组织限制,我必须使用运行MySQL,Apache和Rails的RedHat Linux 5服务器自行解决此问题。)
答案 0 :(得分:3)
对我来说很合理。我可能会在您描述时自行设置身份验证应用程序,然后在客户端应用程序中使用ActiveResource作为Web服务访问身份验证。你基本上可以拥有自己的内部OpenID风格的系统。
答案 1 :(得分:2)
听起来你真正想要的是单点登录系统,而不是共享凭据系统。关键区别在于,后者用户必须重新验证每个应用程序,而前者只需登录一次,然后在应用程序之间无缝移动。
不幸的是,将它集成到rails应用程序中需要做一些工作。这是一个很好的起点: http://www.ja-sig.org/products/cas/
答案 2 :(得分:1)
这实际上听起来像是一种合理的方法。有很多rails plugins可以很好地处理身份验证。您可以通过自己的自定义身份验证方法公开该功能,以通过Web服务进行调用。
如果您想获得想象力,可以使用HTTParty向您的Rails(身份验证)应用编写API并与其他人共享。
答案 3 :(得分:1)
OpenID是为了分散而构建的,因此您可以实际上是host your own OpenID提供程序供内部使用。如果你走的是相似的路线,我认为没有必要重新发明轮子。
答案 4 :(得分:1)
我有一个疯狂的解决方案,我一直在考虑我需要做的事情。
在Rails的默认配置中,它将会话数据作为cookie发送给最终用户。在大多数情况下,除了已登录和验证的用户的身份之外,您应该在会话中几乎没有任何内容?好的,那么如果您希望在登录时看到的每个应用程序在其config / environment.rb中使用完全相同的密钥呢?这是用于签署cookie的120个字符左右的字符串,这样用户就无法更改cookie并将其发送回去而不会被捕获。如果您组中的每个应用都具有相同的密钥 AND ,那么它们都在同一个域中,那么所有应用都将获得相同的Cookie,所有人都会相信他们是发送它的人。每个人都会说,“是的,这是用户#252。我自己把这个用户号码放进了会话中,所以我知道那是他。通过取回它,我知道他/她已登录,我可以用它来查找他的/她的详细信息。“
注意:完全披露,我不尝试了这一点,但我完全有理由相信它会有效。
答案 5 :(得分:0)
这听起来不像组织太大,但如果他们有一个LDAP目录,您可以使用它来获取凭据。尽管如上所述,这不能解决用户必须单独登录每个应用程序的问题。