Language agnostic 如何实现单一登录身份验证服务器?

Language agnostic 如何实现单一登录身份验证服务器?,language-agnostic,http,authentication,Language Agnostic,Http,Authentication,我想实现一个离散的远程身份验证服务器,用于处理许多站点的登录。有点类似于OpenID 基本上,我有site-1和site-2,它们都依赖于同一个用户数据库,该数据库位于一个单独的auth站点上。所以,auth站点为他们处理用户身份验证,在此过程中,请求系统可以使用有关身份验证用户的信息 每个站点可以位于完全独立的域名上,位于完全独立的计算机上 这都是通过HTTP实现的,不能直接访问数据库 最后还有一个怪癖:一旦用户登录到site-1,当访问依赖于auth site的任何其他站点时,该站点必须将该

我想实现一个离散的远程身份验证服务器,用于处理许多站点的登录。有点类似于OpenID

基本上,我有site-1和site-2,它们都依赖于同一个用户数据库,该数据库位于一个单独的auth站点上。所以,auth站点为他们处理用户身份验证,在此过程中,请求系统可以使用有关身份验证用户的信息

每个站点可以位于完全独立的域名上,位于完全独立的计算机上

这都是通过HTTP实现的,不能直接访问数据库

最后还有一个怪癖:一旦用户登录到site-1,当访问依赖于auth site的任何其他站点时,该站点必须将该用户视为已通过身份验证

这整个业务对最终用户来说必须完全没有麻烦。它应该像一个简单的日常登录表单一样工作

作为一个具体的例子,假设我们正在讨论
stackoverflow.com
serverfault.com
,它们都通过
authentice overflow server stack.com
进行身份验证。同样,一旦登录到任何一个站点,我就可以转到另一个站点,无需再次登录即可完成我的业务

我想知道的是这个场景背后站点之间的一般交互机制

在我的特定设置中,我使用的是Rails,但我不是在寻找代码[1],而是一般的最佳实践和指导,所以请随意使用伪代码或任何一般可读的语言回答。OTOH,请记住,我的工具包中有不错的MVC、REST和元编程



[1] :除非您碰巧知道现有的小型免费MIT/BSD许可应用程序/插件/生成器可以处理此问题。

听起来您想实际使用OpenID协议本身。您没有理由不能将身份验证提供程序仅限于您自己的服务器,并执行一些使身份验证过程透明的快捷方式。此外,OpenID协议支持你所描述的关于登录到一个意味着登录到所有服务。

< P>听起来(尤其是强调无需忙乱),你想要的东西像维基媒体基金会正在做的事情。基本上,您登录到en.wikipedia.org,然后该服务器与其他服务器(例如en.wikinews.org)通信并获取身份验证令牌。最后,这些标记被嵌入到图像中,例如,当您的浏览器访问该url(img src)时,它将获得Wikinews的身份验证cookie。当然,源代码可以在上查看

OpenID也是一个不错的选择,但它确实要求用户“有意识地”访问两个域。一个实体和两个域这样做的例子是规范的。例如,如果您转到,他们会将您重定向到Launchpad()进行身份验证

请注意,Wikipedia是通过http实现的,但您可以通过https来确保img src令牌不会被截获。

看起来对我来说已经足够好了,并且有ruby实现,还有几十种其他较小的语言,例如与股骨愤怒押韵的语言


是的,看起来确实是这样,我很乐意。但是有一个现有的用户数据库,还有一个普遍的客户对依赖第三方系统的偏见。此外,这些将是付费账户,虽然我认为这在技术上并不重要,但它确实会影响客户偏见的严重性。这可能会带来额外的好处,用户可以使用它登录到其他支持OpenID的网站。