В чем разница между разрешениями приложения и авторизацией oauth2?

#authentication #oauth #permissions #authorization #openid-connect

#аутентификация #oauth #разрешения #авторизация #OpenID-connect

Вопрос:

В настоящее время у нас уже есть приложение, это разделенное на интерфейс и серверную часть приложение, интерфейс -это веб-приложение (SPA), серверная часть — это веб-API.

Для приложения у нас уже есть use register, логин пользователя, роль пользователя, разрешения роли, проверка пользователя и permission check.

Сейчас мы интегрируем внешнюю службу идентификации (open id и Oatuh2), но я неправильно понимаю аутентификацию и авторизацию для внешней службы идентификации

Вопрос 1: Да, я могу использовать службу внешней идентификации для входа в систему и получить токен доступа, но после этого мне все равно нужно поддерживать пользователя в моем приложении, поскольку для бизнеса мне нужно знать, кто создает заказ, кто им управляет и т.д. … Итак, пользовательская система, что я делаю в своем приложении, мне все еще нужно делать, исправляет ли это то, что я делаю?

Вопрос 2: Для авторизации мне все еще нужно поддерживать роль пользователя, разрешение роли и проверку разрешений для себя в приложении, если да, то для чего нужна авторизация для службы идентификации (OAuth2)? И в чем разница между авторизацией OAuth2 и модулем разрешений в моем приложении?

Ответ №1:

Во-первых, OAuth 2.0 не определяет, как обрабатывать разрешения. Это определяет способ получения токенов доступа. Токены доступа — это секреты, которые ваш API принимает в качестве разрешений на доступ (например: — Сравните их с базовой авторизацией. заголовок. Вместо этого теперь вы получаете токен).

Как выполнить проверку токена? У вас есть два основных варианта. Вы можете выполнить самоанализ токена (RFC7662) в отношении эмитента токена (службы идентификации). Ответ будет содержать полезную нагрузку, которая может содержать аутентифицированного конечного пользователя и сведения об истечении срока действия токена.

В качестве альтернативы, если токены доступа поставляются в формате JWT (RFC7519), то ваш API может искать конкретные утверждения, отправленные в JWT (вы будете выполнять проверку JWT, которая включает проверку подписи JWT). Утверждения должны включать информацию о конечном пользователе, а также сведения об истечении срока действия.

В любом случае, ваша логика разрешений может быть вызвана после извлечения требуемой информации.

Что касается аутентификации, она построена с OpenID Connect и токеном ID. Аутентификация будет происходить на стороне клиента (SPA, как в вашем случае). Это не зависит от вызова API.

Что касается разрешений, пользователей и сопоставлений ролей. Если вы используете встроенное хранилище пользовательских данных, то вам нужно будет выполнить сопоставление пользователя между внешней службой идентификации и внутренним хранилищем. В противном случае нет способа сопоставить пользовательские данные, которые вы получаете через токены (как объяснено в первой части ответа), со встроенными. Это нечто независимое от OAuth 2.0 и OpenID Connect.

Например, если пользователь не найден во внутреннем хранилище, вы можете предположить, что этот пользователь принадлежит к ограниченной роли пользователя. Кроме того, вы можете добавить этого пользователя в свою внутреннюю систему при первом получении таких данных (при проверке токена). Позже может быть процесс назначения разрешений для пользователя, который зарегистрировался. Однако точные детали реализации зависят от вашего сценария.

Комментарии:

1. Большое спасибо, думаю, теперь я понимаю. По крайней мере, лучше, чем раньше.