【发布时间】:2021-04-07 15:35:27
【问题描述】:
我们有一个由 OIDC 保护的 API(实际上是几个微服务)。授权服务器由我们的客户(不是我们内部)拥有和管理,并为我们的 SPA 提供身份令牌。然后,该 SPA 将该身份令牌传递给我们的后端服务器,该服务器验证该令牌,提取 SubjectId(用户),然后在内部数据库中查找他们的角色。我们没有使用令牌进行授权(意味着我们忽略声明),它仅用于身份验证。
我们有一个在安全环境中运行的后端 Windows 服务(因此它可以安全地存储机密),它需要调用相同的 API。为了调用 API,它需要一个 OIDC 身份令牌来提供身份验证。安全地执行此操作的最佳方法是什么?
我们已经研究了这些选项:
- 用户名/密码流 (OIDC) - 我们拒绝了它,因为它已被弃用。这使得它不是新代码的可靠选择,而且我们不能确定我们的客户现在和将来是否会允许使用它。
- 客户端凭据流 (OIDC) - 我们尝试了这个...但它只提供了一个没有身份令牌的访问令牌。我们的全部要求是一个身份令牌(当我们使用它来查找系统中的角色时)......所以这似乎不是一个选项。
- 我看了这篇文章:https://nordicapis.com/how-to-handle-batch-processing-with-oauth-2-0/,这很有趣。我可以设置一个不会过期(或非常长)的身份令牌,仅限于一个流或另一个流......但需要我托管和 OIDC 服务器或管理他们的。我们的客户不会提供访问权限。
- Martin Fowler 写了一篇关于为此目的使用 Refresh Tokens 的文章:https://martinfowler.com/articles/command-line-google.html 这有两个问题:它是针对 Auth 而不是 OIDC...所以它不处理身份令牌。应该工作,但好奇它是否已经完成。此外,在我的情况下,没有人在刷新令牌过期时刷新它......我需要一些不会过期或可以由后端服务自动刷新的东西。
什么是最好的选择?
【问题讨论】:
-
只是为了确保我理解...您拥有所有资源(SPA 和 API),但不拥有授权服务器?而且您编写的 API 需要 OIDC 而不是 OAuth?
-
#Andrew 没错。我们的软件部署在客户环境中。他们希望使用其内部 SSO (oidc) 来管理身份验证(但不是授权)。我们接受身份令牌来识别用户的身份,因此我们需要 oidc(提供身份)而不是 oauth(管理访问但不管理身份)
标签: oauth-2.0 identityserver4 openid-connect jwt-auth pingfederate