实施SSO的最佳方式是什么?

时间:2017-01-03 16:56:20

标签: spring-security oauth-2.0 single-sign-on jwt openid-connect

这更像是一个设计问题。

我们有用Java和Spring编写的Web应用程序“webapp”,我们的组织内部以及外部人员都在使用它。当用户尝试登录到应用程序时,它会尝试在本地数据库中查找用户。如果有密码(加密),它将对其进行身份验证,如果密码列为空,它将与LDAP通信并对用户进行身份验证。现在我们有一个新的移动应用程序“mobileapp”,其中包含指向“webapp”的链接。我们正在考虑在此处实施SSO,以便移动应用用户在点击此链接时不必再次登录。我们还认为,未来将需要更多的服务和应用程序必须在相同的身份验证/授权平台上密切合作。我们认为我们可以做的事情很多 -

  1. 从“webapp”中删除身份验证和授权代码,并将其作为单独的服务-AA服务
  2. 让AA服务生成OAuth令牌,让任何包含webapp的客户端应用程序都使用“使用AA服务登录”按钮登录。
  3. 听起来这是一个很好的解决方案吗?有没有更好的方法来处理这个问题?是否已经在Java / Spring / Oauth / OpenID connect / JWT等中构建了这样的解决方案?

1 个答案:

答案 0 :(得分:1)

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

  • 登录网络流程
  • 网络服务电话(来自其他网站)
  • 移动应用验证流程(问题是:您是否要嵌入或不嵌入登录页面/流程?)

我看到两个主要解决方案:

1)使用CAS协议,a)登录Web流程是微不足道的,b)Web服务调用是通过CAS代理支持(更复杂)和c)移动应用程序身份验证流程(将凭证直接发布到服务器) )可以通过REST API支持实现。

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

请参阅:What OpenID Connect authorization flow to authenticate mobile app users?http://connect2id.com/learn/openid-connect

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