实施 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 服务登录”按钮登录。

这听起来像是一个好的解决方案吗?有没有更好的方法来处理这个问题?是否已经在 J​​ava/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 的最佳方式是啥?的主要内容,如果未能解决你的问题,请参考以下文章

为您的时事通讯实施退订链接的最佳方式是啥?

DB Audit Trail 的最佳实施是啥? [关闭]

实施 Pipeline 以确保训练和测试虚拟变量相同的最佳方法是啥?

使用 Shiro 实施 SSO 的分步指南

对于使用 Facebook iOS SDK 的混合 SSO 场景,为我们自己的自定义用户记录生成密码/密钥的最佳方式是啥?

实施WSO2 SSO