MS Graph Api 通话中断 "The token contains no permissions, or permissions can not be understood."
MS Graph Api call drops "The token contains no permissions, or permissions can not be understood."
使用以下代码删除异常并显示以下消息:“NoPermissionsInAccessToken 令牌不包含任何权限,或者无法理解权限。”
var clientId = "<GUID-goes-here>";
var tenantId = "<GUID-comes-here>";
var clientSecret = "<secret-goes-here>";
var scopes = new[] {"https://graph.microsoft.com/.default"};
var confidentialClientApplication = ConfidentialClientApplicationBuilder
.Create(clientId)
.WithClientSecret(clientSecret)
.WithTenantId(tenantId)
.Build();
var authResult = confidentialClientApplication.AcquireTokenForClient(scopes).ExecuteAsync().Result;
string token = authResult.AccessToken;
var authenticationProvider = new DelegateAuthenticationProvider(async (request) => {
request.Headers.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", token);
await Task.FromResult<object>(null);
});
var graphClient = new GraphServiceClient(authenticationProvider);
var queryOptions1 = new List<QueryOption>()
{
new QueryOption("startDateTime", "2020-05-16" ),
new QueryOption("endDateTime", "2020-05-21"),
};
var calendar = graphClient.Me.Calendar.CalendarView
.Request(queryOptions1)
.OrderBy("start/dateTime")
.Top(3)
.GetAsync()
.Result;
// DROPS
// ServiceException: Code: NoPermissionsInAccessToken
// Message: The token contains no permissions, or permissions can not be understood.
应用已注册,Calendars.Read,Calendars.Read。已授予共享权限。令牌值似乎不错 - 大约 1400 个字符长。
有人知道这里发生了什么吗?欢迎任何建议!谢谢
此处您使用的是客户端凭据流程,您需要为此指定应用程序权限,以便它们可以显示在令牌中。
您可以简单地通过将令牌放入 https://jwt.ms 来解析令牌,然后查看您是否拥有令牌中的权限。
还有一件事你在这里想念的是你在代码中使用 me
这意味着这里应该有一个用户如何登录但是没有用户因为你正在使用应用程序上下文流。所以只需添加应用程序权限,然后调用 API,如下所示。
var calendarView = await graphClient.Users["userid"].CalendarView
.Request( queryOptions )
.GetAsync();
使用以下代码删除异常并显示以下消息:“NoPermissionsInAccessToken 令牌不包含任何权限,或者无法理解权限。”
var clientId = "<GUID-goes-here>";
var tenantId = "<GUID-comes-here>";
var clientSecret = "<secret-goes-here>";
var scopes = new[] {"https://graph.microsoft.com/.default"};
var confidentialClientApplication = ConfidentialClientApplicationBuilder
.Create(clientId)
.WithClientSecret(clientSecret)
.WithTenantId(tenantId)
.Build();
var authResult = confidentialClientApplication.AcquireTokenForClient(scopes).ExecuteAsync().Result;
string token = authResult.AccessToken;
var authenticationProvider = new DelegateAuthenticationProvider(async (request) => {
request.Headers.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", token);
await Task.FromResult<object>(null);
});
var graphClient = new GraphServiceClient(authenticationProvider);
var queryOptions1 = new List<QueryOption>()
{
new QueryOption("startDateTime", "2020-05-16" ),
new QueryOption("endDateTime", "2020-05-21"),
};
var calendar = graphClient.Me.Calendar.CalendarView
.Request(queryOptions1)
.OrderBy("start/dateTime")
.Top(3)
.GetAsync()
.Result;
// DROPS
// ServiceException: Code: NoPermissionsInAccessToken
// Message: The token contains no permissions, or permissions can not be understood.
应用已注册,Calendars.Read,Calendars.Read。已授予共享权限。令牌值似乎不错 - 大约 1400 个字符长。
有人知道这里发生了什么吗?欢迎任何建议!谢谢
此处您使用的是客户端凭据流程,您需要为此指定应用程序权限,以便它们可以显示在令牌中。
您可以简单地通过将令牌放入 https://jwt.ms 来解析令牌,然后查看您是否拥有令牌中的权限。
还有一件事你在这里想念的是你在代码中使用 me
这意味着这里应该有一个用户如何登录但是没有用户因为你正在使用应用程序上下文流。所以只需添加应用程序权限,然后调用 API,如下所示。
var calendarView = await graphClient.Users["userid"].CalendarView
.Request( queryOptions )
.GetAsync();