Авторизация по требованию роли в веб-API с использованием идентификатора ядра JWT Token-Asp.net - PullRequest
0 голосов
/ 07 февраля 2019

Я изучал Asp.Net Identity в последние несколько дней, я знаком с авторизацией контроллера с [Authorize(Roles = "Admin")] или [Authorize(Policy = "OnlyAdminAndModerators")], например.

Я использую токен JWT, когда авторизируюсь через "[Authorize (Roles =" Admin ")]", все, что мне нужно сделать, это установить тип роли на моем токене, например:

{  
  "nameid": "a173e923-1808-4d7d-2b64-08d684882677",  
  "unique_name": "yuri",  
  "role": [  
    "Admin",  
    "Moderator"  
  ],  
  "nbf": 1549522727,  
  "exp": 1549609127,  
  "iat": 1549522727  
}  

Таким образом, мой контроллер может проходить аутентификацию через имя «роли» на json и значение « Admin ».

Что я слышал, так это то, что в таблице Identity AspNetRole можно создать роль, связать заявку с ролью через таблицу AspNetRoleClaims, поэтому, например, у администратора будет утверждение «CanAdd», а затем -Класс запуска, я мог бы создать Политику, говорящую что-то вроде options.AddPolicy("Add Role", policy => policy.RequireClaim("CanAdd", "AddClaim"));

И, наконец, я мог бы перейти на свой контроллер, установить метод с [Authorize(Policy = "Add Role")], и контроллер авторизовал бы любого пользователя с ролью администратора, потому чтоу него будет требование CanAdd.

Извините, я знаю, что это большой вопрос, но я действительно хочу сделать эту работу.
Заранее спасибо.

1 Ответ

0 голосов
/ 11 февраля 2019

Один из способов получения дополнительных заявок на основе содержимого вашего токена может быть выполнен в обработчике сообщений, который запускается после чтения токена и перед этапом авторизации.Для .NET Full framework я использовал OWin для этого.Этот блок внедряет дополнительные утверждения в ApplicPrinciple, которые затем можно использовать в определяемых вами политиках.

Это мой файл запуска:

ConfigureAuthorization -> мой метод расширения, чтобы обернуть tge BearerTokenAuthentication owin block IncludeAzureActiveDirectoryUserClaims-> получить претензии от Azure APi и добавить их ...

using Owin;

[assembly: OwinStartup(typeof(Token.API.Startup))]

namespace Token.API
{
    public partial class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            app.ConfigureAuthorization(ClaimsProviders
                    .InitializeAuthorizationProviders()
                    .IncludeAzureActiveDirectoryUserClaims()
            );
        }
    }
}

Если бы я делал это для .NET Core, это выглядело бы примерно так: Аутентификация на носителе: ссылка

В файле startup.cs:

        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
        app.UseAuthentication();
        app.Use(async (context, next) =>
        {
            //Retrieve claims from database based on roles in token.
            // Add to loaded identity    (= context.User)           

            await next.Invoke();
        });
...