跨平台SSO - 从哪里开始?

wrs*_*der 5 .net josso java-ee single-sign-on

我正在调查两个不同系统之间单点登录的选项:一个.NET,一个Java EE.它们各自独立管理,并具有单独的用户管理,以及一些重叠的用户.

我希望能够在不重新提示输入密码的情况下从一个链接到另一个.

似乎SSO产品和协议有很多选择.我相当自信我可以编写一次性的代码来生成和验证我自己的安全令牌,但我不想重新发明轮子.

在方法和/或产品(最好是开源)方面,您会建议什么?

首先,你会选择支持SAML,OpenID,OAuth或以上都不支持的东西吗?

其次,在那里的免费/开源产品中,我了解OpenAM,Shibboleth,JOSSO和CAS.有什么经验可以与他们分享,好,坏或难看?

小智 9

首先让我们来看看协议:

  1. SAML 2.0是一种集中/分散的SSO协议.它是最先进的协议并提供联合,即您可以允许用户使用任何一个X系统登录,或通过单个系统(称为IDP)引导所有用户.SAML 2.0广泛用于金融和政府部门以及一些主要托管应用程序(例如Google应用程序和Saleforce).它也是最复杂的协议

  2. OpenID是一种分散协议,最适合互联网,而不是内部网/外部网应用.用户可以选择从任何OpenId提供商登录.Stackoverflow是OpenId的一个很好的例子 - 我们可以选择使用我们的Google或Facebook帐户登录.您可以通过强制使用应用程序(称为依赖方)和SSO系统(称为服务提供程序)之间的默认关联,以集中方式实现OpenId.

  3. OAuth实际上不是SSO协议.它允许用户授予应用程序A访问应用程序B中的信息的权限,而无需将应用程序B的凭据提供给应用程序A.有些人使用OAuth作为伪身份验证的形式,即系统是否能够访问属于用户X的照片然后用户必须是X.这是一个黑客,不推荐.

使用标准化协议以避免锁定绝对是个好主意.微软最近推出了对SAML 2.0的支持,并且有许多可用于Java的开源和商业产品.有一些OpenId实现可用于java,但我不太了解.NET世界的评论.

正如您所提到的,有一系列开源SAML产品可用(OpenAM,Shibboleth,JOSSO和CAS).需要注意的一点是 - SAML是一个复杂的协议,所以如果你沿着开源路线走下去,你需要为一些艰苦的工作做好准备.当我们构建Cloudseal SSO平台(基于SAML 2.0)时,我们花了很多时间来简化事情以抽象复杂性.其他商业供应商也做了同样的事情,但你提到的开源产品更侧重于功能而不是简单 - 恕我直言!:)