gpt4 book ai didi

azure-active-directory - Microsoft Graph读取日历或发送邮件时返回 "NoPermissionsInAccessToken"如何解决

转载 作者:行者123 更新时间:2023-12-05 06:23:01 25 4
gpt4 key购买 nike

在我们的部门内,我们有一个经典的 ASP 网站,该网站一直在使用我们公司的 Google 帐户进行身份验证并将事件插入到我们的 Google 日历中。该组织刚刚从 Google 切换到 Office 365,我正尝试将代码切换为使用 Outlook,但没有成功。

我可以使用访问 token 获取 https://graph.microsoft.com/v1.0/me 并查看基本配置文件,但是如果我尝试读取日历事件或发送电子邮件我看到消息:

"error": {
"code": "NoPermissionsInAccessToken",
"message": "The token contains no permissions, or permissions can not be understood."

我使用个人 Microsoft 帐户创建了一个 Azure 帐户并添加了一个应用程序。我将我的同事和公司帐户添加为 guest 用户。我设置了所需的权限并获得了管理员同意:

Application Permissions

Enterprise Application Permissions

然后我按照 this page 上的步骤操作.

我首先访问https://login.microsoftonline.com/{tenant id}/oauth2/v2.0/authorize,包括以下查询项:

client_id={client id}
response_type=code
redirect_uri={our URL}
response_mode=query
scope=https%3A%2F%2Fgraph.microsoft.com%2F.default
state={number}

这会返回一个“代码”,我将其发送到 https://login.microsoftonline.com/{tenant id}/oauth2/v2.0/token,包括:

grant_type=authorization_code
client_secret={client secret}
client_id={client id}
scope=https%3A%2F%2Fgraph.microsoft.com%2F.default
state={same number as above}
redirect_uri={same URL as above}
code={code returned from /authorize}

这将返回 ID、访问和刷新 token 。如果我使用 https://jwt.ms/ 解码访问 token , 它似乎包含适当的受众和范围:

"aud": "https://graph.microsoft.com"
"scp": "Calendars.ReadWrite email Mail.Send openid profile User.Read"

...虽然我注意到没有“角色”条目,但我在某些文档中看到了这一点。这是个问题吗?

然后我使用以下 header 将访问 token 发送到 https://graph.microsoft.com/v1.0/me:

"Authorization", "Bearer {access token}"
"Host", "graph.microsoft.com"
"Content-Type", "application/json"
"Prefer", "outlook.timezone Europe/London"

这将返回我的电子邮件地址等,但是如果我将 URL 更改为其他任何内容,例如 /me/photo/$value/me/calendar/事件,或尝试发送一封电子邮件,我被告知 token 中没有权限。

我看到还有其他类似的问题,但它们主要针对 client_credentials 流程(我不确定这有什么区别),而且没有一个答案能帮助我解决我的问题.

有人可以让我知道我是否明显遗漏了什么 - 或者我以错误的方式在客户端访问 Graph 数据吗?在 Google 上看起来很简单,但我发现 Microsoft 文档和示例不够详细。

最佳答案

添加 guest 用户是没有意义的。

您所做的是使用您的个人 Microsoft 帐户获得 Azure AD 的管理员同意。

您实际需要做的是获得目标 Azure AD/O365 租户的管理员许可。

构建同意链接如下:

https://login.windows.net/{tenant ID of the target Azure AD}/oauth2/authorize?response_type=id_token&client_id={client ID}&redirect_uri={reply url}&response_mode=form_post&nonce=a4014117-28aa-47ec-abfb-f377be1d3cf5&resource=https://graph.microsoft.com&prompt=admin_consent

在浏览器中访问它并使用目标 Azure AD 的管理员帐户登录。

另一个问题是您正在使用 Get access on behalf of a user .因此,您必须在 Azure AD 应用中分配委派权限而不是应用程序权限。

enter image description here

关于azure-active-directory - Microsoft Graph读取日历或发送邮件时返回 "NoPermissionsInAccessToken"如何解决,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58719480/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com