【问题标题】:What scope does "idp" belong to in IdentityServer4?IdentityServer4 中的“idp”属于什么范围?
【发布时间】:2022-01-24 18:59:39
【问题描述】:

我的 MVC 客户端的访问令牌包含一个“idp”声明,而我的简单服务器到服务器客户端的令牌没有。我没有在任何一个客户端上明确请求 idp,那么这个声明来自哪里?我认为它是“openid”的一部分,并且由于默认情况下它对 MVC 客户端可用,因此您不需要请求它,但我找不到任何确认它的文档/规范。顺便说一句,我无法将 openid 范围添加到我的 serer-to-server 客户端,因为当我这样做时出现“无效范围”错误。我在这里尝试做的是将“idp”声明也放入我的服务器到服务器客户端的令牌中,但不确定这是否可能。有人能指出我正确的方向吗?

【问题讨论】:

  • 嗨@Alexu,我是否正确理解您希望将 idp 声明包含在 access_token 中,而不是包含在 id_token 中?您使用哪种 grant_type 来发行令牌?
  • 没错。我同时使用身份验证代码流(在 MVC 中)和客户端凭据流(在服务器到服务器客户端中)。

标签: identityserver4 idp


【解决方案1】:

当您使用 client-credentials 流 进行服务器到服务器通信时,不涉及任何用户,因此 openid 范围没有任何用途。因为其核心目的是要求主题声明(用户 ID)。

idp 声明不属于任何范围,通常由 IdentityServer 添加。

为什么需要 idp 声明?您的 API 和客户端都信任共享的 IdentiyServer。

【讨论】:

  • 感谢您为我解释 idp。不知道为什么 IdentityServer 文档没有(或者我找不到)对此的任何解释。我只是想在 API 端获得这些信息用于审计目的,没有什么真正重要的,但我仍然想了解。我想我可以使用 iss ,如下 d_f 建议的那样。
  • @Alexu 如果您的目的是审计,使用idp(有时只有本地)。 iss 是颁发令牌的人,而 idp 是对用户进行身份验证的人。这就是区别,是的,OpenId Foundation 或 Identityserver afaik 都没有记录它
【解决方案2】:

idp Identityserver 中的声明代表外部身份提供者(例如 Google)。这就是为什么当您使用“service_credentials”流从本地 IdP 请求令牌时它没有任何意义的原因。如果您对有关令牌发行者的信息感兴趣,只需使用 iss 声明即可。如果您确定在每个令牌中都需要 idp(或任何其他自定义)声明,您可以使用我在 previous answer 中解释的自定义 ClaimsService。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-02
    • 1970-01-01
    • 2019-12-05
    • 1970-01-01
    • 2017-08-20
    • 1970-01-01
    相关资源
    最近更新 更多