Я использую IdentityServer3 для выдачи токенов и попытки использовать Thinktecture.IdentityModel.Owin.ResourceAuthorization.WebApi для авторизации доступа к ресурсам веб-api.ResourceAuthorize («Read», «UsersList») не работает, ResourceAuthorizationManager
Я использую приведенный ниже код для авторизации действия контроллера.
[ResourceAuthorize("Read","UsersList")]
ResourceAuthorizationManager выглядит, как показано ниже.
public class MyAuthorizationManager : ResourceAuthorizationManager
{
/// <summary>
/// Verify Access Rights
/// </summary>
/// <param name="context"></param>
/// <returns></returns>
public override Task<bool> CheckAccessAsync(ResourceAuthorizationContext context)
{
switch (context.Resource.First().Value)
{
case "UsersList":
return AuthorizeUsersList(context);
default:
return Nok();
}
}
private Task<bool> AuthorizeUsersList(ResourceAuthorizationContext context)
{
switch (context.Action.First().Value)
{
case "Read":
return Eval(context.Principal.HasClaim("role", "User"));
case "Write":
return Eval(context.Principal.HasClaim("role", "Owner"));
default:
return Nok();
}
}
}
Однако, когда управление доходит до AuhtorizeUsersList, то context.Principal не имеет никаких претензий ролей. Я не сохраняю претензии пользователя при регистрации пользователя. Как я могу добавить претензии для аутентифицированного пользователя на ходу?
Мой код выглядит как ваша, но метод CheckAccessAsync никогда не выполняется, даже если я поставил ResourceAuthorize' атрибут ' над действием контроллера, и я также настроил авторизацию с помощью 'app.UseResourceAuthorization (MyAuthorizationManager)'. Вы знаете, есть ли еще что-то, что мне нужно сделать, чтобы заставить это работать? –
Я предполагаю, что это должно быть 'app.UseResourceAuthorization (новый MyAuthorizationManager()). – dudedev
Чтобы добавить претензии на ходу, переопределите метод GetClaimsForUserAsync класса AbstractIdentityUserService (Axoom.Core.IdentityServer.Services) и добавьте там претензии. – dudedev