# MCP authentication

platforma utilizează OAuth 2.0 pentru autentificareaMCP. Clienții interactivi pot completa automat fluxul de autorizare. Clienții care necesită o credențială statică pot utiliza un token OAuth scalabil creat în interfața de utilizare a platformei.

Both methods send an access token in the HTTP `Authorization` header:

```http
Authorization: Bearer <credential>
```

## OAuth discovery

Un clientMCPar trebui să înceapă cu punctul finalMCPpentru implementare:

- US: `https://us.probo.com/api/mcp/v1`
- EU: `https://eu.probo.com/api/mcp/v1`
- Self-hosted: `https://<your-host>/api/mcp/v1`

An unauthenticated request returns `401 Unauthorized` with an

<a href="https://www.rfc-editor.org/rfc/rfc9728.html" rel="nofollow">
  RFC 9728 Protected Resource Metadata URL
</a>
:

```http
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer resource_metadata="https://us.probo.com/.well-known/oauth-protected-resource"
```

Obțineți acea adresă URL pentru a descoperi resursa, serverul de autorizare, metoda token-ului purtătorului și domeniile de resurse acceptate:

```json
{
  "resource": "https://us.probo.com",
  "authorization_servers": ["https://us.probo.com"],
  "bearer_methods_supported": ["header"],
  "scopes_supported": ["openid", "v1:iam", "v1:risk"]
}
```

Răspunsul abreviat de mai sus ilustrează câmpurile, nu lista completă de domenii. Utilizați întotdeauna valorile returnate de implementare.

The authorization server publishes both discovery documents:

  

```text
https://us.probo.com/.well-known/oauth-authorization-server
https://us.probo.com/.well-known/openid-configuration
```

  
  

```text
https://eu.probo.com/.well-known/oauth-authorization-server
https://eu.probo.com/.well-known/openid-configuration
```

  
  

```text
https://<your-host>/.well-known/oauth-authorization-server
https://<your-host>/.well-known/openid-configuration
```

  

Discovery oferă autorizarea implementării, token-ul, înregistrarea, revocarea, introspecția, autorizarea dispozitivului și punctele finale JWKS. De asemenea, anunță tipurile de granturi acceptate, metodele de autentificare a punctelor finale ale token-ului, metodele PKCE și domeniile.

the platform supports:

- Authorization Code with PKCE using `S256`
- Refresh tokens with `offline_access`
- Autorizarea dispozitivului OAuth 2.0 - Înregistrarea dinamică a clientului - Documente de metadate ID client

CliențiiMCPar trebui să utilizeze descoperirea în loc să construiască URL-uri endpoint OAuth.

## Access token lifetime and refresh

Clienții interactivi care au nevoie să rămână conectați ar trebui să solicite
`offline_access`. the platform issues a refresh token only when both conditions are
met:

- The authorization request includes the `offline_access` scope.
- The client registration includes the `refresh_token` grant type.

When the access token expires, send the refresh token to the `token_endpoint`
advertised by discovery:

```http
POST /api/connect/v1/oauth2/token
Content-Type: application/x-www-form-urlencoded

grant_type=refresh_token&refresh_token=<refresh-token>&client_id=<client-id>
```

o reîmprospătare reușită returnează un token de acces nou și un token de reîmprospătare nou; înlocuiți ambele valori stocate atomic și nu reutilizați tokenul de reîmprospătare anterior.

Without `offline_access`, the user must authorize the client again after its
access token expires.

:::notă Token-urile OAuth create manual în interfața de utilizare a platformei sunt token-uri de acces standalone. Acestea nu includ un token de reîmprospătare. Alegeți o expirare adecvată și creați o înlocuire atunci când este necesar. :::

## Client registration

### Dynamic Client Registration

Clients can register through the `registration_endpoint` advertised by
authorization server discovery. Public clients use
`token_endpoint_auth_method: "none"` and PKCE. Confidential clients can use
`client_secret_basic` or `client_secret_post`.

### Client ID Metadata Documents (CIMD)

the platform supports URL-based client identifiers. With CIMD, the OAuth `client_id`
este un URL HTTPS care returnează documentul de metadate al clientului. Acest lucru permite clienților, cum ar fi asistenții AI găzduiți, să se identifice fără un ID client pre-provizionat sau secret.

Serverul de autorizare anunță suport cu:

```json
{
  "client_id_metadata_document_supported": true
}
```

Un document CIMD utilizat cu platforma trebuie:

