← Cloudflare One / cloudflare-one / access-controls / applications / http-apps / authorization-cookie
Токен приложения
Cloudflare Access добавляет токен приложения ко всем аутентифицированным запросам к вашему источнику. Типичный JWT выглядит так:
eyJhbGciOiJSUzI1NiIsImtpZCI6IjkzMzhhYmUxYmFmMmZlNDkyZjY0.eyJhdWQiOlsiOTdlMmFhZ TEyMDEyMWY5MDJkZjhiYzk5ZmMzNDU5MTNh.zLYsHmLEginAQUXdygQo08gLTExWNXsN4jBc6PKdB
Как показано выше, JWT содержит три значения Base64-URL, разделённых точками:
Если ваше приложение не подключено к Access через Cloudflare Tunnel, оно должно проверить токен чтобы обеспечить безопасность вашего источника. Проверки одного заголовка недостаточно: необходимо также подтвердить JWT и подпись, чтобы избежать подмены личности.
Header
{
"alg": "RS256",
"kid": "9338abe1baf2fe492f646a736f25afbf7b025e35c627be4f60c414d4c73069b8",
"typ": "JWT"
}algопределяет алгоритм кодирования.kidопределяет ключ, используемый для подписи токена.typуказывает формат токена.
Полезная нагрузка
Полезная нагрузка содержит фактические данные утверждений (claims) и информацию о пользователе, передаваемые приложению. Содержимое полезной нагрузки зависит от того, прошли ли вы аутентификацию в приложении через поставщика идентификации или с помощью токен службы.
Аутентификация на основе идентификации
{
"aud": ["32eafc7626e974616deaf0dc3ce63d7bcbed58a2731e84d06bc3cdf1b53c4228"],
"email": "[email protected]",
"exp": 1659474457,
"iat": 1659474397,
"nbf": 1659474397,
"iss": "https://yourteam.cloudflareaccess.com",
"type": "app",
"identity_nonce": "6ei69kawdKzMIAPF",
"sub": "7335d417-61da-459d-899c-0a01c76a2f94",
"country": "US"
}| Поле | Описание |
|---|---|
| aud | Application Audience (AUD) Tag приложения Access. |
| электронная почта | Адрес электронной почты аутентифицированного пользователя, подтверждённый поставщиком идентификации. |
| exp | Отметка времени истечения срока действия токена (Unix time). |
| iat | Отметка времени выдачи токена (время Unix). |
| nbf | Временная метка not-before для токена (в формате Unix time), по которой проверяется, что токен не был получен раньше положенного времени использования. |
| iss | URL-адрес домена Cloudflare Access для приложения. |
| тип | Тип токена Access (app для токена приложения или org для глобального токена сеанса). |
| identity_nonce | Ключ кэша, используемый для получения личность пользователя. |
| sub | ID пользователя. Это значение уникально для адреса электронной почты в рамках аккаунта. Пользователь получит другой sub если они удалён и повторно добавлены в вашу организацию Zero Trust, либо если они входят в другую организацию. |
| страна | Страна, из которой пользователь прошёл аутентификацию. |
Собственные атрибуты SAML и утверждения OIDC
Access позволяет добавлять в JWT собственные атрибуты SAML и утверждения OIDC для расширенной проверки, если это поддерживается вашим поставщиком идентификации. Это настраивается при настройке вашего SAML или OIDC поставщик. Группы поставщика идентификации включаются в токен, только если вы явно настроите groups как пользовательский атрибут SAML или утверждение OIDC. Access не добавляет их автоматически.
Личность пользователя
Личность пользователя полезна для проверки прав доступа к приложению. Например, ваше приложение может проверить, что пользователь состоит в группе Okta или Microsoft Entra ID, такой как Finance-Team.
Из-за ограничений на размер файлов cookie и соображений, связанных с пропускной способностью, токен приложения содержит лишь часть идентификационных данных пользователя. Чтобы получить полные идентификационные данные пользователя, отправьте CF_Authorization файл cookie в https://<your-team-name>.cloudflareaccess.com/cdn-cgi/access/get-identity. Ваш запрос должен быть структурирован следующим образом:
curl -H 'cookie: CF_Authorization=<user-token>' https://<your-team-name>.cloudflareaccess.com/cdn-cgi/access/get-identityAccess вернёт структуру JSON, содержащую следующие данные:
| Поле | Описание |
|---|---|
| электронная почта | Адрес электронной почты пользователя. |
| idp | Данные от вашего поставщика удостоверений. |
| geo | Страна, из которой пользователь прошёл аутентификацию. |
| user_uuid | ID пользователя. |
| devicePosture | Атрибуты состояния устройства. |
| account_id | ID аккаунта вашей организации. |
| iat | Отметка времени, указывающая момент входа пользователя в систему. |
| ip | IP-адрес пользователя. |
| auth_status | Статус в случае аутентификации через mTLS. |
| common_name | Значение Common Name в клиентском сертификате mTLS. |
| service_token_id | Client ID сервисного токена, используемого для аутентификации. |
| service_token_status | True, если аутентификация происходила через токен службы, а не через IdP. |
| is_warp | True, если пользователь включил WARP. |
| is_gateway | True, если пользователь включил Cloudflare One Client и прошёл аутентификацию в организации Zero Trust. |
| gateway_account_id | Идентификатор, который Cloudflare One Client создаёт при аутентификации в команде Zero Trust. |
| device_id | ID устройства, используемого для аутентификации. |
| версия | Версия get-identity объект. |
| device_sessions | Список всех сессий, инициированных пользователем. |
Аутентификация по токену службы
{
"type": "app",
"aud": ["32eafc7626e974616deaf0dc3ce63d7bcbed58a2731e84d06bc3cdf1b53c4228"],
"exp": 1659474457,
"iss": "https://yourteam.cloudflareaccess.com",
"common_name": "e367826f93b8d71185e03fe518aff3b4.access",
"iat": 1659474397,
"sub": ""
}| Поле | Описание |
|---|---|
| тип | Тип токена Access (app для токена приложения или org для глобального токена сеанса). |
| aud | application audience (AUD) tag приложения Access. |
| exp | Отметка времени истечения срока действия JWT (Unix time). |
| iss | URL-адрес домена Cloudflare Access для приложения. |
| common_name | Client ID сервисного токена (CF-Access-Client-Id). |
| iat | Отметка времени выдачи JWT (время Unix). |
| sub | Содержит пустую строку, если аутентификация выполнялась через токен службы. |
Подпись
Cloudflare формирует подпись, подписывая закодированные заголовок и полезные данные с помощью алгоритма SHA-256 (RS256). В RS256 закрытый ключ подписывает JWT, а отдельный открытый ключ проверяет подпись.
Дополнительные сведения о JWT см. в jwt.io ↗.