В настоящее время серверная часть использует роли приложения для выполнения авторизации на различных конечных точках. У нас определены роли Пользователя и Администратора (мы используем Entra ID).
Для примера, который я создаю, я владею обеими службами (интеграция - и серверная служба).
Чтобы передать пользовательский контекст, я решил использовать поток от имени пользователя. В MS Learn есть некоторые подробности об этом и говорится следующее:
Чтобы служба среднего уровня могла отправлять аутентифицированные запросы к нижестоящей службе, ей необходимо защитить токен доступа с платформы идентификации Microsoft. Он использует только делегированные области, а не роли приложения. Роли остаются привязанными к участнику (пользователю), а не к приложению, работающему от имени пользователя. Это происходит для того, чтобы пользователь не получил разрешения на доступ к ресурсам, к которым у него не должно быть доступа.
Мне кажется, что роли приложения НЕ будут добавлены в токен, сгенерированный через поток OBO.
Однако я вижу всплывающее окно «Роли приложения» в токене.
Я использую следующий код:
Код: Выделить всё
private readonly IAuthorizationHeaderProvider _authorizationHeaderProvider;
public MyController(
IAuthorizationHeaderProvider authorizationHeaderProvider
)
{
this._authorizationHeaderProvider = authorizationHeaderProvider;
}
[HttpGet("WeatherForecastWithWeatherUserScope", Name = "GetWeatherForecastWithWeatherUserScope")]
public async Task GetWithUserScope()
{
var accessToken = await this._authorizationHeaderProvider.CreateAuthorizationHeaderForUserAsync(new[] { "api://2a3f9f34-0ee2-4fe7-8b37-e8233c51e620/WeatherUser" });
accessToken = accessToken.Replace("Bearer ", "");
var backendDetails = await GetBackendDetails(accessToken, "/WeatherForecast/WithUserScope/");
var integrationServiceDetails = new IntegrationServiceCallDetails(
HttpContext.Request.Headers.Authorization.First()!,
username);
return new ApiResponse(integrationServiceDetails, backendDetails);
}
Код: Выделить всё
{
// Removed some properties for brevity
"aud": "2a3f9f34-0ee2-4fe7-8b37-e8233c51e620",
"iss": "https://login.microsoftonline.com/15a8d236-9fcd-4d34-a6d9-f09eb524ed78/v2.0",
"name": "Jan_V",
"oid": "bf63f1b5-6c1f-489c-8d70-e47a82deaa69",
"preferred_username": "my@mail.com",
"roles": [
"Admin"
],
"scp": "user_impersonation WeatherAdmin WeatherUser",
"tid": "15a8d236-9fcd-4d34-a6d9-f09eb524ed78",
"ver": "2.0"
}
Я рад он там есть, потому что серверная служба использует его для авторизации, но я немного удивлен, увидев это. Я неправильно понял приведенную выше цитату или здесь происходит что-то еще?
Примечание. Управляемому удостоверению, назначенному интегрирующей службе, НЕ присвоены какие-либо роли.
Подробнее здесь: https://stackoverflow.com/questions/790 ... arer-token
Мобильная версия