Обработка нескольких типов сеансов / уровней аутентификации: есть ли поддержка стандартов? - PullRequest
0 голосов
/ 08 июня 2019

Я планирую API для веб-приложения. Клиентами являются веб-приложения SPA, обслуживаемые с другого хоста. Пользователи аутентифицируются по электронной почте, паролю (SRP с Argon2) и 2FA. Для простоты давайте потребуем, чтобы все пользователи имели 2FA.

Я хочу представить многоуровневую модель сеанса, в которой доступ к каждой конечной точке API основан на наличии соответствующего уровня аутентификации. Да, используется термин уровень аутентификации, а не уровень авторизации. Этот вопрос не о том, как реализовать RBAC через API. Этот вопрос касается возможности на детальном уровне гарантировать, что доступ пользователя не был украден с момента его первого входа в систему.

Примеры - не реальные варианты использования, а примеры, например, из сайт, подобный GitHub - указан ниже определения типов сеанса.

Типы сеансов от самого низкого до самого высокого уровня аутентификации:

  1. LoginSession
    • значение: пользователь заходил где-то в прошлом
    • уровень доступа: самый низкий
    • срок действия: 60 минут
    • можно приобрести с: OneTimeSession
    • автообновление: со старым сеансом
    • пример конечной точки, требующей этого уровня: api/get-repository-details
  2. PasswordSession
    • значение: пользователь подтвердил себя паролем
    • уровень доступа: высокий
    • срок действия: 10 минут
    • можно получить с помощью: - (ввод пароля)
    • автообновление: - (необходимо снова ввести пароль и сыграть для получения рукопожатия SRP)
    • пример конечной точки, требующей этого уровня: api/edit-repository-settings
  3. TwoFactorSession
    • значение: пользователь аутентифицировался с 2FA
    • уровень доступа: выше
    • срок действия: 10 минут
    • можно получить с помощью: PasswordSession (и ввод данных 2FA)
    • автообновление: - (нужно снова ввести 2FA)
    • пример конечной точки, требующей этого уровня: api/add-repository-collaborator
  4. OneTimeSession
    • значение: запрошено одноразовое предоставление для одного указанного вызова конечной точки
    • уровень доступа: самый высокий
    • срок действия: вызов одной конечной точки
    • можно приобрести с: TwoFactorSession
    • автообновление: -
    • пример конечной точки, требующей этого уровня: api/transfer-organization-ownership

Нажмите здесь для краткой иллюстрации различных уровней аутентификации.

Возможно ли что-то подобное вышеописанному с четко определенным отраслевым стандартом, таким как OAuth 2.0 или OpenID Connect?

...