Spring security 实现SSO的最佳方法是什么?

Spring security 实现SSO的最佳方法是什么?,spring-security,oauth-2.0,single-sign-on,jwt,openid-connect,Spring Security,Oauth 2.0,Single Sign On,Jwt,Openid Connect,这更像是一个设计问题 我们有用Java和Spring编写的web应用程序“webapp”,它被我们组织内部的人和外部的人使用。当用户尝试登录到应用程序时,它会尝试在本地数据库中查找用户。如果存在密码(加密),它将根据该密码进行身份验证;如果密码列为空,它将与LDAP对话并对用户进行身份验证。现在我们有了一个新的移动应用程序“mobileapp”,它有一个指向“webapp”的链接。我们正在考虑在这里实现SSO,以便移动应用程序用户在单击此链接时不必再次登录。我们还认为,未来几乎没有更多的服务和应

这更像是一个设计问题

我们有用Java和Spring编写的web应用程序“webapp”,它被我们组织内部的人和外部的人使用。当用户尝试登录到应用程序时,它会尝试在本地数据库中查找用户。如果存在密码(加密),它将根据该密码进行身份验证;如果密码列为空,它将与LDAP对话并对用户进行身份验证。现在我们有了一个新的移动应用程序“mobileapp”,它有一个指向“webapp”的链接。我们正在考虑在这里实现SSO,以便移动应用程序用户在单击此链接时不必再次登录。我们还认为,未来几乎没有更多的服务和应用程序必须在同一个身份验证/授权平台上密切合作。我们认为我们可以做的几件事-

  • 从“webapp”中删除身份验证和授权代码,并将其作为单独的服务-AA服务
  • 让AA服务生成OAuth令牌,并让任何客户端应用(包括webapp)使用“使用AA服务登录”按钮登录

  • 这听起来是个好办法吗?有没有更好的方法来处理这个问题?Java/Spring/Oauth/OpenID connect/JWT等中是否已经构建了这样的解决方案

    对我来说,您需要考虑三个主要用例:

    • 登录web流
    • web服务呼叫(来自其他网站)
    • 移动应用验证流(问题是:是否要嵌入登录页面/流?)
    我看到两个主要的解决方案:

    1) 使用CAS协议,a)登录web流非常简单,b)web服务调用通过CAS代理支持(更复杂)进行,c)移动应用程序身份验证流(将凭据直接发布到服务器)可以通过REST API支持实现

    2) 使用OAuth/OpenID连接协议,a)通过授权代码流协议支持登录web流,b)使用先前检索到的ID令牌通过HTTP请求进行web服务调用;c)如果移动应用接收到凭据,则可以使用OAuth资源所有者密码授权流进行移动应用验证流;如果移动应用调用了嵌入式web浏览器中的登录页,则可以通过隐式流进行移动应用验证流

    见:和

    免责声明:我是CAS提交人,也是pac4j安全库(www.pac4j.org)的创建者