我需要在OpenID Connect的JAVA Web App中实现SSO。我已经拥有使用SAML 2.0和WSO2作为身份提供商的SSO经验。
我很清楚客户端部分,并计划在Spring Security中实现相同的功能。
我的问题是,为OpenID Connect构建我自己的身份提供程序是否有意义?由于某些原因,我不想使用任何第三方IDP(如WSO2)。
如果是,是否有任何图书馆可以提供帮助?如果不是,我可以用于OpenIDConnect的最佳IDP是什么?当然,WSO2位于我的列表之上,因为我已经使用WSO2实现了SAML SSO并且它还支持OpenID连接。
欢迎任何经验或建议。
答案 0 :(得分:3)
这个问题的答案并不那么简单。但我会尝试总结一些有助于做出决定的关键点。
您必须自己开发和维护所有内容。这意味着实施遵守OpenID Connect的规范(RFC6749)。除此之外,您需要注册客户端,发出令牌,验证令牌并维护令牌状态(已发布的刷新令牌)。事实上,像Nimbus这样的一些图书馆会派上用场。
如果您与第三方打交道,您必须严格遵守规范。根据人才库的不同,可能需要更高的开发成本和工作量
任何内部开发都将提供支持和维护。随着时间的推移,错误修复,问题和新功能要求的成本会很高,并且可能需要宝贵的开发人员时间
正如您所提到的,实施您自己的身份提供商并使其与任何现有产品一样具有挑战性。此外,身份提供者应该是可靠的。它必须足够安全以维持安全攻击(特别是如果您将其暴露给互联网)。实施应该从头开始考虑安全性(例如: - 用于令牌签名的安全证书,访问令牌和刷新令牌熵)
根据提供商的不同,它可能是免费的开源或付费工具。如果它是已建立的产品,那么实施工作就会减少
现在这取决于服务协议。您可能需要支付费用。但是你摆脱了维护。产品可能缺少您期望它具有的某些功能(ex- RFC7662 - 令牌内省端点)。例如,MS Azure AD缺少内省端点。
鉴于它是您购买或公开使用的产品并且被许多人使用,商业产品往往具有最佳性能。事实上,它们是由领域专家开发的(例如: - 经过所有规范的专业团队)并且可以包含更高的可靠性。
P.S -
无论考虑所有这些因素,都可能需要开发和维护内部身份提供者。如果是这种情况,您必须根据相关规范实施并使其安全。希望这有助于你的决定。