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

# Credencials de client OAuth

> Aprovisioneu un client de compte de servei amb abast limitat, gestioneu els secrets d'un sol ús i recupereu-vos amb seguretat de sol·licituds incertes.

Feu servir les credencials de client OAuth quan la vostra integració de backend necessiti
tokens d'accés de curta durada o quan la vostra política de seguretat ho requereixi. Cada client pertany a
un sol compte de servei i a una sola organització. **OAuth és opcional:** una
clau d'API amb abast limitat és suficient per a una integració privada de servidor que pugui emmagatzemar
i rotar una clau de manera segura. Consulteu [Authentication](/ca/developers/v1/authentication) per triar
entre els dos mètodes i entendre com encaixen els comptes de servei.

<Note>
  L'accés a OAuth ha d'estar habilitat per a la vostra organització. La vostra configuració proporciona
  el punt final de tokens regional, l'emissor, l'audiència i el mètode d'autenticació del client.
  Si necessiteu aquests paràmetres o no podeu accedir a la gestió de clients, contacteu amb
  el Suport de Living Security.
</Note>

La concessió de credencials de client representa el vostre compte de servei. No inicia la sessió d'una persona
ni demana a un client que autoritzi una aplicació. L'autorització delegada mitjançant un
navegador és una funcionalitat d'OAuth diferent i no s'ofereix amb aquestes operacions.

## Abans de començar

* Creeu un [compte de servei](/ca/developers/developer-hub/service-accounts) amb només
  els permisos que necessita la integració.
* Feu servir una credencial de gestió amb `service_account:manage` i cada permís
  que vulgueu concedir al nou client. El compte de destinació també ha de tenir aquests
  permisos. Un client no pot ampliar l'autoritat de cap dels dos comptes.
* Trieu la [regió](/ca/developers/v1/regions) de l'organització. Les credencials d'API i
  els tokens d'accés OAuth pertanyen al host d'API regional corresponent.
* Conserveu el secret del client i els tokens a l'emmagatzematge de secrets del vostre servidor. No els poseu mai
  en codi de navegador, aplicacions mòbils, control de versions ni registres de sol·licituds.

## Creació d'un client

`POST /v1/oauth_clients` requereix `service_account_id`, una llista no buida de
`scopes` explícits i un `Idempotency-Key`. No s'accepten comodins. Un client admet
fins a 100 scopes, amb una longitud combinada de com a màxim 4.096 caràcters. Cada compte
de servei pot tenir com a màxim 20 clients o operacions de creació/neteja no resoltes.
La revocació denega immediatament l'accés a l'API. Un client o una creació incerta
al proveïdor continua comptant per al límit fins que es confirmi la neteja remota.
Una reserva abandonada o una creació que s'hagi demostrat que ha fallat abans que
comencés la feina al proveïdor pot alliberar la seva plaça de manera segura. La seva clau de reintent continua pertanyent a l'intent
original; recupereu aquest rebut abans de decidir si cal crear un substitut.

Trieu una clau de reintent per a aquest intent de creació i deseu-la **abans** d'enviar
la sol·licitud. Feu servir entre 1 i 255 caràcters ASCII visibles, sense espais. Reutilitzeu-la amb el
mateix compte, els mateixos scopes, el mateix principal de gestió, la mateixa regió i la mateixa versió d'API després d'una resposta
perduda. Rotar la credencial de gestió sota el mateix compte de servei
no crea una nova identitat de reintent.

Instal·leu el paquet `requests` de Python. Carregueu els valors d'entorn següents mitjançant
la vostra gestió habitual de secrets i configuració:

| Variable | Valor |
| - | - |
| `LIVING_SECURITY_API_KEY` | Clau d'API de gestió |
| `LIVING_SECURITY_REGION` | `us` o `eu` |
| `LIVING_SECURITY_SERVICE_ACCOUNT_ID` | ID del compte de servei de destinació |
| `LIVING_SECURITY_OAUTH_CREATE_KEY` | Clau de reintent desada prèviament |

```python Python theme={null}
import os
import requests

HOSTS = {
    "us": "https://api.us-east-1.livingsecurity.ai/v1",
    "eu": "https://api.eu-west-1.livingsecurity.ai/v1",
}
base = HOSTS[os.environ["LIVING_SECURITY_REGION"]]
response = requests.post(
    f"{base}/oauth_clients",
    auth=("apikey", os.environ["LIVING_SECURITY_API_KEY"]),
    headers={
        "Living-Security-Version": "2026-07-01",
        "Idempotency-Key": os.environ["LIVING_SECURITY_OAUTH_CREATE_KEY"],
    },
    json={
        "service_account_id": os.environ["LIVING_SECURITY_SERVICE_ACCOUNT_ID"],
        "scopes": ["organization:read"],
    },
    timeout=(5, 30),
    allow_redirects=False,
)
try:
    if response.status_code != 201:
        raise RuntimeError(
            f"Client creation needs review: HTTP {response.status_code}; "
            f"request_id={response.headers.get('Request-Id', 'unknown')}"
        )
    client = response.json()
    if client.get("object") != "oauth_client" or not client.get("id"):
        raise RuntimeError("Unexpected client receipt; preserve the retry key")
    if client.get("status") != "active" or not client.get("client_secret"):
        raise RuntimeError(
            f"Client {client['id']} needs recovery; no usable secret was returned"
        )
    # Persist client['id'], client['client_id'], and client['client_secret']
    # directly in your secret manager before using the client. Do not print them.
finally:
    response.close()
```

