选择 OpenID Connect 提供商

Choosing an OpenID Connect Provider

我需要在我的 JAVA Web 应用程序中使用 OpenID Connect 实施 SSO。我已经有使用 SAML 2.0 和 WSO2 作为身份提供者的 SSO 经验。

我在客户端很清楚,并计划在 Spring 安全方面实现相同的功能。

我的问题是,为 OpenID Connect 构建我自己的身份提供商是否有意义?出于某些原因,我不想使用任何第三方 IDP(如 WSO2 ).

如果是,是否有任何图书馆可以提供帮助?如果不是,什么是我可以用于 OpenIDConnect 的最佳 IDP? 当然,WSO2 是我的首选,因为我已经使用 WSO2 实现了 SAML SSO,它也支持 OpenID 连接。

欢迎任何经验或建议。

这个问题的答案不是那么简单。但我会尝试总结一些关键点,这将有助于做出决定。

实施内部身份提供商

  • 成本和努力

你将不得不自己开发和维护一切。这意味着实施规范(OpenID Connect) adhering to RFC6749. Adding to that you need to register clients, issue tokens, validate tokens and maintain token state (ex- issued refresh token). Indeed some libraries like Nimbus 会派上用场。

如果您与第三方打交道,您必须严格遵守规范。根据人才库的不同,这可能需要更高的开发成本和工作量

  • 维护和支持

任何内部开发都将提供支持和维护。随着时间的推移,错误修复、问题和新功能要求的成本会很高,并且可能需要宝贵的开发人员时间

  • 性能和可靠性

正如您所提到的,实施您自己的身份提供者并使其像任何现有产品一样运行是一项挑战。此外,身份提供者应该是可靠的。它必须足够安全以承受安全攻击(特别是如果您将其暴露在互联网上)。实施时应从头开始考虑安全性(例如:- 用于令牌签名、访问令牌和刷新令牌熵的安全证书)

使用第三方产品

  • 成本和努力

根据提供商的不同,它可以是免费和开源的,也可以是付费工具。如果它是一个成熟的产品,那么实施工作就会更少

  • 维护和支持

现在这取决于服务协议。您可能需要支付支持费用。但是你摆脱了维护。产品可能缺少您期望它具有的某些功能(例如 RFC7662 - 令牌自省端点)。例如 MS Azure AD 缺少自省端点。

  • 性能和可靠性

鉴于这是您购买的产品或公开提供并被许多人使用的产品,商业产品往往具有最佳性能。事实上,它们是由领域专家开发的(例如:- 一个已经通过所有规范的专门团队)并且可能包括更高的可靠性。

P.S -

不管所有这些考虑因素,都可能需要开发和维护内部身份提供者。如果是这种情况,您必须根据相关规范实施它并使其安全。希望这对您的决定有所帮助。