将 OAuth2 代码交换为访问令牌时,Azure AD 返回非 JWT 令牌

Cri*_*rsi 5 azure access-token azure-active-directory microsoft-identity-platform personal-access-token

我的租户上有一个 Azure AD 应用程序,该应用程序配置为接受多个租户和个人帐户。

我按照此处说明的过程检索 AccessToken: https: //learn.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-auth-code-flow

当我从 Microsoft 网页收到应用程序中的“代码”时,我将其交换为调用端点“https://login.microsoftonline.com/common/oauth2/v2.0/token”的访问令牌。

无论登录的用户是工作帐户还是个人帐户,此处的行为都会有所不同。

通过工作帐户,我收到一个普通的 JWT 令牌,每个人都很高兴:我可以解码令牌并读取声明。

使用个人帐户,我收到另一个令牌,它不是 JWT 令牌,我不知道如何:

  1. 验证此令牌
  2. 从用户那里读取一些信息(具体来说,用户的电子邮件)

您能帮我了解如何执行这两个操作吗?

注意:我在这里看到了答案:Microsoft 作为个人帐户的 OAuth2 提供商不会颁发 JWT 访问令牌,但我的情况略有不同,因为我不想使用此令牌访问 MS Graph,我只需要检索电子邮件用户的。

谢谢!

盖尔西

Nis*_*isd 1

根据 OAuth 规范, OAuth2access_token中的 不需要是 JWT。
不过,Microsoft 支持OpenID Connect,它提供了id_token. 始终是id_tokenJWT。

要将您的 OAuth 请求“升级”为 OpenID Connect 请求,您只需添加范围openid(并可能email确保您收到电子邮件)。
然后当你把你的换成codeanaccess_token你也会得到一个id_token