【问题标题】:Retrieve id_token based on access_token in API根据 API 中的 access_token 获取 id_token
【发布时间】:2016-10-26 08:31:00
【问题描述】:

我们目前正在构建后端 ASP.NET Core 微服务的集合。这些服务不会直接从前端应用程序访问,而是通过 ASP.NET Core API 网关访问。我们将 IdentityServer4 用于 OpenID Connect 服务器。我已经能够设置UseJwtBearerAuthentication 中间件让 API 网关针对 IdentityServer4 验证 JWT 不记名令牌 (access_token)。我希望能够让 API 网关根据 access_token 将 id_token 注入到可能需要了解最终用户的后端服务的请求中。

有没有办法配置 JWT 中间件在验证 access_token 时检索 id_token 还是我需要在 API 网关中手动调用 OpenID Connect 服务器?

【问题讨论】:

  • 你为什么不在后端服务上使用 access_token 而不是 id_token (只是我想知道)。

标签: asp.net-core openid-connect identityserver4


【解决方案1】:

JWT 中间件执行独立验证,它不联系身份服务器来验证或检索任何内容。您必须再打一个电话。

【讨论】:

  • 我不知道这是否完全正确。一,JWT 中间件配置将 URL 带到权威机构(在我的例子中是 OpenID Connect 服务器)。此外,当我使用 access_token 访问我的 API 时,我确实在日志中看到了 OpenID Connect 服务器。所以,我确实认为 JWT 会在每个请求上验证 access_token 以查看它是否仍然有效。我可能仍然需要进行额外的调用来检索 id_token。
  • 所以看起来它正在访问 OpenID Connect 服务器以获取配置以检索签名密钥。
  • 啊,是的,但这是在启动时一次性下载的,不是每个请求/令牌。也可以在本地配置,不需要启动下载。
【解决方案2】:

您不要在 API 中使用 id_tokens - 它们是用于客户端的。

如果您想访问某些身份声明,请将它们包含在访问令牌中(通过在资源范围上配置 ScopeClaims),或者使用访问令牌联系 userinfo endoint,这反过来将返回身份声明.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-04
    • 2019-01-04
    • 2017-05-19
    • 2022-08-10
    • 2018-03-22
    • 2019-04-20
    • 2013-10-18
    • 1970-01-01
    相关资源
    最近更新 更多