我正在为一组 RESTful web 应用程序的用户开发一个内部认证系统。我们的意图是,用户应该能够通过 Web 表单进行一次登录,并且可以访问我们域中所有这些 RESTful 应用程序,这些应用程序可能分布在私有云上的许多服务器上。(我已经了解到,拥有单个经过身份验证的会话与纯 RESTful 方法不符,但这是可用性要求。)
应用程序本身将使用各种编程语言编写,因此需要一种语言中立的方法。有人建议我们可以使用 OpenID 或 OAuth 或类似框架来处理身份验证,但我的理解是,这些框架适用于第三方服务而不是在我们内部系统上共享数据的第一方服务。在这种情况下,我们可能会有一个中央提供者服务,所有其他应用程序被视为第三方(或依赖方)。
问题:
- OpenID/OAuth 是否适用于第一方服务之间的身份验证?
- 如果是,如何建议设置此用例的身份验证?
- 用户是否需要向每个想要使用的第一方服务器授予权限,就像他们需要向任何第三方服务器授予权限一样?我认为这将违反具有访问所有第一方服务的单个登录的要求。
- 有哪些支持此第一方使用案例的良好示例站点?
- 对于这种第一方使用情况,有哪些良好的替代框架?
答案:
- OpenID/OAuth 适用于第一方服务之间的身份验证吗?
- 如果是,如何建议设置此用例的身份验证?
- 用户是否需要向每个想要使用的第一方服务器授予权限,就像他们需要向任何第三方服务器授予权限一样?我认为这将违反具有访问所有第一方服务的单个登录的要求。
- 有哪些支持此第一方使用案例的良好示例站点?
- 对于这种第一方使用情况,有哪些良好的替代框架?
是的,可以使用 OpenID 或 OAuth 来进行第一方服务之间的身份验证。
一个中央提供者服务可以被用作身份提供者,并且所有其它应用程序都将被视为依赖方。当用户首次登录时,中央提供者将颁发一个令牌,该令牌将被用于访问所有需要身份认证的应用程序。
不需要。在中央提供者服务上进行一次登录后,用户将可以访问所有需要身份验证的应用程序,而无需向每个应用程序授予权限。
许多大型组织和企业都在内部使用类似的身份验证系统。例如,谷歌、亚马逊和微软等公司都有类似的解决方案。
除了 OpenID 和 OAuth 之外,还有其他身份验证框架可用于第一方服务之间的身份验证,例如 SAML 和 JWT。