Microsoft id_token声明中缺少OID声明

时间:2018-02-14 11:54:09

标签: oauth-2.0 azure-active-directory microsoft-graph

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

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

在我的用例中,我正在抓取tidoidisssub ...来自id_token声明的声明。

对于我的某个应用,对于某些用户,oid中缺少id_token声明。但我能够获得其他应用程序,但我发现创建应用程序没有任何区别。

可能导致oid声明丢失的原因是什么?

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

1 个答案:

答案 0 :(得分:0)

只有在请求范围oid时才会返回profile声明。

来自documentation

  

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

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