Я пытаюсь перенести одно из наших решений из системы Laravel / PHP в систему на основе .Net Core 2.Моя главная проблема касается авторизации и аутентификации.
У меня есть 5 различных приложений, которые отправляют запросы REST в Api (например, веб-браузер, приложения для iOS, приложения для Android и т. Д.), И способ, которым я в настоящее время выполняю аутентификацию / авторизацию, выглядит следующим образом:
- Пользователь отправляет имя пользователя / пароль, а также идентификатор приложения (например, «Браузер», «iOS» и т. Д.) И описание приложения (например, «Chrome-Jacob», «iPhone-7-Jacob»).).
- Если токен уже существует для пары Идентификатор приложения / Описание приложения, он возвращается.В противном случае новый токен генерируется и сохраняется в таблице базы данных с именем «Tokens».
- Каждый токен может иметь различную матрицу разрешений, которая является очень гранулированной (например, «Users / ViewAll», «Users / Create»).',' Users / ViewOne ',' Users / ViewMe 'и т. Д.)
- Когда REST-запрос получен с токеном в заголовке, мы ищем матрицу разрешений токена в базе данных и пытаемся увидетьвне зависимости от того, авторизован ли предназначенный объект или нет.
Похоже, что в Core 2 предполагаемое использование токена происходит через JWT.Мне не нравится этот подход на 100%, потому что я хочу, чтобы пользователь мог видеть все токены, сгенерированные для его доступа, все связанные разрешения и возможность просто отозвать доступ к токену;в то время как с JWT невозможно узнать, у кого какой токен, пока они не отправят его в запросе.
Моя текущая реализация может генерировать любой случайный токен, если он уникален в базе данных;это не требует какого-либо алгоритма шифрования.
Каков наилучший подход для репликации системы выше в Core 2?
Я считаю, что подход Microsoft очень хорош для простых приложений, но я изо всех сил пытаюсьпереопределите атрибут авторизации и получите желаемую степень детализации.