【问题标题】:SSO, the unknown [closed]SSO,未知数[关闭]
【发布时间】:2012-04-26 12:26:59
【问题描述】:

我开始为我们为同一个客户端制作并仍在维护的 3 个不同的 web 应用程序开发 SSO 解决方案。

事情是,所有 3 个都通过 第四个单独的应用程序 将他们的用户和登录信息存储在同一个地方,该应用程序仅提供基本的 restful api 服务。 这基本上意味着当一个人尝试登录时,我们实际上会调用其余服务来询问此用户名和密码是否正确。

在某种程度上,这第四个宁静的东西已经至少完成了我们需要的一半工作。

我们现在需要一种方法让用户登录到 webapp A,然后点击链接(或简单地输入其 url)到 webapp B(或简单地输入它的 url)并到达那里已经登录(反之亦然)。

我已经阅读了很多关于 CASopenID 甚至 oauth 的内容,但我还没有真正下定决心。 这个模式是集中式的吗?去中心化?

我的一万英尺视图表明我只需要将这个“缺失的功能”添加到我们宁静的 api 服务器。

但是怎么做呢?

ps:这三个是完全分开的。部署在不同的机器上(其中两台在 glassfish 上运行,另一台在 tomcat 上运行)。不同的域。

pps:它们都是 spring 驱动的 webapp(因此它们使用 spring-security

ppps:截至今天,还有其他 webapps 使用我们的 restul api(非 spring,非 java)。 这个 sso 解决方案可能也必须准备好处理这些问题。

【问题讨论】:

    标签: java spring-security single-sign-on cas


    【解决方案1】:

    是的,听起来您需要一个“真正的”单点登录系统,而不仅仅是一个集中的凭证存储库。正如您所提到的,有几种选择:

    1. OpenId - 更适合您在其中的 Internet 类型的应用程序 希望允许用户使用以下凭据登录您的系统 由第三方维护。 Stackoverflow 就是一个典型的例子。 您可以使用您的谷歌帐户等登录。

    2. Oauth 提供伪身份验证和 sso - 而 OpenId 说 “这是用户 x” oauth 说“这个用户可以访问 x 的 信息" ...因此您可以假设用户是 x。

    3. CASCloudsealOpenAM等都提供真单 登录并适用于 Intranet 或 Extranet 环境。 CAS 和 Cloudseal 对 Spring 的支持特别好。

    【讨论】:

    • 谢谢。好的,我正在阅读有关 CAS 集成的 spring-security 文档。有一点(22.2.1)开始逐步描述通常的交互。然后它说 “CasAuthenticationEntryPoint 会将用户的浏览器重定向到 CAS 服务器...”。 我不希望这种情况发生。用户仍应通过我们的网站登录。 不需要重定向。有任何线索吗?
    • 刚刚发现所谓的 CAS 网关功能。猜猜这是我需要的
    【解决方案2】:
    • 主站点确保请求(returnURL)来自域白名单
    • 登录用户(如果未登录,则显示登录表单),将用户标记为登录数据库并将临时令牌添加到用户数据库。
    • 主站点返回(重定向)到带有令牌的 RP。
    • RP 使用令牌查看数据库,记录用户并删除令牌。

    SSOff 也很简单:只需将用户数据库中的每个请求检查到布尔记录 (userLogged) 中。没有重定向。注销时只需将记录 (userLogged) 更改为 false,每个站点都会知道。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-18
      • 1970-01-01
      • 2019-10-31
      • 2017-10-11
      • 2010-10-22
      • 2019-05-18
      • 1970-01-01
      相关资源
      最近更新 更多