> ## Documentation Index
> Fetch the complete documentation index at: https://veriqa.app/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Вход на сайте через мессенджер

> Примеры входа на сайт через мессенджер: издатель со встроенной Veriqa, штатный OIDC-клиент, тот же вход под .NET Aspire и код клиента внешнего издателя.

Сайт впускает человека через мессенджер так же, как через любого провайдера OpenID Connect:
перенаправляет к издателю, человек подтверждает вход в мессенджере, и браузер возвращается с
токенами. Примеры ниже показывают обе стороны такого входа. Всё лежит в `samples/` репозитория
([veriqa.app/source](https://veriqa.app/source)) под лицензией MIT.

<Note>
  Veriqa живёт на стороне **издателя**. Сам сайт остаётся обычной проверяющей стороной OIDC:
  в примере клиента нет пакета Veriqa, и с любым совместимым провайдером он выглядел бы так же.
</Note>

## Примеры

| Путь | Сторона | Что показывает | Вид |
| - | - | - | - |
| `dotnet/inproc/login` | издатель | Veriqa, встроенная в приложение (`AddVeriqaAuthServer` / `MapVeriqaAuthServer`): издатель работает внутри процесса | запускаемый · `https://localhost:7300` |
| `dotnet/inproc/login-client` | клиент | Штатная проверяющая сторона ASP.NET Core (`AddCookie` + `AddOpenIdConnect`, Authorization Code + PKCE) | запускаемый · `https://localhost:7020` |
| `dotnet/aspire/login` | издатель | Тот же встроенный издатель под .NET Aspire: хранилище транзакций — оркестрируемый ресурс (нужен Docker) | запускаемый · `https://localhost:7320` |
| `dotnet/remote/login` | клиент | Клиент внешнего издателя — self-hosted или Veriqa Cloud | код для копирования |
| `java/Application.java` | клиент | Тот же клиент на Spring Security OAuth2 Client | код для копирования |
| `node/index.ts` | клиент | Тот же клиент на `openid-client` + Express | код для копирования |
| `python/main.py` | клиент | Тот же клиент на Authlib + FastAPI | код для копирования |

## Запуск пары

Первым запускается издатель — иначе клиент не пройдёт discovery.

<Steps>
  <Step title="Включите канал у издателя">
    Издатель поставляется с `"Enabled": false` у всех каналов, и без включённого канала страница
    входа отвечает `no_channels_available`. Включите канал в
    `samples/dotnet/inproc/login/appsettings.Development.json` и дайте ему учётные данные — быстрее
    всего токен бота, см. [Настройка каналов](/docs/ru/guides/channels).
  </Step>

  <Step title="Запустите издателя">
    ```bash theme={null}
    dotnet run --project samples/dotnet/inproc/login
    ```

    Корневой маршрут отвечает `Hello!` и больше ничего: у издателя нет страницы для вошедшего
    пользователя, вход начинается и заканчивается у клиента.
  </Step>

  <Step title="Запустите клиента и войдите">
    ```bash theme={null}
    dotnet run --project samples/dotnet/inproc/login-client
    ```

    Откройте `https://localhost:7020/`. Анонимный посетитель сразу попадает на страницу входа
    Veriqa; после подтверждения в мессенджере страница показывает `Hello, {name}!`.
  </Step>
</Steps>

Обоим проектам нужен доверенный локальный HTTPS-сертификат (`dotnet dev-certs https --trust`).
Открывайте клиента по адресу `https`: вход, начатый по обычному HTTP, отправит `redirect_uri`,
которого издатель не знает.

## Почему паре не нужна настройка

Издатель уже регистрирует ровно того клиента, которым является второй проект, поэтому три значения
совпадают из коробки:

| Клиент | Издатель (`Veriqa:OpenIddict:Clients[]`) |
| - | - |
| `Oidc:Authority` = `https://localhost:7300` | собственный адрес издателя |
| `Oidc:ClientId` = `my-app` | `ClientId` |
| `CallbackPath` = `/signin-oidc` на порту 7020 | запись в `AllowedRedirectUris` |

`redirect_uri` сравнивается буквально, без масок: поменяли порт клиента — поменяйте и
`AllowedRedirectUris`. У `my-app` нет `ClientSecret`, поэтому это **публичный** клиент, и от него
требуется PKCE (S256).

## Что ещё показывает клиент

* **Отмена** на странице Veriqa возвращает `error=access_denied`; клиент через `AccessDeniedPath`
  превращает её в простую страницу «вход отменён».
* Любой другой неудачный возврат уходит через `OnRemoteFailure` на страницу «вход не удался»;
  текст ошибки пишется в лог, а не показывается пользователю.
* `GET /signout` сбрасывает только локальную cookie. Эндпоинта завершения сессии у Veriqa нет,
  поэтому федеративного выхода тоже нет — см. [Известные ограничения](/docs/ru/reference/limitations).

## См. также

* [Быстрый старт .NET](/docs/ru/quickstart/dotnet) — та же обвязка по шагам
* [Как работает auth-поток](/docs/ru/concepts/auth-flow)
* [Вход и регистрация без пароля](/docs/ru/scenarios/passwordless-login)
* [Видео: вход на сайте](/docs/ru/videos/web-sign-in)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.