我正在调查两个不同系统之间单点登录的选项:一个.NET,一个Java EE。它们各自独立管理,并具有单独的用户管理,以及一些重叠的用户。
我希望能够在不重新提示输入密码的情况下从一个链接到另一个。
似乎SSO产品和协议有很多选择。我相当自信我可以编写一次性代码来生成并验证我自己的安全令牌,但我不想重新发明这个轮子。
在方法和/或产品(最好是开源)方面,您会建议什么?
首先,你会选择支持SAML,OpenID,OAuth或上述任何内容的东西吗?
其次,在那里的免费/开源产品中,我了解OpenAM,Shibboleth,JOSSO和CAS。有什么经验可以与他们分享,好,坏或难看?
答案 0 :(得分:9)
首先让我们看一下协议:
SAML 2.0 是一种集中式/分散式SSO协议。这是最多的 高级协议并提供联合,即您可以允许用户 使用任何一个X系统登录,或通过a通道所有用户 单一系统(称为IDP)。 SAML 2.0广泛应用于 金融和政府部门以及一些主要的托管 应用程序(例如Google apps和Saleforce)。它也是 最复杂的协议
OpenID 是一种分散协议,最适合互联网, 不是Intranet / Extranet应用程序。用户可以选择从中登录 任何OpenId提供者。 Stackoverflow是OpenId的一个很好的例子 - 我们 可以选择使用我们的Google或Facebook帐户登录。您可以 通过强制默认以集中方式实现OpenId 消费应用程序之间的关联(称为依赖 Party)和SSO系统(称为服务提供商)。
OAuth 并非真正的SSO协议。它允许用户授予 应用程序无需访问应用程序B中的信息 向应用程序A提供应用程序B的凭据 人们已经使用OAuth作为伪身份验证的一种形式,即如果 系统能够访问属于用户X的照片然后 用户必须是X.这是一个黑客,不推荐。
使用标准化协议以避免锁定绝对是一个好主意。微软最近推出了对SAML 2.0的支持,并且有许多可用于Java的开源和商业产品。有一些OpenId实现可用于java,但我对.NET世界的评论知之甚少。
正如您所提到的,有一系列开源SAML产品(OpenAM,Shibboleth,JOSSO和CAS)。需要注意的一点是 - SAML是一个复杂的协议,所以如果你沿着开源路线走下去,你需要为一些艰苦的工作做好准备。当我们构建我们的Cloudseal SSO平台(基于SAML 2.0)时,我们花了很多时间来简化事情来抽象复杂性。其他商业供应商也做了同样的事情,但你提到的开源产品更侧重于功能而不是简单 - 恕我直言! :)