实施 SSO 的最佳方式是啥?
Posted
技术标签:
【中文标题】实施 SSO 的最佳方式是啥?【英文标题】:What is the best way to implement SSO?实施 SSO 的最佳方式是什么? 【发布时间】:2017-05-17 20:12:27 【问题描述】:这更像是一个设计问题。
我们有用 Java 和 Spring 编写的 Web 应用程序“webapp”,我们组织内部的人和外部的人都可以使用它。当用户尝试登录应用程序时,它会尝试在本地数据库中查找用户。如果有密码(加密),它将对此进行身份验证,如果密码列为空,它将与 LDAP 对话并对用户进行身份验证。现在我们有了一个新的移动应用程序“mobileapp”,它有一个指向“webapp”的链接。我们正在考虑在此处实施 SSO,以便移动应用程序用户在单击此链接时不必再次登录。我们还认为,未来将有更多的服务和应用程序必须在同一个身份验证/授权平台上紧密合作。我们认为我们可以做的几件事 -
-
从“webapp”中删除身份验证和授权代码,并将其设为单独的服务 -AA 服务
让 AA 服务生成 OAuth 令牌,让包括 webapp 在内的任何客户端应用使用“使用 AA 服务登录”按钮登录。
这听起来像是一个好的解决方案吗?有没有更好的方法来处理这个问题?是否已经在 Java/Spring/Oauth/OpenID connect/JWT 等中内置了此类解决方案?
【问题讨论】:
【参考方案1】:对我来说,您需要考虑三个主要用例:
登录网页流程 Web 服务调用(来自其他网站) 移动应用身份验证流程(问题是:您是否要嵌入登录页面/流程?)我看到了两个主要的解决方案:
1) 使用 CAS 协议,a) 登录 Web 流程很简单,b) 通过 CAS 代理支持进行 Web 服务调用(更复杂)和 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) 的创建者
【讨论】:
以上是关于实施 SSO 的最佳方式是啥?的主要内容,如果未能解决你的问题,请参考以下文章
实施 Pipeline 以确保训练和测试虚拟变量相同的最佳方法是啥?
对于使用 Facebook iOS SDK 的混合 SSO 场景,为我们自己的自定义用户记录生成密码/密钥的最佳方式是啥?