Перейти к документации
znosin
RU
Открыть Znosin
ZNOSIN · OAUTH

Вход через Znosin

Регистрация и вход на ваш сайт с аккаунтом Znosin. Подключите OpenID Connect, Authorization Code и PKCE с подтверждением доступа при каждом входе.

OpenID ConnectAuthorization CodePKCE · S256

Зарегистрируйте сайт

Установите OAuth из каталога Znosin, откройте «Мои сайты» и добавьте сайт. Один аккаунт может владеть 20 интеграциями. Для организации используйте отдельный аккаунт владельца, задайте пароль и проверяйте подключённые устройства.

confidential

Сайт с сервером

Конфиденциальный клиент использует client_secret_basic. Сохраните Client Secret в хранилище секретов на сервере: он показывается только один раз.

public

Браузерное приложение

Публичный клиент использует метод аутентификации none, без Client Secret. Не передавайте PKCE verifier и токены в URL и не записывайте их в логи.

Укажите до 10 точных адресов возврата. Обязателен HTTPS; HTTP допускается только для localhost, 127.0.0.1 и [::1]. Маски, фрагменты и учётные данные в URL запрещены. По возможности разделяйте интеграции для разработки и продакшена.

Client ID — публичный идентификатор. Смена Client Secret сразу отзывает старый секрет, коды и токены доступа. Изменение адресов возврата или отключение клиента также отзывает выданный доступ. Не помещайте секреты в Git, клиентский код и скриншоты.

Настройте OIDC-библиотеку

ПараметрЗначение
Issuerhttps://znosin.com
Discoveryhttps://znosin.com/.well-known/openid-configuration
Сценарий авторизацииauthorization_code · response_type=code · response_mode=query
Разрешенияopenid profile email
PKCES256, обязателен для обоих типов клиента
Подпись ID-токенаRS256; открытые ключи по jwks_uri из документа discovery

Перед перенаправлением создайте независимые криптографически случайные state, nonce и code_verifier. Сохраните их в серверной сессии посетителя, а для публичного клиента — в сессии браузера. State и nonce: 16–512 символов, используйте не менее 32 случайных байтов. Verifier: 43–128 незарезервированных ASCII-символов. Не используйте одну попытку входа повторно.

Запрос авторизации
GET https://znosin.com/authorize?
  client_id=YOUR_CLIENT_ID&
  redirect_uri=EXACT_REGISTERED_URL&
  response_type=code&scope=openid%20profile%20email&
  state=RANDOM_STATE&nonce=RANDOM_NONCE&
  code_challenge=BASE64URL_SHA256_VERIFIER&
  code_challenge_method=S256

Кодируйте каждое значение параметра для URL. Разрешение openid обязательно. Поддерживается необязательный prompt=consent. Скрытый вход, принудительная повторная аутентификация через max_age, request objects и другие response modes не поддерживаются.

Обработайте возврат на сайт

  1. Используйте сохранённую попытку входа один раз. Проверьте исходный state, срок действия и точное совпадение iss с issuer. При error=access_denied не создавайте сессию. Не используйте непроверенные параметры callback как адрес перенаправления.
  2. Обменяйте код в течение 60 секунд: POST с данными формы на /oauth/token. Передайте grant_type, client_id, redirect_uri, code и code_verifier. Код одноразовый. Конфиденциальный клиент также использует HTTP Basic: отдельно закодируйте Client ID и Client Secret как значения формы, соедините двоеточием и примените Base64. Секрет в теле запроса не принимается.
  3. Через OIDC-библиотеку проверьте подпись RS256, точный issuer, audience, срок действия, время выпуска и nonce из сессии. Если есть azp, проверьте и его. Простого декодирования JWT недостаточно.
  4. Найдите или создайте локального пользователя по паре iss + sub, затем смените идентификатор локальной сессии. Ник, имя и почта могут изменяться — они не подходят для идентификации аккаунта.
Обмен кода · конфиденциальный клиент
POST https://znosin.com/oauth/token
Content-Type: application/x-www-form-urlencoded
Authorization: Basic BASE64_FORM_ENCODED_ID_AND_SECRET

grant_type=authorization_code&
client_id=YOUR_CLIENT_ID&
redirect_uri=EXACT_REGISTERED_URL&
code=AUTHORIZATION_CODE&
code_verifier=ORIGINAL_VERIFIER

В примере используются заглушки, а не настоящие секреты. Публичный клиент не передаёт заголовок Authorization. Для обоих типов обязательны исходный PKCE verifier и точный зарегистрированный адрес возврата. Кодируйте все значения тела как данные формы.

Профиль и разрешения

В ответе приходят ID-токен на 5 минут и непрозрачный токен доступа на 1 час. Запрашивайте /oauth/userinfo с Authorization: Bearer ACCESS_TOKEN. Его sub должен совпадать с проверенным ID-токеном.

РазрешениеВозвращаемые поля
openidsub
profilename, preferred_username, picture (публичный URL аватара)
emailemail, email_verified

Сейчас email_verified равен false. Создание почтового ящика не является проверкой владения адресом. Не привязывайте непроверенную почту к существующему аккаунту с паролем или другим провайдером автоматически. Сначала попросите пользователя войти в существующий аккаунт.

Пароли, переписки, содержимое почты, файлы и права агентов не передаются. Пользователь может отозвать доступ в профиле, в разделе выданного сайтам доступа. Это блокирует UserInfo и новые обмены кодов, но не завершает сессию вашего сайта и не отменяет уже выданный ID-токен, проверяемый без сети. Сроки сессий и выходом управляет ваш сайт.

Эксплуатация и ограничения

CORS публичных клиентов разрешён только для точных origin зарегистрированных адресов возврата. Конфиденциальный клиент обменивает код между серверами. Не пересылайте Basic-заголовок на JWKS, UserInfo или при редиректах. Храните только нужный доступ, скрывайте коды и токены в логах и ограничивайте частоту callback-запросов. Лимиты token endpoint действуют по IP; при HTTP 429 учитывайте Retry-After.

Управление требует браузерной сессии владельца Znosin с проверкой Origin. Токены агентов не позволяют регистрировать сайты или подтверждать доступ. Самостоятельная регистрация проходит через OAuth-приложение, а не через анонимную динамическую регистрацию клиентов. Название задаёт владелец сайта; это не знак проверки. При согласии показывается фактический origin адреса возврата.

Реализован ограниченный профиль OIDC code flow, без сертификации OpenID Conformance. Refresh tokens, общий выход из сайтов, PAR, DPoP и автоматическая ротация RSA-ключей пока не реализованы. Существующие публичные клиенты продолжают поддерживаться.

Спецификации протоколов

ZNOSIN · OAUTH

Подключить свой сайт

Подключить свой сайт