У меня есть следующие проекты:
- Identity Server 4 с ASP.NET Identity в качестве пользовательского хранилища для всех пользователей всех моих приложений.
- Веб-API .NET Core 5
- Приложение Xamarin
Процесс выглядит так:
- Пользователь входит в систему из приложения Xamarin (3) и проходит проверку подлинности на IdentityServer (1).
- Пользователь получает токен доступа от Identity Server, который содержит дополнительное утверждение
- Пользователь делает запрос к веб-API (2), используя токен доступа
- Веб-API (2) проверяет собственную базу данных на предмет разрешений пользователей.
---- ВОПРОС / ПРОБЛЕМА ЗДЕСЬ -----
Должен ли веб-API добавлять эти пользовательские утверждения (разрешения) к токену доступа ИЛИ должен ли веб-API всегда проверять базу данных на предмет разрешений пользователя при каждом запросе, сделанном от клиента?
Возможно, я мог бы добавить утверждения перед аутентификацией с помощью IdentityServer, но это означало бы, что IdentityServer будет иметь доступ к базе данных веб-API. Я считаю, что это не лучшая практика из-за разделения интересов.
Другое решение - ввести механизм кэширования, когда веб-API проверяет токен, чтобы он не всегда проверял базу данных.
Используя преобразование утверждений, насколько я понимаю, я могу добавить утверждения только к этому 1 запросу, что означает, что в следующий раз, когда клиент сделает запрос, преобразование утверждений должно произойти снова, поскольку оно не возвращает новый токен доступа пользователю. .
В идеале я бы хотел, чтобы веб-API добавлял утверждения к токену доступа, чтобы веб-API мог доверять этим утверждениям во всех последующих запросах. Однако я не могу найти способ сделать это. Я искал преобразования утверждений, IssueJwtAsync (IdentityServerTools), IProfileService, но я думаю, что ни один из них не является решением этой проблемы.
Это хорошая архитектура? Пожалуйста, поделитесь своим мнением по этому поводу и возможными решениями.
Большое спасибо!