Я использую ASP. NET Core Web API 3, поток кода авторизации для AzureAD v2 + PKCE.
Когда я получаю acess_token в моем контроллере и затем пытаюсь получить фотографию пользователя через DelegateAuthenticationProvider , Я получаю сообщение NoPermissionsInAccessToken: токен не содержит разрешений, или разрешения не могут быть поняты.
Кто-нибудь знает, как можно исправить?
Когда я декодирую access_token - существуют области действия .
Вот мой код.
var token = await HttpContext.GetTokenAsync("access_token");
var delegateAuthProvider = new DelegateAuthenticationProvider(
(requestMessage) => {
requestMessage.Headers.Authorization = new AuthenticationHeaderValue("bearer",token);
return Task.FromResult(0);});
var graphClient = new GraphServiceClient(graphAPIEndpoint, delegateAuthProvider);
var content = await graphClient .Me.Photo.Content.Request().GetAsync();
Редактировать - Код авторизации:
services.Configure<CookiePolicyOptions>(options =>
{
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
.AddAzureAD(options => configuration.Bind("AzureAd", options));
services.Configure<OpenIdConnectOptions>(AzureADDefaults.OpenIdScheme, options =>
{
options.Authority = options.Authority + "/v2.0/";
options.ResponseType = OpenIdConnectResponseType.Code;
options.ClientSecret = "secret";
options.UsePkce = true;
options.AuthenticationMethod = OpenIdConnectRedirectBehavior.FormPost;
options.Scope.Add("offline_access");
options.Scope.Add("openid");
options.Scope.Add("email");
options.Scope.Add("profile");
options.Scope.Add("user.read");
var graphAPIScopeAll = "https://graph.microsoft.com/User.Read";
options.Scope.Add(graphAPIScopeAll);
options.SaveTokens = true;
});
Заранее благодарим за помощь.