gpt4 book ai didi

java - 尝试获取联系人时 Microsoft Graph NoPermissionsInAccessToken

转载 作者:行者123 更新时间:2023-12-01 18:27:24 25 4
gpt4 key购买 nike

我想要做的是创建一个简单的 Microsoft Azure 应用程序,用于使用 Microsoft Graph 获取所有联系人。我想我明白它应该如何工作,但由于我未能真正使其工作,我需要一些帮助。

我设法获取与其文档网站上记录的相同的用户数据,但是当对联系人执行类似的步骤时,我不断收到NoPermissionsInAccessToken

我的一般工作流程是使用以下方法检索 token :

https://login.microsoftonline.com/{tenant}/oauth2/v2.0/authorize
?client_id={clientId}
&response_type=code
&redirect_uri=http%3A%2F%2Flocalhost%3A8080%2Fdetail
&response_mode=query
&scope=openid+offline_access+profile+user.read+Mail.ReadWrite+Contacts.ReadWrite

这样我就获得了授权码、刷新 token 等。现在,我将该 token 插入到 AuthorizationCodeProvider 中,与示例中提供的相同:

AuthorizationCodeProvider authProvider = new AuthorizationCodeProvider(
clientId,
Arrays.asList("openid", "offline_access", "profile", "user.read", "Mail.ReadWrite", "Contacts.ReadWrite"),
code,
"http://localhost:8080/detail",
NationalCloud.Global,
tenant,
secret);

IGraphServiceClient graphClient = GraphServiceClient
.builder()
.authenticationProvider(authProvider)
.buildClient();

IContactCollectionPage contacts = graphClient.me().contacts()
.buildRequest()
.get();

但是当应用程序尝试从最后一个函数执行 get() 时,它会抛出以下错误:

401 : Unauthorized
Strict-Transport-Security : max-age=31536000
Cache-Control : private
x-ms-ags-diagnostic : {"ServerInfo":{"DataCenter":"West Europe","Slice":"SliceC","Ring":"5","ScaleUnit":"000","RoleInstance":"AGSFE_IN_53"}}
client-request-id : e393d9d1-1eae-44b2-9956-2b97c0105b42
request-id : fecedee8-8b69-44b1-b300-5c9f71d3c427
Content-Length : 284
Date : Thu, 13 Feb 2020 13:12:27 GMT
Content-Type : application/json

{
"error": {
"code": "NoPermissionsInAccessToken",
"message": "The token contains no permissions, or permissions can not be understood.",
"innerError": {
"request-id": "fecedee8-8b69-44b1-b300-5c9f71d3c427",
"date": "2020-02-13T13:12:27"
}
}
}

据我所知,我已通过 portal.azure.com 向该应用程序提供了所有必要的资助。转到应用程序注册、我的应用程序、API 权限,并添加了记录为必要的委派 Contacts.ReadWrite 权限。

知道我能做些什么来让这件事发挥作用吗?

最佳答案

当您调用https://login.microsoftonline.com/{tenant}/oauth2/v2.0/authorize时,它返回的是授权代码,而不是访问 token 。您需要通过 https://login.microsoftonline.com/{tenant}/oauth2/v2.0/token 将该身份验证代码交换为访问 token 。

您可以在 documentation 中找到检索 token 的分步说明。 .

Your app uses the authorization code received in the previous step to request an access token by sending a POST request to the /token endpoint.

关于java - 尝试获取联系人时 Microsoft Graph NoPermissionsInAccessToken,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60210812/

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