Авторизация — не аутентификация
2.0 отвечает на вопрос «уполномочено ли это приложение получить доступ к тому ресурсу от имени пользователя?». Это протокол авторизации, и он намеренно не говорит ничего стандартного о том, кто такой пользователь. Тем не менее приложения пытались использовать его повторно для входа, способами несовместимыми и порой небезопасными. OpenID Connect () — стандарт, который это исправляет: тонкий слой идентичности поверх OAuth 2.0, добавляющий аутентификацию, не отбрасывая ничего из того, что OAuth уже делает.
ID-токен
Определяющее дополнение — ID-токен, и это . Тогда как токен доступа OAuth предназначен для API и часто непрозрачен для клиента, ID-токен предназначен для клиента и несёт стандартные утверждения об аутентифицированном пользователе:
iss(издатель) иaud(аудитория, клиент, для которого он выпущен)sub(стабильный уникальный идентификатор пользователя)expиiat(срок действия и время выпуска)nonce(связывает токен с конкретным запросом входа и побеждает повтор)- утверждения профиля, такие как
name,emailиpicture, когда эти области предоставлены
Поскольку это JWT, клиент проверяет подпись ID-токена и валидирует эти утверждения точно так, как описано для любого JWT. Применяются те же проверки фиксации алгоритма и aud/iss/exp.
Как протекает вход
OIDC повторно использует механизм OAuth. Рекомендуемый поток — поток кода авторизации с :
- Приложение отправляет пользователя к конечной точке авторизации провайдера, запрашивая область
openid(плюсprofile,emailи так далее) и включая PKCEcode_challenge. - Пользователь аутентифицируется и даёт согласие у провайдера.
- Приложение получает одноразовый код и обменивает его (доказывая владение PKCE
code_verifier) на ID-токен и токен доступа. - Приложение проверяет ID-токен, чтобы установить, кто такой пользователь, и использует токен доступа для вызова API от его имени.
Две конечные точки дополняют картину: конечная точка userinfo возвращает утверждения профиля для действительного токена доступа, а документ обнаружения по адресу /.well-known/openid-configuration объявляет конечные точки провайдера и его адрес , чтобы клиент мог найти ключи для проверки ID-токенов и автоматически следить за ротацией ключей.
Почему это важно
OIDC — это то, на чём на самом деле работает большинство кнопок «Войти через ...». Разделение двух токенов — ключевое понимание: ID-токен доказывает идентичность клиенту, токен доступа авторизует вызовы API, и они не взаимозаменяемы. В сочетании с потоком кода и PKCE это современный, основанный на стандартах способ федеративного входа.
Инструмент PKCE генерирует и проверяет code_verifier и code_challenge потока, а инструмент JWT декодирует и проверяет ID-токен, оба целиком в вашем браузере, без отправки чего-либо.