L'exemple fa una sola sol·licitud i conserva el resultat a la memòria. Afegiu l'operació d'escriptura del
vostre gestor de secrets al punt marcat abans d'executar-lo en producció.
Exigeix deliberadament una decisió després d'un resultat incert en lloc de
crear silenciosament un altre client. Les excepcions de xarxa també requereixen els passos de recuperació següents.

Les respostes de creació i de rebut fan servir `201` i contenen un recurs `oauth_client`
amb `id`, `service_account_id`, `client_id`, `scopes`, `status`, `created_at` i
`client_secret`. Les respostes es marquen amb `Cache-Control: no-store`.

* **`id`** identifica el recurs de la plataforma. Deseu-lo per a la consulta i la revocació.
* **`client_id`** identifica el client durant l'intercanvi de tokens. No és l'ID
  del recurs de la plataforma. Pot ser `null` mentre la creació està pendent.
* **`client_secret`** només es retorna a la sol·licitud que completa la creació.
  Cada sol·licitud de creació repetida retorna `null`, inclòs un reintent després d'una resposta
  d'èxit perduda. La consulta mai no retorna un secret.

## Recuperació d'una resposta perduda o interrompuda

Repetiu la mateixa sol·licitud de creació amb la clau de reintent desada per recuperar el rebut
del recurs. El rebut reflecteix l'estat actual, de manera que un client revocat continua revocat.
Aquesta operació no fa servir el contracte general de reproducció de respostes en memòria cau de 24 hores
i no retorna cap capçalera `Idempotent-Replayed`.

| Resultat | Acció següent |
| - | - |
| `active`, secret present | Deseu el secret de manera segura i continueu la incorporació. |
| `active`, secret absent | El secret no es pot recuperar. Reviqueu aquest client, confirmeu la revocació i creeu-ne un de substitut amb una clau de reintent nova. |
| `pending` | La creació no està confirmada. Conserveu la mateixa clau de reintent. Consulteu el recurs per inspeccionar-ne l'estat; no creeu duplicats per esquivar la incertesa. |
| `revoked`, `disabled` o `expired` | No feu servir aquest client. Confirmeu la configuració prevista del compte abans d'aprovisionar-ne un de substitut. |
| `409 idempotency_key_reuse` | La sol·licitud ha canviat amb una clau existent. Recupereu l'operació original abans de decidir si cal una creació independent. |
| `409 invalid_request` | Comproveu l'estat i les concessions del compte de destinació. Si s'ha assolit el seu límit de clients, completeu la neteja abans de tornar-ho a provar; canviar la clau de reintent no allibera capacitat. |
| `429` | Respecteu `Retry-After`; conserveu la mateixa clau i la mateixa sol·licitud. |
| `500`, `503` o un temps d'espera de xarxa esgotat | Pot ser que es desconegui el resultat. Conserveu la clau i les dades d'entrada; recupereu el rebut abans de crear un altre client. |
| `401` o `403` | Resoleu l'accés de credencials, permisos o drets d'ús abans de tornar-ho a provar. |
| `404` | Confirmeu l'habilitació d'OAuth, el host regional i la propietat del recurs. |

Consulteu [errors](/ca/developers/v1/errors/overview) per als ID de sol·licitud i els detalls de recuperació.
No envieu mai un secret de client ni un token d'accés amb una sol·licitud de suport.

## Inspecció i revocació

Feu servir la vostra credencial de gestió i el `id` del recurs de la plataforma:

| Operació | Sol·licitud | Èxit |
| - | - | - |
| Inspeccionar l'estat actual | `GET /v1/oauth_clients/{id}` | `200`, recurs de client sense secret |
| Revocar l'accés | `DELETE /v1/oauth_clients/{id}` | `200`, recurs de client revocat sense secret |

La revocació bloqueja les sol·licituds d'API posteriors del client, incloses les sol·licituds amb
tokens ja emesos. No cancel·la la feina que l'API ja ha acceptat.
La neteja remota de credencials pot completar-se més tard. Repetir la revocació és segur i
no requereix cap clau de reintent. Continueu fent servir la credencial de gestió si el client
que es revoca és alhora un emissor de crides a l'API.

## Rotació sense perdre l'accés

Creeu un segon client amb el límit d'scopes necessari. Deseu-ne el secret, obteniu un
token mitjançant el vostre punt final de tokens regional i verifiqueu que la integració funciona
amb aquest. Canvieu la integració al substitut i, a continuació, reviqueu el recurs antic.
Conserveu una credencial de gestió independent per poder recuperar-vos d'un desplegament incorrecte.

Els tokens d'accés no poden concedir més del que permeten els scopes del client i els permisos actuals
del compte de servei. Eliminar permisos del compte o revocar un client preval
sobre la vida restant d'un token. No considereu un token en memòria cau com a prova
que l'autorització continua sent vàlida. Obteniu un nou token d'accés abans que caduqui
tornant a autenticar el client; aquesta concessió no fa servir tokens d'actualització.


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