OAuth2 partenaires
Client Credentials Machine-to-Machine pour intégrations long-terme.
Pour les intégrations machine-to-machine (ESN, fournisseur SaaS, CMDB externe). Alternative au flow PAT — rotation autonome côté partenaire.
Quand choisir OAuth2 plutôt que PAT : intégrations long-terme avec rotation auto (CI/CD, CMDB, monitoring).
1. Provisioning self-service
Depuis v0.1.85, le tenant-admin provisionne directement les clients OAuth2 partner depuis /api-token-requests (onglet « OAuth2 partner »). Un audit trail unifié avec les PAT est conservé dans la queue admin.
Champs à fournir :
- Slug du partenaire (kebab-case, ex.
acme-corp) — composera leclient_idfinalarch-partner-<tenant>-<slug> - Email technique du partenaire — destinataire des futures alertes de rotation
- Scopes (
read/write/admin) - IPs sources (optionnel, audit/contractuel uniquement en V1)
- Justification — projet, périmètre, durée
À l'approbation par le tenant-admin, un client Keycloak client_credentials est créé instantanément ; client_id et client_secret sont affichés une seule fois côté admin pour transmission via canal sécurisé (Vault, 1Password share, etc.).
Le client_secret n'est plus jamais affiché après ce one-shot. Rotation possible via le script ops infra/scripts/keycloak-prod-create-m2m-client.sh (sur demande à support@arch-platform.com).
2. Obtenir un access token
curl -X POST \
-d 'grant_type=client_credentials' \
-d 'client_id=arch-partner-VOTRE_TENANT-VOTRE_SLUG' \
-d 'client_secret=...' \
-d 'scope=read write' \
https://auth.arch-platform.com/realms/arch-prod/protocol/openid-connect/tokenimport requests
resp = requests.post(
"https://auth.arch-platform.com/realms/arch-prod/protocol/openid-connect/token",
data={
"grant_type": "client_credentials",
"client_id": "arch-partner-votre-tenant-votre-slug",
"client_secret": "VOTRE_SECRET",
"scope": "read write",
},
)
token = resp.json()["access_token"]
api = requests.get(
"https://api.arch-platform.com/api/v1/referentiel/applications",
headers={"Authorization": f"Bearer {token}"},
)
print(api.json())TTL access token : 5 minutes. Cachez-le côté client.
3. Scopes & mapping
| Scope JWT | Permet |
|---|---|
read | Endpoints @PublicApi(scope="read") |
write | read + endpoints @PublicApi(scope="write") |
admin | Tous scopes |
4. Rotation
Rotation du client_secret sur demande à support@arch-platform.com (interface self-service à venir). L'ancien reste valide 24h post-rotation.
5. Rate limiting
Quota partenaire : 600 req/min (3× le quota PAT).
PAT vs OAuth2
| PAT | OAuth2 partenaire | |
|---|---|---|
| Provisioning | Self-service /api-token-requests | Self-service /api-token-requests (tenant-admin) |
| Format | arc_pat_… opaque | JWT signé KC |
| TTL | Configurable | 5 min, refresh autonome |
| Rate limit | 180 req/min | 600 req/min |
| Recommandé | Scripts, POC, CI ponctuel | Intégrations long-terme |