![]() |
傻傻的柚子 · 迪士尼如何买断所有人的童年? | 人人都是产品经理· 1 月前 · |
![]() |
温暖的芒果 · 使用Weka软件分别应用C4.5算法(J48 ...· 1 月前 · |
![]() |
温暖的硬盘 · 手机看电视剧-手机看电视剧促销价格、手机看电 ...· 3 月前 · |
![]() |
考研的投影仪 · 签约服务费筹资现状及对家庭医生的薪酬补偿作用分析· 6 月前 · |
我正在使用以下过程从Microsoft Graph请求访问令牌:
User.Read.All openid profile email offline_access https://outlook.office.com/IMAP.AccessAsUser.All https://outlook.office.com/POP.AccessAsUser.All https://outlook.office.com/SMTP.Send
code
。
获取
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"
在googling之后-
8004920A
的意思是“令牌拒绝”(我有问题的错误),而
80049217
的意思是“格式错误的令牌”,所以这与我故意插入虚假数据作为令牌是一致的。
因此,我假设令牌是正确的,但是Microsoft Graph拒绝它来查询同意和批准的用户配置文件信息。
我在IMAP和SMTP访问上测试了令牌,并在那里工作-邮件是发送和接收的,所以
access_token
绝对是好的。
想知道为什么微软图形拒绝我查询用户配置文件的尝试吗?
在AzureAD门户中注册应用程序时,是否需要启用某些功能?
我是从C++或PHP中这样做的,所以我认为这里的代码与此无关。
发布于 2022-10-25 15:57:24
正如@Nikolay所指出的,的令牌不能混合。微软的设计也很糟糕,例如,
IMAP.AccessAsUser.All
无法用于IMAP访问--除非添加了
https://outlook.office.com/
前缀,否则access_token就无法工作。
但是-我找到了
的另一种方式,
,它只用于读取用户的个人资料和电子邮件地址,这是通过解码
id_token
。正如微软文档声明的那样,
openid
、
profile
和
email
作用域将同时适用于图形和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
令牌由3部分组成-- 头 、 有效负载 和 签名 。它们被一个点隔开。这是一个标准JWT (JSON ),请参阅- 令牌 中的详细信息
将它们分开后,然后对每个base64进行解码(签名在解码后不会给出任何有用的信息),结果如下:
1)头
{
"typ": "JWT",
"alg": "RS256",
"kid": "1LTMzakihiRla_8z2BEJVXeWMqo"
}
2)有效载荷
包含用户信息的有效负载。在Azure中注册应用程序时,可以通过添加 可选声明 来提取其他信息-(左侧菜单中的 令牌配置 )。
{
"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",
![]() |
傻傻的柚子 · 迪士尼如何买断所有人的童年? | 人人都是产品经理 1 月前 |
![]() |
温暖的芒果 · 使用Weka软件分别应用C4.5算法(J48)建立决策树和朴素贝叶斯模型,用于预测某个学生是否决定去打篮球(需将csv文件转换成arff文件),并写出预测结果。-PlayBasketball.*.cs 1 月前 |
![]() |
考研的投影仪 · 签约服务费筹资现状及对家庭医生的薪酬补偿作用分析 6 月前 |