Внедрить систему авторизации / аутентификации на основе токенов - PullRequest
0 голосов
/ 04 декабря 2018

Я пытаюсь перенести одно из наших решений из системы Laravel / PHP в систему на основе .Net Core 2.Моя главная проблема касается авторизации и аутентификации.

У меня есть 5 различных приложений, которые отправляют запросы REST в Api (например, веб-браузер, приложения для iOS, приложения для Android и т. Д.), И способ, которым я в настоящее время выполняю аутентификацию / авторизацию, выглядит следующим образом:

  1. Пользователь отправляет имя пользователя / пароль, а также идентификатор приложения (например, «Браузер», «iOS» и т. Д.) И описание приложения (например, «Chrome-Jacob», «iPhone-7-Jacob»).).
  2. Если токен уже существует для пары Идентификатор приложения / Описание приложения, он возвращается.В противном случае новый токен генерируется и сохраняется в таблице базы данных с именем «Tokens».
  3. Каждый токен может иметь различную матрицу разрешений, которая является очень гранулированной (например, «Users / ViewAll», «Users / Create»).',' Users / ViewOne ',' Users / ViewMe 'и т. Д.)
  4. Когда REST-запрос получен с токеном в заголовке, мы ищем матрицу разрешений токена в базе данных и пытаемся увидетьвне зависимости от того, авторизован ли предназначенный объект или нет.

Похоже, что в Core 2 предполагаемое использование токена происходит через JWT.Мне не нравится этот подход на 100%, потому что я хочу, чтобы пользователь мог видеть все токены, сгенерированные для его доступа, все связанные разрешения и возможность просто отозвать доступ к токену;в то время как с JWT невозможно узнать, у кого какой токен, пока они не отправят его в запросе.

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

Каков наилучший подход для репликации системы выше в Core 2?

Я считаю, что подход Microsoft очень хорош для простых приложений, но я изо всех сил пытаюсьпереопределите атрибут авторизации и получите желаемую степень детализации.

1 Ответ

0 голосов
/ 04 декабря 2018

Я считаю, что подход Microsoft очень хорош для простых приложений, но я пытаюсь переопределить атрибут авторизации и получить желаемую степень детализации.

Это совсем наоборот.Microsoft не изобрела и не была близка к тому, чтобы первыми начать использовать JWT.Вы взяли что-то очень распространенное и сделали свою собственную версию, что-то, что не считается безопасным или хорошей практикой.

Существует два способа решения проблемы:

  1. Использование Identity Server 4 , бесплатной системы с открытым исходным кодом, созданной для ASP.NET Core и созданной опытными специалистами по безопасности, которая предоставляет настраиваемую систему OAuth 2.0 / OpenID Connect.При этом вам потребуется переделать некоторые части безопасности приложений, но вы будете использовать отраслевые стандарты.
    Примечание: это может быть не так просто, но очень хорошо масштабируется

    Identity serverуже дает вам всю информацию о каждом приложении и токены, для которых действительны.

  2. Хотя вы можете сделать это вручную без особых проблем, я бы посоветовал вам взглянуть на ASP.NET Core Identity , официальная структура для аутентификации и авторизации в ASP.NET Core.Обратите внимание, что относительно того, как узнать, какие токены / логины активны, Identity недавно приняла две интересные таблицы:

    • IdentityUserLogin: рассказывает, какие пользователи вошли в систему, где и как
    • IdentityUserToken: даетВы токены, которые были предоставлены для данного пользователя.

Все это говорит о том, что обычно добавляют ASP.NET Core Identity в приложение Identity Server 4, учитывая, чтопозже не для обработки авторизации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...