gpt4 book ai didi

oauth-2.0 - OIDC - 获取身份 token 以供运行计划作业的后端(无实际用户)服务使用

转载 作者:行者123 更新时间:2023-12-04 13:10:44 29 4
gpt4 key购买 nike

我们有一个由 OIDC 保护的 API(实际上是几个微服务)。授权服务器由我们的客户(非我们内部)拥有和管理,并为我们的 SPA 提供身份 token 。该 SPA 然后将该身份 token 传递给我们的后端服务器,该服务器验证 token ,提取 SubjectId(用户),然后在内部数据库中查找他们的角色。我们不使用 token 进行授权(意味着我们忽略声明),它仅用于身份验证。

我们有一个在安全环境中运行的后端 Windows 服务(因此它可以安全地存储 secret ),需要调用相同的 API。为了调用 API,它需要一个 OIDC 身份 token 来提供身份验证。安全地执行此操作的最佳方法是什么?

Diagram of the System

我们已经研究了这些选项:

  1. 用户名/密码流 (OIDC) - 我们拒绝了它,因为它已被弃用。这使得它不是新代码的可靠选择,而且,我们不能确定我们的客户现在和将来是否会允许使用它。
  2. Client Credentials Flow (OIDC) - 我们试过这个...但它只提供没有身份 token 的访问 token 。我们的全部要求是一个身份 token (因为我们用它来查找我们系统中的角色)...所以这似乎不是一个选项。
  3. 我看过这篇文章:https://nordicapis.com/how-to-handle-batch-processing-with-oauth-2-0/这很有趣。我可以设置一个非过期(或非常长)的身份 token ,仅限于一个流或另一个......但需要我托管和 OIDC 服务器或管理他们的。我们的客户不会授予访问权限。
  4. Martin Fowler 写了一篇关于为此目的使用刷新 token 的文章:https://martinfowler.com/articles/command-line-google.html这有两个问题:它是针对 Auth 而不是 OIDC 的……所以它不处理身份 token 。应该工作,但好奇它是否已经完成。另外,就我而言,刷新 token 过期时没有人可以刷新...我需要一些不会过期或可以由后端服务自动刷新的东西。

什么是最好的选择?

最佳答案

首先让我说,我不会推荐您拥有的架构。所以,我会给你两个答案:一个短期的实用答案和一个中期的答案,这将导致一个更理想的系统。

首先,快速修复:在 API 中启用基本身份验证。然后,使用基本身份验证和长密码从计划任务运行器调用您的 API,如下所示:

Authorization: basic bXktZ29vZC1zZXJ2aWNlOkY2M0JEOTkyLTMzNTUtNDYzNi1CNzFBLTM3RDg0QzI3ODEzRQo=

然后,继续验证您从 SPA 获得的 ID token 。我假设您使用 RFC 6750 中描述的技术将其发送到 API:

Authorization: bearer eyJhbGciOiJSUzI1NiJ9.ey...

因此,这两种不同的身份验证方法使 API 可以轻松判断调用者是谁。更重要的是:它应该容易实现,即使授权发生了变化。这应该有希望让你扑灭大火,然后在更基本的层面上解决问题。

当你达到这一点时,我建议你做两件事:

  1. 添加您自己的 token 服务(即授权服务器)。 API 应该只信任它自己的授权服务器,而不是某个外国的。这将形成一个枢轴点,这是您现在需要但没有的。

  2. 仅在您的 API 中接受访问 token 。 API 应该只使用访问 token 。如果 API 接受 ID token ,则有 99% 的可能性它做错了。

SPA 是您图片中唯一需要 ID token 的 SPA。它应该得到那个一个访问 token 。更重要的是,它应该从您的 OpenID Connect 提供商 (OP) 获取此信息,而不是您客户的。这应该反过来为您的客户执行 OpenID Connect,但通常会处理身份验证,以便您的应用程序将来可以处理其他身份验证要求,而无需更改 SPA。此外,其他应用程序可以重用所有这些。

SPA(和调度服务)应该向 API 发送访问 token 。 token (或其 phantom or split form)应至少包含主题 ID,以便它可以获得授权调用所需的更多信息。这应该来自您的 token 服务(即您的新 OP,因为它将执行 OAuth 和 OIDC)。

我会推荐以下高级架构文档和视频。这些将有助于您继续改进实现:

关于oauth-2.0 - OIDC - 获取身份 token 以供运行计划作业的后端(无实际用户)服务使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65518690/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com