为 SAAS 实施 SSO 和 Spring Security

Posted

技术标签:

【中文标题】为 SAAS 实施 SSO 和 Spring Security【英文标题】:Implementing SSO and Spring Security for SAAS 【发布时间】:2014-02-18 21:58:11 【问题描述】:

这是我们在高层次上想要的。

我的要求,

    客户应该能够使用他们的现有用户名/密码访问我的应用程序。

    我的客户应该能够向我提供他们的用户角色,并在此基础上管理服务器中的资源授权。

    客户端将共享数据库。 (多租户)。

我遇到的 OAuth 2.0 示例是利用 Facebook/Google 等身份验证服务器,用户可以通过他们的 google 或 facebook 帐户登录。 我不希望我的客户能够使用他们自己的帐户登录。

就 CAS 身份验证服务器而言,它会将用户引导至其自己的登录页面。

我正在寻找一种标准方式,在这种方式中我可以使用 Spring Security 并允许我的客户单点登录用户自己的凭据。任何参考都会有很大帮助。谢谢。

【问题讨论】:

【参考方案1】:

如前所述,CAS 是一种网络 SSO,因此您需要通过它自己的身份验证页面才能使 SSO 正常工作。有很多方法可以让 CAS 与您的身份验证持久系统一起工作(在我的项目中,我通常使用 JPA,因为我的客户有许多仅基于关系数据库持久性的旧应用程序)。 在您的项目中,我想您可以设置 CAS 以使用您的应用程序身份验证方法,而您的应用程序可以直接指向 CAS 进行身份验证。我的意思是你的应用程序也应该使用 CAS 进行单点登录,这样用户就可以只输入一次他们的凭据。最后,您可以自定义 CAS 主题以获得与您的应用程序具有相同布局的登录和错误页面(您甚至可以在 iframe 中加载 CAS 登录页面,然后如果您想将其集成到您的 web 应用程序中,则在成功时重新加载您的应用程序页面) .

如果我理解你写的内容,你希望它表现得这样:

    您登录您的应用程序 您的应用程序告诉 CAS 您已登录 您访问另一个应用程序 其他应用程序询问 CAS 用户是否已登录并且 CAS 回答“是”

但对工作流程的“简单”解释是:

    您尝试访问任何使用 CAS(您或其他人)保护的应用程序的安全部分 应用程序询问 CAS 用户是否已登录 CAS 回答否,因此用户被重定向到 CAS 登录 用户使用 CAS 进行身份验证 CAS 将用户重定向到调用应用程序 应用程序询问 CAS 用户是否已登录并且 CAS 回答“是” 用户可以访问应用程序的安全部分 用户尝试访问另一个应用程序 “另一个”应用程序询问 CAS 用户是否已登录并且 CAS 回答“是” 用户可以访问“另一个”应用程序的安全部分

【讨论】:

【参考方案2】:

CAS 是一个 Web SSO,因此您将能够在多个 Web 应用程序之间共享用户身份,并且 Spring Security 是一个很好的 CAS 客户端。 您还可以启用 CAS 服务器将身份验证委托给 Facebook 或 Google。 这个想法是让您的 CAS 服务器对您的用户进行身份验证并获取他们的个人资料,然后将他们推送到 Web 应用程序。

【讨论】:

我不希望我的客户/用户进入第三方登录页面并输入他们的登录凭据。我的客户(已登录到他们的应用程序)只需单击一个链接即可将他们带到我的 SAAS 应用程序。 通过 CAS,我看到他们被重定向到 CAS 登录页面。我的 SAAS 客户/用户不喜欢去第三方登录页面(CAS 登录或 Facebook/gmail 登录)并重新输入他们的登录凭据。 如果您想为多个应用程序从 SSO 中受益,您需要将身份验证委托给 CAS 服务器,并且登录页面将由 CAS 服务器托管...【参考方案3】:

我认为 CAS 提供了 REST API。

如果可以用于登录,那么各种应用程序可以显示自己的登录界面并将用户名/密码发送到 CAS。

【讨论】:

以上是关于为 SAAS 实施 SSO 和 Spring Security的主要内容,如果未能解决你的问题,请参考以下文章

实施 SSO 的最佳方式是啥?

Java Spring 应用程序 - 与 Azure AD 集成以实现 SSO

使用 Shiro 实施 SSO 的分步指南

实施WSO2 SSO

从SSO中的多个系统注销(单点登录)

Saas服务优势