2009-01-29 63 views
0

我需要为一个客户端构建几个Rails应用程序。我想给他们所有相同的用户认证系统,以便用户不必记住每个应用的单独登录凭证。这些都是严格的内部应用。 OpenID不适用于此组织。如何让几个应用程序使用相同的认证系统?

我正在考虑创建一个中央Rails应用程序来处理认证。其他应用程序将采用提交的用户标识和密码,并向auth应用程序发送请求,并返回一个描述用户及其角色的YAML字符串。

这是一个合理的方法吗?

是否有我应该注意的这个问题的标准解决方案?

(请注意,由于组织约束我有一个使用RedHat Linux下5服务器运行MySQL,Apache和Rails的解决这个我自己。)

回答

3

听起来合理的给我。我可能会按照您的描述自行设置身份验证应用程序,然后在客户端应用程序中使用ActiveResource作为Web服务访问身份验证。你基本上可以拥有自己的内部OpenID风格的系统。

如果您之前没有使用ActiveResource,Railscasts 9495是一个很好的开始。

1

这实际上听起来像一个合理的方法。有很多rails plugins处理身份验证相当好。您可以通过您自己的自定义身份验证方法公开该功能,以通过Web服务调用。

如果你想变得很花哨,你可以使用HTTParty编写一个API到你的Rails(认证)应用程序,并与其他人共享。

2

这听起来像你真正想要的是一个单一登录系统,而不是一个共享的凭证系统。关键区别在于,对于后者,用户将不得不对每个应用程序重新进行身份验证,而对于前者,他只需登录一次,然后在应用程序之间无缝移动。

不幸的是,将它与你的rails应用程序集成是一件有趣的工作。这里有一个很好的出发点: http://www.ja-sig.org/products/cas/

1

OpenID的建成将分散的,所以你可能其实内部使用host your own OpenID提供商。如果你走的是类似的路线,我认为不需要重新发明轮子。

0

这听起来不像组织太大,但如果他们有一个LDAP目录,你可以使用它作为凭据。尽管如上所述,这不会解决用户必须单独登录到每个应用程序的问题。

1

我有一个疯狂的解决方案,我一直在考虑我自己的事情,我需要这样做。

在Rails的默认配置中,它将会话数据作为cookie发送给最终用户。大多数情况下,除了已登录并通过身份验证的用户的身份之外,您应该在会话中几乎没有任何内容?好的,那么如果你想要登录的每个应用都使用config/environment.rb中完全相同的密钥呢?这是用来签署cookie的120个字符左右的字符串,以便用户不能更改cookie并将其发回而不被捕获。如果您的群组中的每个应用拥有相同的密钥,它们都位于同一个域中,那么所有应用都将获得相同的cookie,并且所有应用都会相信它们是发送它的那个。每个人都会说:“是的,这是用户#252,我把这个用户号码放到了会话中,所以我知道那就是他,通过获取它,我知道他/她已经登录,我可以用它来查找他/她的细节。“

注意:完全披露,我有不是尝试过,但我有充分的理由相信它会工作。

相关问题