- Be served as JSON from the exact HTTPS URL used as `client_id`
- Set `client_id` to that same URL
- Include `client_name` and at least one `redirect_uri`
- Use `token_endpoint_auth_method: "none"`
- Utilizați URI-uri de redirecționare HTTPS, cu excepția redirecționărilor loopback HTTP pentru clienții locali - Solicitați numai domenii înregistrate de implementarea platformei

Example:

```json
{
  "client_id": "https://client.example.com/oauth/client.json",
  "client_name": "Example MCP Client",
  "client_uri": "https://client.example.com",
  "redirect_uris": ["https://client.example.com/oauth/callback"],
  "grant_types": ["authorization_code", "refresh_token"],
  "response_types": ["code"],
  "token_endpoint_auth_method": "none",
  "scope": "openid offline_access v1:iam:read v1:risk:read"
}
```

:::note
Self-hosted deployments accept only explicitly allowed CIMD client IDs.
Configure the exact metadata URLs with
[`PROBOD_OAUTH2_SERVER_CIMD_ALLOWED_CLIENT_IDS`](/docs/deployment/configuration/environment-variables#oauth2-server).
An empty allowlist disables third-party CIMD clients.
:::

## Scopes

Accesul OAuth este intersecția dintre domeniile acordate și permisiunile platformei utilizatorului. Un domeniu nu oferă niciodată unui utilizator acces la o organizație sau la o operațiune la care contul lor nu poate accesa altfel.

Resource scopes use these forms:

- `v1:<resource>:read` grants read operations for a resource family.
- `v1:<resource>` grants both read and write operations for that family.

For example:

- `listOrganizations` requires an IAM scope such as `v1:iam:read`.
- `listRisks` requires `v1:risk:read` or `v1:risk`.
- Creating or updating risks requires `v1:risk`.
- Reading third parties requires `v1:third-party:read` or
  `v1:third-party`.

Other resource families include `asset`, `audit`, `control`, `document`,
`privacy`, `task`, `webhook`, `access-review`, `itam`, and
`compliance-page`. The authorization server's `scopes_supported` value is the
authoritative list for a deployment.

Domeniile standard au semnificațiile lor obișnuite OAuth și OpenID Connect:

- `openid` requests an OpenID Connect identity token.
- `profile` and `email` request identity claims.
- `offline_access` requests a refresh token.

The Protected Resource Metadata document intentionally advertises the broader
write scopes. The authorization server discovery document includes the full
list, including `:read` variants.

## OAuth tokens for static configuration

Dacă un clientMCPnu poate finaliza un flux OAuth interactiv, creați un token OAuth cuprinzător în platformă:

1. Deschideți meniul contului și selectați **OAuth tokens**.2. Selectați **Create token**.3. Introduceți un nume, selectați o expirare și selectați numai domeniile de care are nevoie clientul.4.

Stochează tokenul în mecanismul secret sau variabil al mediului al clientului.Pentru clienții care susțin extinderea mediului:

Pentru clienții care susțin extinderea mediului:

```json
{
  "mcpServers": {
    "probo": {
      "url": "https://us.probo.com/api/mcp/v1",
      "headers": {
        "Authorization": "Bearer ${env:PROBO_OAUTH_TOKEN}"
      }
    }
  }
}
```

Tokenul este supus atât domeniilor selectate, cât și permisiunilor contului care l-a creat. Creați un token separat pentru fiecare client sau mediu, astfel încât acesta să poată fi auditat și revocat independent.

## Authentication errors

A missing credential returns a discovery challenge:

```http
WWW-Authenticate: Bearer resource_metadata="https://us.probo.com/.well-known/oauth-protected-resource"
```

O credențială de titular invalidă, expirată sau nerecunoscută returnează:

```http
WWW-Authenticate: Bearer error="invalid_token", resource_metadata="https://us.probo.com/.well-known/oauth-protected-resource"
```

Odată ce transportulMCPeste autentificat, eșecurile de autorizare sunt returnate prin apelul la instrumente:

- `insufficient scope` means the OAuth token does not grant a scope mapped to
  the requested operation.
- `permission denied` means the authenticated user cannot perform the
  operation on that resource.
- `assumption required` means the operation requires an active organization
  context.

Modificarea formatării credențialului nu va remedia un domeniu de aplicare sau un eșec de permisiune.

## Credential handling

Utilizați HTTPS și păstrați jetoanele în afara controlului sursă, jurnalele, prompturile de chat și fișierele de configurareMCPcare vor fi partajate. Dacă un jetoan OAuth poate fi expus, revocați-l, emiteți o înlocuire, actualizați clientul și revizuiți activitatea relevantă.