Роли приложения находятся в моем токене носителя, созданном от имени потока.C#

Место общения программистов C#
Ответить
Anonymous
 Роли приложения находятся в моем токене носителя, созданном от имени потока.

Сообщение Anonymous »

Я работаю над реализацией потока от имени пользователя в одной из моих служб, которая действует как промежуточное программное обеспечение/серверная служба для внешнего интерфейса и должна вызывать серверный API в контексте пользователя. p>
В настоящее время серверная часть использует роли приложения для выполнения авторизации на различных конечных точках. У нас определены роли Пользователя и Администратора (мы используем 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);
}
И токен accessToken имеет следующее содержимое:

Код: Выделить всё

{
// 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»