AAD API Аутентификация на основе ролей - PullRequest
0 голосов
/ 14 октября 2019

Я успешно создал веб-API, который размещен в Azure и защищен с помощью аутентификации токена на носителе AAD, чтобы позволить клиентскому приложению (в настоящее время это просто приложение тестовой консоли, которое я создал) для доступа к нему.

Требование имеетВыяснилось, что пользователи конечного клиентского приложения (Sharepoint) разделятся на 2 отдельные группы - доступ к определенным областям API будет ограничен для одной из них.

Мой начальник заявил, что API должен обрабатыватьвсе проверки подлинности, поэтому мне нужно заменить текущее промежуточное программное обеспечение проверки подлинности на основе носителя Azure Active Directory и заменить его (я думаю) открытой аутентификацией с подключением по идентификатору.

У меня возникли некоторые трудности при создании решения, поскольку яне совсем понятно, как / если это будет работать. Я смотрел на предоставленный образец , но я не понимаю, как его использовать. В этом примере пользователи входят на сайт напрямую, но в моей настройке они не входят в API, они входят в Sharepoint, который затем вызывает - как API может использовать

[Authorize(Roles = "Admin")]

атрибут, когда он не имеет понятия «вошедший в систему пользователь».

1 Ответ

1 голос
/ 04 ноября 2019

Для вызова API вам потребуется предоставить токен доступа, который содержит разрешения.

Вот фрагмент кода для вашей справки.

// Because we signed-in already in the WebApp, the userObjectId is know
                string userObjectID = (User.FindFirst("http://schemas.microsoft.com/identity/claims/objectidentifier"))?.Value;

                // Using ADAL.Net, get a bearer token to access the TodoListService
                AuthenticationContext authContext = new AuthenticationContext(AzureAdOptions.Settings.Authority, new NaiveSessionCache(userObjectID, HttpContext.Session));
                ClientCredential credential = new ClientCredential(AzureAdOptions.Settings.ClientId, AzureAdOptions.Settings.ClientSecret);
                result = await authContext.AcquireTokenSilentAsync(AzureAdOptions.Settings.TodoListResourceId, credential, new UserIdentifier(userObjectID, UserIdentifierType.UniqueId));

                // Retrieve the user's To Do List.
                HttpClient client = new HttpClient();
                HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, AzureAdOptions.Settings.TodoListBaseAddress + "/api/todolist");
                request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken);
                HttpResponseMessage response = await client.SendAsync(request);

Ссылка:

Вызов веб-API в веб-приложении ASP.NET Core с помощью Azure AD

Как: добавить роли приложений в свое приложение и получить их в токене

Использование групп и использование ролей приложений для авторизации в Azure ADприложения

...