oauth-2.0 Microsoft Graph - CompactToken分析失败,错误代码为:小行星8004920 A

bvuwiixz  于 2022-10-31  发布在  其他
关注(0)|答案(2)|浏览(267)

我正在使用此过程从Microsoft Graph请求访问令牌:
1.我请求访问以下作用域:
code
1.在Web浏览器中的同意屏幕后,发生重定向,代码被发送到在用户PC上运行的临时本地主机Web服务器。
1.接收到的code访问令牌刷新令牌进行交换
1.当我尝试在Microsoft Graph中查询使用者设定档时,我查询到:
掘地工具https://graph.microsoft.com/v1.0/me
GET请求的标头包含:
Authorization: Bearer token-here-all-in-one-line
但是我得到了结果JSON:
"InvalidAuthenticationToken"
"CompactToken parsing failed with error code: 8004920A"
我通常会假设该标记是不正确的,但是我在C应用程序和一个小型PHP应用程序中测试了相同的标记,并且我总是测试相同的错误。为了确保它不是错误的标记,我故意将其修改为错误的标记,然后我得到:
"CompactToken parsing failed with error code: 80049217"
在谷歌搜索后-8004920A意味着“令牌被拒绝”(我遇到的错误),80049217意味着“格式错误的令牌”,所以这与我故意插入虚假数据作为令牌是一致的。
因此,我会假设令牌是正确的,但Microsoft Graph拒绝它来查询已同意和批准的用户配置文件信息。
我已经在IMAP和SMTP访问上测试了令牌,它在那里工作-邮件被发送和接收,所以X1 M9 N1 X绝对是好的。
知道为什么Microsoft Graph拒绝我查询用户配置文件的尝试吗?
在AzureAD门户中注册应用程序时,我是否需要启用某些功能?
我是从C
或PHP做这件事的,所以我不认为这里的代码是相关的。

0tdrvxhp

0tdrvxhp1#

不确定是否是这种情况,但可能是。您不能将同一个令牌用于图形访问和另一个API访问(例如Outlook REST api)。这意味着,您不能混合不同名称空间的作用域。不确定为什么(“设计”?),您就是不能。您需要两个单独的令牌。
我在SharePoint REST api访问中遇到了类似的问题(所以可能不能100%确定Outlook也是如此,但可能是这样)。我使用了一个相对简单的解决方法-exchanging the token请求openid profile email offline_access,以获得服务器上https://outlook.office.com/...的令牌(使用on_behalf_of流)。
如果您真的不需要图作用域User.Read.All,您也可以尝试简单地从获取令牌的第一个授权调用中删除该作用域。

sg24os4d

sg24os4d2#

正如@Nikolay所说,Graph和Outlook的令牌不能混合使用,而且微软的设计很糟糕,例如IMAP.AccessAsUser.All不能用于IMAP访问--access_token只有在添加了https://outlook.office.com/前缀后才能正常工作。
但是-我发现了另一种方法,它只用于阅读用户的配置文件和电子邮件地址,这是通过解码id_token。正如微软文档所述-openidprofileemail范围将与Graph和Outlook一起工作。profile令牌可用于提取有关用户配置文件的信息。
如上所述:https://learn.microsoft.com/en-us/azure/active-directory/develop/id-tokens
id_token包含电子邮件地址、姓名等信息。
他们页面中的ID标记示例如下:

eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IjFMVE16YWtpaGlSbGFfOHoyQkVKVlhlV01xbyJ9.eyJ2ZXIiOiIyLjAiLCJpc3MiOiJodHRwczovL2xvZ2luLm1pY3Jvc29mdG9ubGluZS5jb20vOTEyMjA0MGQtNmM2Ny00YzViLWIxMTItMzZhMzA0YjY2ZGFkL3YyLjAiLCJzdWIiOiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFJa3pxRlZyU2FTYUZIeTc4MmJidGFRIiwiYXVkIjoiNmNiMDQwMTgtYTNmNS00NmE3LWI5OTUtOTQwYzc4ZjVhZWYzIiwiZXhwIjoxNTM2MzYxNDExLCJpYXQiOjE1MzYyNzQ3MTEsIm5iZiI6MTUzNjI3NDcxMSwibmFtZSI6IkFiZSBMaW5jb2xuIiwicHJlZmVycmVkX3VzZXJuYW1lIjoiQWJlTGlAbWljcm9zb2Z0LmNvbSIsIm9pZCI6IjAwMDAwMDAwLTAwMDAtMDAwMC02NmYzLTMzMzJlY2E3ZWE4MSIsInRpZCI6IjkxMjIwNDBkLTZjNjctNGM1Yi1iMTEyLTM2YTMwNGI2NmRhZCIsIm5vbmNlIjoiMTIzNTIzIiwiYWlvIjoiRGYyVVZYTDFpeCFsTUNXTVNPSkJjRmF0emNHZnZGR2hqS3Y4cTVnMHg3MzJkUjVNQjVCaXN2R1FPN1lXQnlqZDhpUURMcSFlR2JJRGFreXA1bW5PcmNkcUhlWVNubHRlcFFtUnA2QUlaOGpZIn0.1AFWW-Ck5nROwSlltm7GzZvDwUkqvhSQpm55TQsmVo9Y59cLhRXpvB8n-55HCr9Z6G_31_UbeUkoz612I2j_Sm9FFShSDDjoaLQr54CreGIJvjtmS3EkK9a7SJBbcpL1MpUtlfygow39tFjY7EVNW9plWUvRrTgVk7lYLprvfzw-CIqw3gHC-T7IK_m_xkr08INERBtaecwhTeN4chPC4W3jdmw_lIxzC48YoQ0dB1L9-ImX98Egypfrlbm0IBL5spFzL6JDZIRRJOu8vecJvj1mq-IUhGt0MacxX8jdxYLP-KUu2d9MbNKpCKJuZ7p8gwTL5B7NlUdh_dmSviPWrw

令牌由三部分组成-负载签名。它们由点分隔。这是标准的JWT(JSON Web令牌)。请参阅-https://en.wikipedia.org/wiki/JSON_Web_Token中的详细信息
在将它们分离并对每个进行base64解码之后(签名在解码之后不会给出任何有用的信息),结果为:

1)标题

{
    "typ": "JWT",
    "alg": "RS256",
    "kid": "1LTMzakihiRla_8z2BEJVXeWMqo"
}

2)有效负载

包含用户信息的负载。可以通过在Azure AD中注册应用程序时添加可选声明来提取其他信息-(令牌配置位于左侧菜单中)。

{
    "ver": "2.0",
    "iss": "https://login.microsoftonline.com/9122040d-6c67-4c5b-b112-36a304b66dad/v2.0",
    "sub": "AAAAAAAAAAAAAAAAAAAAAIkzqFVrSaSaFHy782bbtaQ",
    "aud": "6cb04018-a3f5-46a7-b995-940c78f5aef3",
    "exp": 1536361411,
    "iat": 1536274711,
    "nbf": 1536274711,
    "name": "Abe Lincoln",
    "preferred_username": "AbeLi@microsoft.com",
    "oid": "00000000-0000-0000-66f3-3332eca7ea81",
    "tid": "9122040d-6c67-4c5b-b112-36a304b66dad",
    "nonce": "123523",
    "aio": "Df2UVXL1ix!lMCWMSOJBcFatzcGfvFGhjKv8q5g0x732dR5MB5BisvGQO7YWByjd8iQDLq!eGbIDakyp5mnOrcdqHeYSnltepQmRp6AIZ8jY"
}

3)签名

仅用于验证目的。

1AFWW-Ck5nROwSlltm7GzZvDwUkqvhSQpm55TQsmVo9Y59cLhRXpvB8n-55HCr9Z6G_31_UbeUkoz612I2j_Sm9FFShSDDjoaLQr54CreGIJvjtmS3EkK9a7SJBbcpL1MpUtlfygow39tFjY7EVNW9plWUvRrTgVk7lYLprvfzw-CIqw3gHC-T7IK_m_xkr08INERBtaecwhTeN4chPC4W3jdmw_lIxzC48YoQ0dB1L9-ImX98Egypfrlbm0IBL5spFzL6JDZIRRJOu8vecJvj1mq-IUhGt0MacxX8jdxYLP-KUu2d9MbNKpCKJuZ7p8gwTL5B7NlUdh_dmSviPWrw

相关问题