Авторизация с помощью ASP. NET Web Api и Angular 10 - PullRequest
0 голосов
/ 03 августа 2020

Я ищу способ реализовать авторизацию в своем веб-приложении, только определенные пользователи должны иметь доступ к конфиденциальным частям приложения. Я буду использовать аутентификацию windows, пользователи, добавленные в веб-конфигурацию, будут иметь право доступа к приложению, часть управления пользователями будет видна только авторизованным пользователям.

Пользователь с полными правами доступа должен сможет открыть раздел управления пользователями, который даст ему возможность редактировать права доступа для других пользователей или добавлять / удалять пользователей из веб-конфигурации, как это можно сделать с помощью диспетчера IIS.

Я использую ASP. NET Web Api с Angular 10. Что было бы хорошим методом для реализации такого подхода?

Я подумал сначала синхронизировать пользователей из веб-конфигурации с базой данных при запуске приложения. Я получу новых пользователей с доступом к приложению, которые добавляются через веб-конфигурацию вручную, с другой стороны, веб-конфигурация будет получать новых пользователей, которые были добавлены через раздел управления пользователями приложения. Правила авторизации будут храниться в базе данных, будут права доступа для определенных c частей приложения, я бы отправил такой объект во фронтенд:

{ 
    "username": {
        "email_list": true,
        "calculation_area": false
    }
}

И части приложения будет виден, если у пользователя есть доступ, например:

<nav class="menu">
  <ul>
    <li><a href="/main">Main</a></li>
    <li><a href="/email_list" *ngIf="userHasAccessToEmailList()">Emails</a></li>
    <li><a href="/calculation_area" *ngIf="userHasAccessToCalculationArea()>Calculation</a></li>
  </ul>
</nav>

Я знаю, что это не DRY, потому что я проверяю на каждой части, есть ли у пользователя права доступа или нет, я буду искать лучший решение, но вы поняли теорию. Я буду использовать WindowsIdentity identity = HttpContext.Current.Request.LogonUserIdentity, чтобы получить имя пользователя от человека, который просматривает приложение. Приложение будет работать под идентификатором, который имеет права доступа к некоторым источникам данных, которые я использую, поэтому мне нужно разделить текущего пользователя, который запускает приложение, и пользователя, который просматривает приложение через браузер. У меня будет информация о том, кто звонил в приложение при запуске, и я могу проверить, какие у него права доступа. Я бы скрывал части приложения, к которым у этого пользователя нет прав доступа, и при каждом http-вызове проверяйте права доступа для пользователя, который сделал запрос, возможно, защита маршрута angular - хороший способ справиться с этим logi c. Что ты думаешь об этом? Что нужно учитывать и где подводные камни?

1 Ответ

0 голосов
/ 04 августа 2020

Сначала защитите свой API. Требовать аутентификацию для всего приложения и размещать атрибуты авторизации на каждом чувствительном контроллере. По сути, ваша цель должна состоять в том, чтобы открыть безопасное приложение, даже если кто-то потратит время на создание собственного клиента.

Затем настройте Angular клиента. В зависимости от ваших требований, было бы неплохо создать отдельный клиент для административных задач. Вы можете использовать контроллер для обслуживания клиента администратора только для пользователей с правами администратора.

...