尝试获取联系人时microsoft graph nopermissionsinaccesstoken

62o28rlo  于 2021-07-12  发布在  Java
关注(0)|答案(1)|浏览(443)

我要做的是创建一个简单的microsoftazure应用程序,用microsoftgraph获取所有联系人。我想我知道它应该如何工作,但鉴于我未能真正使它工作,我需要一些帮助。
我设法获取了与他们文档站点上记录的相同的用户数据,但当为联系人执行类似的步骤时,我不断地获取这些数据 NoPermissionsInAccessToken .
我的一般工作流程是使用以下方法检索令牌:

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

用这个我获得了授权码,刷新令牌等等。现在我把那个令牌插入 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权限,并添加了委派联系人。记录为必需的readwrite权限。
你知道我能做些什么让这件事成功吗?

2q5ifsrm

2q5ifsrm1#

当你打电话的时候 https://login.microsoftonline.com/{tenant}/oauth2/v2.0/authorize 它返回的是授权码,而不是访问令牌。您需要通过将身份验证代码交换为访问令牌 https://login.microsoftonline.com/{tenant}/oauth2/v2.0/token .
您可以在文档中找到检索令牌的分步说明。
您的应用程序使用在上一步中收到的授权码通过发送 POST 请求 /token 终结点。

相关问题