.NET Добавление групп пользователей в существующую заявку - PullRequest
0 голосов
/ 17 июня 2019

У меня проблемы с аутентификацией AD, я регистрирую пользователя с помощью угловой библиотеки MSAL и отправляю токен носителя на сервер.

Backend отлично справляется с этим и сохраняет заявку пользователя. Однако происходит то, что группы, в которые входит пользователь в AD, не включены в это утверждение. Это связано с тем, что в AD слишком много групп, а Azure просто возвращает «hasgroups: true». Это нормально, и я просто получаю группы пользователей, используя Graph API.

Только теперь мне интересно, как мне добавить найденные группы в существующую заявку пользователя? Моя конечная цель состоит в том, чтобы я мог авторизовать определенные группы для контроллеров, используя следующий код:

[Authorize(Roles = "EmployeeOnly")]

1 Ответ

0 голосов
/ 17 июня 2019

Чтобы добавить Claim к ClaimsIdentity, вы можете использовать ClaimsIdentity.AddClaim(Claim) Method, используя ClaimType 'Role'

Код может выглядеть примерно так:

var claimsIdentity = context.Authentication.User.Identity as ClaimsIdentity;

if (claimsIdentity == null || !claimsIdentity.IsAuthenticated) 
{
    return;
}

claimsIdentity.AddClaim(new Claim(ClaimTypes.Role, "YourRoleHere"));

РЕДАКТИРОВАТЬ:
Конечно, это только разовое действие, так как вы необновление личности на внешнем интерфейсе.Таким образом, следующий вызов не будет иметь обновленную личность.И я ожидаю, что вы не хотите вызывать Graph API для каждого входящего запроса . Верно?

Несколько вариантов, которые я могу придумать:

  • Подумайте о том, чтобы где-то кэшировать роли пользователей и получать их оттуда для каждого запроса во время этого сеанса.Например, используя ActionFilter .
  • В зависимости от типа используемого вами интерфейса, посмотрите, можете ли вы обновить токен там.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...