获取 ms 图形令牌失败

Posted

技术标签:

【中文标题】获取 ms 图形令牌失败【英文标题】:Failed to acquire ms graph token 【发布时间】:2021-11-03 21:05:59 【问题描述】:

在没有用户的情况下尝试获取 ms 图形访问令牌时遇到问题。

我使用快速入门提供的设置从代码登录

    IConfidentialClientApplication app;
    app = ConfidentialClientApplicationBuilder.Create("<application client ID>")
                                              .WithClientSecret("<application secret>")
                                              .WithAuthority(new Uri("https://login.microsoftonline.com/<tenant ID>"))
                                              .Build();
    
    var result = await app.AcquireTokenForClient(new List<string>()  "https://graph.microsoft.com/.default" )
                      .ExecuteAsync();

    HttpClient sender = new HttpClient();
    sender.DefaultRequestHeaders.Add(
              "Authorization",
               String.Format("Bearer " + result.AccessToken)
               );
    HttpResponseMessage meResult = await sender.GetAsync("https://graph.microsoft.com/v1.0/users/<email adress>/photo/$value");
    string context =await  meResult.Content.ReadAsStringAsync();
    Console.WriteLine("WAAA");

基本上问题是我可以在创建 HTTP 客户端之前获取一个令牌,但是当我想用它来获取用户照片时,响应是 401 :( 带有消息:401 - Unauthorized: Access is denied due to invalid credentials Azure 应用程序已授予它们这些权限。

谁能发现我错过了什么?

【问题讨论】:

您在 Azure 门户上拥有哪些权限?你应该有Application User.Read.All, User.ReadWrite.All权限,后记需要添加Grant admin consent 我只想阅读用户的头像。因此我很确定我不需要读写。据我在文档中阅读,图片是基本信息,只需要授予基本版本。 我知道了,看到答案并设置User.Read.All应用权限 您应该将收到的令牌粘贴到jwt.io 并检查它是否确实包含所需的声明。 【参考方案1】:

您在 Azure 门户上拥有哪些权限?我猜你现在只有Delegated permission

您应该有User.Read.All Application permission 并且需要添加Grant admin同意。应该是这样的:

您可以在我们的offical document获取详细信息

Permission:

一旦你设置了权限,你可以得到下面的输出:

Output:

Postman Test Result:

Azure profile Pciture:

注意:您的上下文需要Application permission,但您似乎只有Delegated Permission

希望这会有所帮助。

【讨论】:

以上是关于获取 ms 图形令牌失败的主要内容,如果未能解决你的问题,请参考以下文章

获取 OpenID Connect / OAuth 访问令牌以调用 MS Dynamics

获取令牌失败

Twitter:获取请求令牌失败

从 keycloak 获取访问令牌的 POST 请求失败

InternalOAuthError:获取访问令牌失败

获取 ASP.NET MVC 5 Web API 令牌有时会失败