Ответ
Ключевое различие: scope в OAuth 2.0 определяет разрешения (что приложение может делать), а в OpenID Connect (OIDC) — какие данные о пользователе можно получить.
1. scope в OAuth 2.0 — Авторизация (Permissions)
Определяет права доступа (полномочия), которые клиентское приложение запрашивает к защищенному ресурсу (API) от имени пользователя. Это ответ на вопрос: "Что приложению разрешено делать?"
- Назначение: Ограничение доступа к API.
- Формат: Обычно строки, описывающие действия или сущности (например,
read:profile,write:posts).
Примеры:
repo: полный доступ к репозиториям пользователя (GitHub API).calendar.events.readonly: право только на чтение событий календаря (Google Calendar API).messages.send: право отправлять сообщения от имени пользователя.
2. scope в OpenID Connect — Аутентификация (User Info)
OIDC — это слой аутентификации поверх OAuth 2.0. Его scope определяет, какие наборы данных (claims) о пользователе будут возвращены в id_token или через эндпоинт UserInfo. Это ответ на вопрос: "Что приложение может узнать о пользователе?"
- Назначение: Запрос информации о пользователе.
- Формат: Стандартизированные значения.
Примеры:
openid: Обязательный scope, который сигнализирует о выполнении процесса аутентификации OIDC.profile: Запрашивает доступ к базовым данным профиля (имя, фамилия, фото и т.д.).email: Запрашивает доступ к email-адресу пользователя.address: Запрашивает доступ к физическому адресу.
Совместное использование
В одном запросе авторизации часто комбинируются оба типа scope, так как приложению обычно нужно и аутентифицировать пользователя, и получить права на действия от его имени.
Пример запроса:
.../authorize?
response_type=code&
client_id=MY_CLIENT_ID&
redirect_uri=https://client.app/callback&
scope=openid%20profile%20calendar.events.readonly
В этом примере приложение:
- Аутентифицирует пользователя (
openid). - Запрашивает его профиль (
profile). - Запрашивает право на чтение его календаря (
calendar.events.readonly).