Почему я получаю ошибку AADSTS65001 при использовании области user.readwrite.all, когда у меня есть согласие администратора

Я создаю веб-приложение на C# с Azure ad. Приложение позволит администраторам рекламы Azure управлять пользователями арендатора. Для этого мне нужны специальные гранты от арендатора пользователя, который входит в систему.

Я получил код, работающий для большинства областей, таких как 'user.readwrite' и 'directory.readwrite.all'. Но когда я добавляю область "User.ReadWrite.All", я получаю следующую ошибку:

AADSTS65001: Пользователь или администратор не дал согласие на использование приложения с идентификатором "Идентификатор клиентского приложения ". Отправьте интерактивный запрос авторизации для этого пользователя и ресурса.

Данный пользователь является владельцем приложения с сайта https://apps.dev.microsoft.com/ В этом приложении я добавил области действия: Mail.Send, User.Read, User.ReadWrite, Directory.ReadWrite.All и User..ReadWrite.All. Для двух последних областей необходимо согласие администратора.

Но, чтобы заставить согласие администратора, даже если пользователь является владельцем. Я использовал этот URL-адрес, чтобы дать моему администратору и всем пользователям, имеющим право на получение поддержки, приложение с указанными выше областями действия.

login.microsoftonline.com/common/adminconsent?client_id= Идентификатор и состояние клиентского приложения & adminconsentstate & redirect_uri = uri моего локального веб-приложения

В веб-приложении я подключаюсь к Azure ad с конечной точкой Microsoft v2.0.

login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id= Идентификатор клиентского приложения &response_mode=form_post&response_type=code+id_token&scope=openid+ электронная почта + профиль +offline_access&state=OpenIdConnect.AuthenticationProperties%3d...&prompt=select_account&redirect Url & post_logout_redirect_uri = URL перенаправления выхода

Я использую следующий код, чтобы получить Accesstoken.

string userObjectId = "User Object Id Guid";
HttpContextBase baseContext = context.OwinContext.Environment["System.Web.HttpContextBase"] as HttpContextBase;
var tokenCache = new SessionTokenCacheMSAL(userObjectId,baseContext);

ConfidentialClientApplication cca = new ConfidentialClientApplication(_applicationSettings.ClientId,redirectUri.ToString(),new ClientCredential(_applicationSettings.AppKey), tokenCache);

var scopes = new List<string>();
scopes.Add("User.Read");
scopes.Add("user.readbasic.all");
scopes.Add("User.ReadWrite.All");
scopes.Add("Directory.ReadWrite.All");

var runTaskAcquireToken = Task.Run(async () => await cca.AcquireTokenByAuthorizationCodeAsync(scopes.ToArray(), context.Code));
runTaskAcquireToken.Wait();
var result = runtask.Result;

При запросе Accesstoken и области действия "User.ReadWrite.All" я получаю ошибку "AADSTS65001" выше. Когда я удаляю область "User.ReadWrite.All", я могу просматривать пользователей, получать DirectoryRoles и Organizations/tennants.

Странно то, что область действия "Directory.ReadWrite.All" также требует того же разрешения администратора, что и "User.ReadWrite.All", согласно Microsoft.

источник:

http://graph.microsoft.io/en-us/docs/authorization/permission_scopes

Любая помощь в решении моих вопросов будет очень признательна.

Благодарю.

0 ответов

Другие вопросы по тегам