获取 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 图形令牌失败的主要内容,如果未能解决你的问题,请参考以下文章