INTEGRITY Документация

Разрешить MCP-серверам доступ к локально размещённым приложениям

MCP-серверам часто требуется обращаться к внутренним приложениям от имени аутентифицированных пользователей. Например, MCP-серверу, который помогает сотрудникам работать с внутренними инструментами, необходимо передавать личность пользователя этим нижестоящим сервисам (внутренним приложениям, к которым подключается MCP-сервер), чтобы каждый запрос авторизовался с нужными правами.

Linked App Token селектор политики обеспечивает это, позволяя политике Access одного приложения принимать токены, выданные для другого. Есть два способа настроить это в зависимости от того, как развёрнут ваш сервер MCP.

Если ваш сервер MCP является локально размещённое приложение Access, Cloudflare Access выполняет аутентификацию автоматически. MCP-сервер получает JWT-токен пользователя от Access в Cf-Access-Jwt-Assertion заголовок и должен передавать его нижестоящим приложениям в Cf-Access-Token заголовок. Реализация OAuth в коде вашего MCP-сервера не требуется.

flowchart LR
accTitle: Self-hosted MCP server accessing internal applications
    User --> client["MCP client"]
    client --> mcp["MCP server <br> (self-hosted app)"]
    mcp -- "Cf-Access-Token: &lt;JWT&gt;" --> app1["Internal API <br> (self-hosted app)"]
    mcp -- "Cf-Access-Token: &lt;JWT&gt;" --> app2["Company wiki <br> (self-hosted app)"]
    idp[Identity provider] <--> mcp

Предварительные требования

1. Настройте нижестоящие приложения

В каждом self-hosted приложении, к которому должен получить доступ MCP-сервер (например, Internal API и Company wiki приложений), создайте политику Linked App Token:

  1. В Панель управления Cloudflare, перейдите в Zero Trust > Контроль доступа > Приложения.

  2. Выберите нижестоящее приложение и нажмите Изменить.

  3. Перейдите в Политики и выберите Создать новую политику.

  4. Настройте политику Действие к Service Auth.

  5. Для Селектор, выберите Linked App Token.

  6. Для Значение, выберите приложение сервера MCP. Например,

    Действие Тип правила Селектор Значение
    Service Auth Включить Linked App Token mcp-server-app
  7. Сохраните политику.

  8. В нижестоящем приложении добавьте политику в Политики доступа список.

  9. Сохраните приложение.

  1. Получите uid приложения MCP-сервера:

    Необходимые разрешения API-токена

    Хотя бы одно из следующих права доступа токена требуется:
    • Access: Apps and Policies Revoke
    • Access: Apps and Policies Write
    • Access: Apps and Policies Read
    List Access applications
    curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/apps" \
    	--request GET \
    	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"
    {
    	"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    	"uid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    	"type": "self_hosted",
    	"name": "mcp-server-app",
    	...
    }
  2. Создайте политику Access для нижестоящего приложения, заменив app_uid значение на uid приложения MCP-сервера:

    Необходимые разрешения API-токена

    Хотя бы одно из следующих права доступа токена требуется:
    • Access: Apps and Policies Write
    Создать многократно используемую политику Access
    curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/policies" \
    	--request POST \
    	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
    	--json '{
    		"name": "Allow requests from MCP server",
    		"decision": "non_identity",
    		"include": [
    				{
    						"linked_app_token": {
    								"app_uid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
    						}
    				}
    		]
    	}'

2. Настройте свой MCP-сервер

В коде своего сервера MCP перенаправьте Cf-Access-Jwt-Assertion заголовок из входящих запросов как Cf-Access-Token заголовок в исходящих запросах к нижестоящему приложению:

Cf-Access-Token: <JWT from Cf-Access-Jwt-Assertion>

Теперь Access будет проверять JWT-токен на соответствие правилу Linked App Token и передавать личность пользователя нижестоящему приложению.

MCP-сервер SaaS (Access for SaaS с OAuth)

Если ваш сервер MCP зарегистрирован как OIDC-приложение Access for SaaS и реализует MCP OAuth, он получает OAuth access_token от Cloudflare Access. MCP-сервер передаёт этот токен нижестоящим self-hosted приложениям в Authorization: Bearer заголовок.

Этот подход требует, чтобы ваш MCP-сервер реализовывал OAuth authorization code flow. Используйте подход с локально размещённым сервером MCP если хотите, чтобы аутентификацию за вас выполняла Cloudflare.

flowchart LR
accTitle: SaaS MCP server accessing internal applications
    User --> client["MCP client"]
    client --> mcp["MCP server <br> (Access for SaaS app)"]
    mcp -- "Authorization: Bearer &lt;token&gt;" --> app1["Internal API <br> (self-hosted app)"]
    mcp -- "Authorization: Bearer &lt;token&gt;" --> app2["Company wiki <br> (self-hosted app)"]
    idp[Identity provider] <--> mcp

Предварительные требования

1. Настройте нижестоящие приложения

В каждом self-hosted приложении, к которому должен получить доступ MCP-сервер (например, Internal API и Company wiki приложений), создайте политику Linked App Token:

  1. В Панель управления Cloudflare, перейдите в Zero Trust > Контроль доступа > Приложения.

  2. Выберите нижестоящее приложение и нажмите Изменить.

  3. Перейдите в Политики и выберите Создать новую политику.

  4. Настройте политику Действие к Service Auth.

  5. Для Селектор, выберите Linked App Token.

  6. Для Значение, выберите приложение сервера MCP. Например,

    Действие Тип правила Селектор Значение
    Service Auth Включить Linked App Token mcp-server-app
  7. Сохраните политику.

  8. В нижестоящем приложении добавьте политику в Политики доступа список.

  9. Сохраните приложение.

  1. Получите uid приложения MCP-сервера:

    Необходимые разрешения API-токена

    Хотя бы одно из следующих права доступа токена требуется:
    • Access: Apps and Policies Revoke
    • Access: Apps and Policies Write
    • Access: Apps and Policies Read
    List Access applications
    curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/apps" \
    	--request GET \
    	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"
    {
    	"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    	"uid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    	"type": "saas",
    	"name": "mcp-server-app",
    	...
    }
  2. Создайте политику Access для нижестоящего приложения, заменив app_uid значение на uid приложения MCP-сервера:

    Необходимые разрешения API-токена

    Хотя бы одно из следующих права доступа токена требуется:
    • Access: Apps and Policies Write
    Создать многократно используемую политику Access
    curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/policies" \
    	--request POST \
    	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
    	--json '{
    		"name": "Allow requests from MCP server",
    		"decision": "non_identity",
    		"include": [
    				{
    						"linked_app_token": {
    								"app_uid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
    						}
    				}
    		]
    	}'

2. Настройте свой MCP-сервер

Настройте сервер MCP для пересылки access_token в исходящих запросах:

Authorization: Bearer ACCESS_TOKEN

Известные ограничения