Аутентификация носителя веб-API Asp.net 5 и несколько областей

У меня есть серверная часть webapi, которую используют несколько клиентских приложений. API защищен с помощью проверки подлинности jwt, он основан на следующем примере: . Поскольку я еще не очень хорошо разбираюсь во всех концепциях аутентификации на основе токенов, я мог бы использовать некоторые рекомендации в этом. Моя проблема в том, что мне нужно, чтобы мои приложения использовали один и тот же API, но ограничивали доступ для каждого приложения к определенной области или контроллеру.

В соответствии с примером я могу защитить методы в области с помощью:

[Authorize("Api")]

Политика добавляется при запуске с помощью

    authOptions.AddPolicy("Api", new AuthorizationPolicyBuilder()
        .AddAuthenticationSchemes(JwtBearerDefaults.AuthenticationScheme) // "Bearer" scheme
        .RequireAuthenticatedUser().Build());

Для защищенных запросов от клиента у меня обычно есть приложение angular 2, которое просто добавляет jwt в заголовки следующим образом:

headers.append('Authorization', 'Bearer ' + jwt);

Я не знаю всей механики здесь, но я предполагаю, что когда запрашивается безопасный метод, украшение атрибута «Api» решает/ограничивает, какую политику следует использовать с определенным маршрутом в API.

Какова наилучшая практика и как мне расширить это для работы с разделами, доступными по отдельности?


person nplus    schedule 23.06.2016    source источник


Ответы (1)


Вы можете создать ActionFilterAttribute для Authorization и использовать его во всех действиях.

Вы можете реализовать методы фильтрации FrameworkAuthorise в соответствии с вашими требованиями.

введите здесь описание изображения

Global.ApiKey – это уникальный код вашего приложения, по которому можно определить, есть у вас доступ к этому приложению или нет.

     [FrameworkAuthorise(Global.ApiKey, AuthorisationType.None)]
     public async Task<IHttpActionResult> Get()        
     { 
        // code goes here
     }

    [FrameworkAuthorise(Global.ApiKey, AuthorisationType.Bearer)]
     public async Task<IHttpActionResult> Post()        
     { 
        // code goes here
     }

person Venky    schedule 23.06.2016
comment
Спасибо, Венки, я посмотрю, смогу ли я понять это и заставить его работать с моим проектом. - person nplus; 24.06.2016