我正在处理在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
在我的用例中,我正在抓取tid
,oid
,iss
,sub
...来自id_token
声明的声明。
对于我的某个应用,对于某些用户,oid
中缺少id_token
声明。但我能够获得其他应用程序,但我发现创建应用程序没有任何区别。
可能导致oid
声明丢失的原因是什么?
我正在使用的范围:openid
email
user.read
答案 0 :(得分:0)
只有在请求范围oid
时才会返回profile
声明。
由于
oid
允许多个应用关联用户,因此需要profile
范围才能收到此声明。
对于未收到oid
声明的用户,请检查令牌以确保profile
范围存在。如果它不存在(并且您已确认它已被请求),则可以通过将&prompt=consent
添加到身份验证URI的末尾来强制刷新该令牌的范围。这将强制用户重新同意范围并确保您没有获得缓存的令牌。