> ## 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.

# TYPO3

> Вход в TYPO3 13 через Veriqa на causal/oidc: настройки в settings.php, обязательная группа по умолчанию и то, что расширение проверяет, а что нет.

TYPO3 подключается расширением `causal/oidc` — самым свежим OIDC-клиентом из проверенных
движков. Сторона Veriqa не меняется.

<Note>
  Проверено: TYPO3 13.4.34 + `causal/oidc` 5.0.0; канал Telegram. Работают вход, создание
  `fe_user` и сессия, связывание идентичности по `sub` Veriqa.
</Note>

## 1. Установка

```bash theme={null}
composer create-project "typo3/cms-base-distribution:^13"
composer require causal/oidc:^5
vendor/bin/typo3 extension:setup
```

Расширение требует TYPO3 12.4.33+/13.4.14+ и PHP 8.2+, тянет `league/oauth2-client` и
`firebase/php-jwt`.

## 2. Настройка

Настройки живут не в базе, а в `config/system/settings.php`, ключ `EXTENSIONS.oidc`:

| Настройка | Значение | Зачем |
| - | - | - |
| `enableFrontendAuthentication` | `1` | иначе служба аутентификации не подключается |
| `enableCodeVerifier` | `1` | включает PKCE; метод только `S256` |
| `oidcClientKey` / `oidcClientSecret` | из клиента Veriqa | клиент должен быть confidential |
| `oidcClientScopes` | `openid profile email` | |
| `oidcEndpointAuthorize` / `Token` / `UserInfo` | три адреса из discovery | **`UserInfo` пустым оставлять нельзя** — см. ниже |
| `oidcRedirectUri` | любая страница сайта | |
| `usersStoragePid` | uid папки-хранилища | иначе `fe_users` некуда класть |
| `usersDefaultGroup` | uid группы `fe_groups` | **обязательно**, см. следующий раздел |

`redirect_uri` у TYPO3 свободный — в отличие от Drupal и Joomla, где адрес навязан модулем.
Middleware перехватывает любой фронтовый GET, в query которого есть `code`/`state`/`error`,
поэтому зарегистрировать можно, например, корень сайта.

<Warning>
  Страницу входа заведите отдельную. Плагин `oidc_login` редиректит на IdP **сразу при рендере
  страницы** — положить его на главную значит отправлять на вход каждого посетителя.
</Warning>

## 3. Группа по умолчанию — без неё вход не работает

Это главная засада TYPO3, и опасна она вдвойне.

Нового пользователя расширение **не создаёт, если он не попал ни в одну группу**. Группы берутся
либо из claim `Roles` — **Veriqa такого не отдаёт**, — либо из `usersDefaultGroup`. Значит запись
`fe_groups` нужно завести руками и указать её uid.

Вторая половина ловушки — диагностика. Отказ уходит в лог уровнем **INFO**, а дефолтный логгер
TYPO3 держит порог на **ERROR**. Со стороны это выглядит так:

* страница показывает голое **«Login failed! Please try again.»**;
* в логе TYPO3 — ни строки о причине;
* в логах Veriqa **всё зелёное**: token 200, userinfo 200.

Ошибка возникает уже **после** успешного обмена, поэтому интегратор ищет проблему у IdP, а она у
него. Диагностический логгер стоит включать **до** первого входа, а не после.

## 4. Что расширение проверяет, а что нет

<Warning>
  Подпись `id_token` расширение **не проверяет** — настройки JWKS у него нет вовсе: личность
  берётся из ответа `/connect/userinfo`, а доверие строится на TLS. Это законный выбор
  (OIDC Core §3.1.3.7), но подпись Veriqa на стороне TYPO3 не проверяется.
</Warning>

`nonce` расширение не отправляет и `iss` не сверяет — от replay его защищает только `state` и
собственная кука контекста. Для строгого RP это слабее, чем Drupal.

**`oidcEndpointUserInfo` обязателен.** Запасной путь «взять личность из `id_token`» содержит
дефект расширения, дающий на PHP 8 фатальную ошибку вместо входа. Оставлять поле пустым нельзя.

## Email и имя пользователя

TYPO3, как и WordPress, **не требует email**: дефолтный маппинг
`plugin.tx_oidc.mapping.fe_users` его вообще не мапит. Вход через мессенджер создаёт рабочего
`fe_user` без синтетических `.invalid`-адресов, которые нужны Drupal и Битриксу.

Цена та же, что везде: по умолчанию `username` = `<sub>`, то есть `telegram:123456789`.
Человекочитаемое имя даёт переопределение маппинга на `<preferred_username>`.

Идентичность связывается по `sub` Veriqa — если способ его формирования на стороне Veriqa
изменится, ранее заведённые пользователи перестанут узнаваться.

## Границы

Проверено с каналом **Telegram**; TYPO3 с Email, WhatsApp и MAX не проверялся.


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