Oauth 2.0 Microsoft id\u令牌声明中缺少OID声明

Oauth 2.0 Microsoft id\u令牌声明中缺少OID声明,oauth-2.0,azure-active-directory,microsoft-graph-api,Oauth 2.0,Azure Active Directory,Microsoft Graph Api,我正在使用中创建的两个应用程序。我正在使用的身份验证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-bd445b0e9

我正在使用中创建的两个应用程序。我正在使用的身份验证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
在我的用例中,我正在捕获
tid
oid
iss
。。。来自
id\u令牌的索赔
索赔

对于我的一个应用程序,对于某些用户,
id\u令牌中缺少
oid
声明。但我可以获得其他应用程序,我看不出在创建应用程序方面有任何区别

哪些原因可能导致
oid
声明丢失


我正在使用的作用域:
openid
email
user.read
只有在请求作用域
profile
时才会返回
oid
声明

从:

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


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

谢谢你,马克,这真的很有帮助。根据您的评论(强制用户重新同意),用户将在每次登录时看到此同意。我们应该如何控制它,我的意思是,是否有任何方法可以捕获用户是否同意这样的信息。我最近做了一次POC,我们询问了JWT令牌,看看是否有任何缺少的作用域。如果有,我们将它们重定向回
&prompt=approve
。由于他们刚刚登录,它会将他们直接放入同意页面。它确实在浏览器中引起了一些“重定向闪烁”,因为它在浏览器中来回跳转,但它仍然非常可悲。