Модель
в шести строках
- Стандарт
- OpenID Connect
- Поток
- Authorization Code с PKCE (S256)
- Вход
- На стороне Noir ID, в первую очередь по ключу доступа
- Идентификатор
- Попарный, один на клиента
- Callback-адреса
- Точные URL, без масок
- Права доступа
- Остаются в вашем продукте
Какой сценарий
у вашего приложения
Веб-приложение с сервером
Ваш сервер выполняет поток с кодом и хранит токены. Браузер держит только защищённую cookie сессии, которая сама по себе ничего не значит.
Мобильное или десктопное приложение
Открывайте вход в системном браузере, никогда не во встроенном WebView, и получайте результат на зарегистрированный callback-адрес.
Сервис к сервису
Машинные клиенты используют поток Client Credentials с собственными короткоживущими токенами.
Четыре шага
до рабочего входа
Зарегистрируйте клиента
Пришлите нам название приложения и его точные callback-адреса. Вы получите идентификатор клиента (client ID), а если у приложения есть сервер, ещё и секрет.
Отправьте людей на вход
Перенаправьте на эндпоинт авторизации с вашим client ID, callback-адресом, scope, случайным state и PKCE challenge.
Обработайте callback
Проверьте state, обменяйте код, передав PKCE verifier, и валидируйте ID-токен: подпись, издателя, аудиторию и срок действия.
Сохраните идентификатор
Привяжите запись пользователя к идентификатору, который возвращает Noir ID. Для вашего клиента он не меняется, а за его пределами ничего не значит.
Как выглядит запрос
Значения в угловых скобках подставляете вы. Издатель (issuer) находится по адресу https://id.noir.bzh: берите эндпоинты из его discovery-документа, а не прописывайте их в коде.
GET <authorization_endpoint>
?response_type=code
&client_id=<your client id>
&redirect_uri=https://app.example/callback
&scope=openid
&state=<random value>
&code_challenge=<base64url(sha256(verifier))>
&code_challenge_method=S256Чего Noir ID делать не будет
- Потоки password и implicit
- Callback-адреса с масками или частичным совпадением
- Вход, встроенный в вашу страницу или в iframe
- Открытая регистрация клиентов без проверки
- Решать, что пользователю можно делать в вашем продукте
Перед запуском
- Каждый callback-адрес зарегистрирован ровно в том виде, в каком используется
- State и PKCE проверяются при каждом входе
- ID-токены валидируются, а не просто декодируются
- Неудачный вход обрабатывается как неудачный вход, а не как сбой
- Вы знаете, как перенесёте пользователей, если решите уйти
Хотите подключитьсязаранее?
Расскажите, что вы делаете и какой сценарий используете. Ранние интеграции помогают сформировать первую версию.