【问题标题】:Azure AD OIDC ID Token for Service Principal服务主体的 Azure AD OIDC ID 令牌
【发布时间】:2018-03-03 16:28:27
【问题描述】:

是否可以为 Azure AD 服务主体获取 OAuth2 id_token?

我可以通过 /token 端点的 client_credentials 流,但这只会产生 access_token。有没有办法让我也获得一个 id_token,就像我为一个交互式用户做的那样?

【问题讨论】:

  • 如何通过代码获取access_token?
  • 只需使用 client_credentials 流的参数对 /token 端点发出一个简单的 HTTP POST 请求......但这只会产生一个 access_token......我想要/需要一个 id_token(也)
  • @Jeff,您能否详细说明此 ID 令牌将识别哪个用户?在所有指定的 OpenID Connect 流程中,ID Token 用于标识 用户,因此仅与涉及用户的流程相关。

标签: oauth-2.0 azure-active-directory openid-connect


【解决方案1】:

没有。您需要完成一个涉及服务主体和用户的流程。

客户端凭据流仅涉及服务主体,因此访问令牌仅包含其信息。只有在有用户上下文时才会给出 Id 标记。

因此,对于 Id 令牌,您需要使用以下流程之一:

  • 授权码
  • 隐式
  • 设备代码
  • 代表(API 调用另一个 API)
  • 资源所有者密码(虽然我不推荐这个)

归根结底,您为什么需要 Id 令牌?访问令牌已包含调用应用程序的身份。它应该包含一个 appid 声明,这是应用的客户端 ID。

【讨论】:

  • 我需要一个 id 令牌,因为我使用 AAD 作为外部 IdP 设置了另一个服务 (AWS)(通过 OIDC 而不是 SAML)。为了让我在此设置中以编程方式登录 AWS,我需要为其提供由 AAD 颁发的 id_token,而不是 access_token。考虑以下示例 - 它适用于 Okta 和 AWS,但想法是相同的......我将如何仅使用服务主体来完成此操作?
  • 通过这样的设置,IdP 应该使用 OpenID Connect 协议将用户重定向到外部 IdP(此处为 AAD)登录。然后您的 IdP 将在响应中收到 id 令牌。
  • 对,但在这种情况下,外部 idp 是天蓝色广告。这是我链接中的示例,但不是 Okta,而是 Azure AD。因此,我需要一个 id_token 用于 azure ad 中的服务主体,或者你能建议一个替代方案吗?这是一个非交互场景
  • 在非交互式场景中,您唯一的选择是使用刷新令牌或在 ROPC 流中使用用户名和密码。这两种情况都会为您提供用户的 id 令牌,但不建议使用 ROPC,并且在某些情况下也不起作用。无法单独获取服务主体的 id 令牌。
  • 在这种情况下刷新令牌如何工作,我如何从 AAD 获得一个?
猜你喜欢
  • 2022-11-02
  • 2022-11-10
  • 2021-11-09
  • 2021-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-12
  • 1970-01-01
相关资源
最近更新 更多