Microsoft id_token 声明中缺少 OID 声明

Ven*_*ruu 2 oauth-2.0 azure-active-directory microsoft-graph-api

我正在使用在apps.dev.microsoft.com中创建的几个应用程序。我正在使用的身份验证 URL 是

https: //login.microsoftonline.com/common/oauth2/v2.0/authorize?
 client_id={client_id}
 &redirect_uri={redirect_uri}
 &response_type=code id_token
 &state=state
 &nonce=c7a966a3-d63d-4348-8ab8-bd445b0e9bb1
 &response_mode=form_post
 &scope=openid email profile https://graph.microsoft.com/user.readBasic.all
Run Code Online (Sandbox Code Playgroud)

在我的用例中,我正在从声明中捕获tid, oid, iss, sub... 声明id_token

对于我的一个应用程序,某些用户oidid_token. 但我可以获取其他应用程序,并且我认为创建应用程序没有任何区别。

哪些原因可能导致oid索赔丢失?

我正在使用的范围:openid email user.read

Mar*_*eur 5

oid仅当范围profile被要求时,索赔才会被退回。

文档中:

由于oid允许多个应用程序关联用户,因此profile需要范围才能接收此声明。

对于未收到oid声明的用户,请检查令牌以确保profile范围存在。如果它不存在(并且您已确认已请求),那么您可以通过添加到&prompt=consent身份验证 URI 的末尾来强制刷新该令牌的范围。这将迫使用户重新同意范围并确保您没有获得缓存的令牌。