哪种跨域单点登录实现最能解决我的问题?
我有两个域(xy.com 和 yz.com),它们已经拥有自己的用户数据库,并且已经分别实现了他们的用户身份验证。最近需要实施 CDSSO,以便用户不必在每次尝试访问来自两个域的资源时登录。
理想情况下,我希望使用的 CDSSO 实现应该允许身份验证的自定义实现,因为我希望在身份验证期间调用两个域提供的 API,以确认用户存在于至少一个域用户数据库中。
我一直在看Sun的OpenSSO,它似乎提供了一种扩展其AMLoginModule类的方法,但这似乎是一件很长的事情,更烦人的是他们似乎坚持使用GlassFish。
我还考虑开发一个定制的 CDSSO 来解决我们的需求。这是可取的吗?
考虑到不同的用户数据库,使用Suns OpenSSO是否可以实现这一点,因为我不需要使用OpenSSO所需的用户数据库?
有没有更简单的方法来实现我想要实现的目标?
此外,存在于这两个域上的两个应用程序都是使用PHP开发的。考虑到Sun的OpenSSO是基于Java EE的,这有什么影响?
从头到尾实施OpenSSO和/或任何其他SSO实现是否有任何明确指定的步骤?
我建议您使用simpleSAMLphp来部署一个身份提供程序和2个服务提供程序(针对每个应用程序)。
SimpleSAMLphp 允许您选择多个身份验证源,并且不难构建自己的身份验证源来查询 2 个数据库。
我在 SAML 中的经验表明,由于以下几个原因,不将用户的身份合并到 1 个唯一的身份验证源中是一个坏主意: * 身份冲突:如果您使用不同的邮件注册了同一用户(如果这是 yoy 用于识别用户的字段)并且您尝试访问,会发生什么情况?您每次都可能登录不同的帐户。 * 如果添加第 3 个服务会发生什么,是否要添加第 3 个数据库 * 如果用户在一个应用程序中更改其数据,而另一个应用程序将不同步,会发生什么情况? * 如果用户使用不同的密码会怎样?
我建议您在添加 SAML 支持之前执行迁移过程,并为您的所有身份构建一个唯一的数据库,并将两个站点的注册/编辑配置文件/密码恢复过程统一为一个。
SimpleSAMLphp 有很好的文档,但我可以为您提供与我建议的过程相关的任何文档。