Я использую IdentityServer4 для защиты моего основного приложения .net. Я хотел бы использовать авторизация на основе политик
Вот пример одной политики, которую я сделал
options.AddPolicy("api.order.write", builder =>
builder.RequireScope(
"app.write", "app.read", "app.order.read"));
Я бы хотел предоставить разные возможности для разных ролей. Например, пользователь с ролью Viewer будет иметь только область app.read. Поэтому во время запроса на вход в систему веб-клиент отправляет запрос на идентификацию со списком всех областей, которые у нас есть в приложении, но затем он должен обработать и вернуть токен с областями на основе ролей. Я думаю, что могу реализовать пользовательский IProfileService
и проверить там роли пользователей и добавить претензии с областями действия, но, возможно, уже есть решение для этого. У вас есть идеи?
UPD: я создал пользовательский IProfileService
, и я проверяю роль пользователя и затем устанавливаю определенный список областей, таких как
//removing existing scopes if such exist already
context.IssuedClaims = context.IssuedClaims.Where(x => x.Type != "scope").ToList();
foreach (var scope in viewerScopes)
{
context.IssuedClaims.Add(new Claim("scope", scope));
}
но я все еще получаю все области (не для каждой роли), тот же список областей, который веб-клиент отправляет во время запроса на вход.