【问题标题】:OID claim is missing in Microsoft id_token claimsMicrosoft id_token 声明中缺少 OID 声明
【发布时间】:2018-02-14 23:35:59
【问题描述】:

我正在使用在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

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

对于我的一个应用程序,对于某些用户,oid 声明在 id_token 中丢失。但是我能够获得其他应用程序,并且我认为创建应用程序没有任何区别。

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

我正在使用的范围:openidemailuser.read

【问题讨论】:

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


    【解决方案1】:

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

    来自documentation

    因为oid 允许多个应用关联用户,所以需要profile 范围才能接收此声明。

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

    【讨论】:

    • 谢谢你,马克,它真的很有帮助。根据您的评论(强制用户重新同意),用户将在每次登录时看到此同意。我们应该如何控制它,我的意思是任何方式来捕获用户是否同意等信息。
    • 我最近做了一个 POC,我们在其中询问 JWT 令牌以查看是否有任何缺失的范围。如果有,我们会使用&prompt=consent 将它们重定向回来。由于他们刚刚登录,因此将他们直接放入“同意”页面。它确实在浏览器中引起了一些“重定向闪烁”,因为它反弹了,但它仍然是相当可容忍的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-04
    • 2013-07-11
    • 2013-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多