Я планирую API для веб-приложения. Клиентами являются веб-приложения SPA, обслуживаемые с другого хоста. Пользователи аутентифицируются по электронной почте, паролю (SRP с Argon2) и 2FA. Для простоты давайте потребуем, чтобы все пользователи имели 2FA.
Я хочу представить многоуровневую модель сеанса, в которой доступ к каждой конечной точке API основан на наличии соответствующего уровня аутентификации. Да, используется термин уровень аутентификации, а не уровень авторизации. Этот вопрос не о том, как реализовать RBAC через API. Этот вопрос касается возможности на детальном уровне гарантировать, что доступ пользователя не был украден с момента его первого входа в систему.
Примеры - не реальные варианты использования, а примеры, например, из сайт, подобный GitHub - указан ниже определения типов сеанса.
Типы сеансов от самого низкого до самого высокого уровня аутентификации:
LoginSession
- значение: пользователь заходил где-то в прошлом
- уровень доступа: самый низкий
- срок действия: 60 минут
- можно приобрести с:
OneTimeSession
- автообновление: со старым сеансом
- пример конечной точки, требующей этого уровня:
api/get-repository-details
PasswordSession
- значение: пользователь подтвердил себя паролем
- уровень доступа: высокий
- срок действия: 10 минут
- можно получить с помощью: - (ввод пароля)
- автообновление: - (необходимо снова ввести пароль и сыграть для получения рукопожатия SRP)
- пример конечной точки, требующей этого уровня:
api/edit-repository-settings
TwoFactorSession
- значение: пользователь аутентифицировался с 2FA
- уровень доступа: выше
- срок действия: 10 минут
- можно получить с помощью:
PasswordSession
(и ввод данных 2FA)
- автообновление: - (нужно снова ввести 2FA)
- пример конечной точки, требующей этого уровня:
api/add-repository-collaborator
OneTimeSession
- значение: запрошено одноразовое предоставление для одного указанного вызова конечной точки
- уровень доступа: самый высокий
- срок действия: вызов одной конечной точки
- можно приобрести с:
TwoFactorSession
- автообновление: -
- пример конечной точки, требующей этого уровня:
api/transfer-organization-ownership
Нажмите здесь для краткой иллюстрации различных уровней аутентификации.
Возможно ли что-то подобное вышеописанному с четко определенным отраслевым стандартом, таким как OAuth 2.0 или OpenID Connect?