Obexal Docs

Docs/Référence/Points d'accès OAuth et OIDC

Endpoints OAuth, OIDC et SAML

La table de référence de tous les endpoints publics du protocole, les types de grant du token endpoint, et les surfaces SAML et SCIM.

Tous les endpoints de protocole vivent sur votre domaine de connexion. Les exemples utilisent https://accounts.obexal.com, le domaine par défaut : si votre organisation utilise un domaine personnalisé, il remplace cet hôte partout, y compris dans l'issuer.

Découverte

Deux documents publics sont le point d'entrée de toute intégration :

curl https://accounts.obexal.com/.well-known/openid-configuration
curl https://accounts.obexal.com/.well-known/jwks.json

Le document de découverte annonce les capacités exactes de la plateforme :

Champ de découverteValeur
response_types_supportedcode (flux authorization code uniquement)
grant_types_supportedauthorization_code, refresh_token, client_credentials, urn:ietf:params:oauth:grant-type:token-exchange
code_challenge_methods_supportedS256
id_token_signing_alg_values_supportedRS256 (aucun autre algorithme n'est accepté)
scopes_supportedopenid, profile, email
token_endpoint_auth_methods_supportednone, client_secret_basic, client_secret_post, private_key_jwt
dpop_signing_alg_values_supportedES256, RS256
backchannel_logout_supportedtrue (voir plus bas)

Endpoints OAuth 2.1 et OIDC

MéthodeCheminRôleAuthentification
GET/.well-known/openid-configurationDocument de découverte OIDCAucune (public)
GET/.well-known/jwks.jsonClés publiques de signature (JWKS)Aucune (public)
GET/oauth/authorizeEndpoint d'autorisation (code + PKCE)Session navigateur (redirige vers la connexion si absente)
POST/oauth/parPushed authorization requests (RFC 9126)Authentification du client
POST/oauth/tokenToken endpoint (tous les grants)Authentification du client (voir plus bas)
GET/oauth/userinfoClaims OIDC de l'utilisateurJeton d'accès (schéma Bearer ou DPoP)
POST/oauth/introspectIntrospection de jeton (RFC 7662)Identifiants d'un client confidentiel uniquement
POST/oauth/revokeRévocation du refresh token (RFC 7009, toujours 200)Identifiants du client
GET/oauth/logoutDéconnexion initiée par le RP (end_session_endpoint)Session navigateur (optionnelle, idempotent)

/oauth/authorize accepte aussi un request_uri obtenu via /oauth/par (usage unique) ; les autres paramètres de requête sont alors ignorés. /oauth/logout accepte client_id, post_logout_redirect_uri (validée contre la liste enregistrée du client) et state.

Types de grant du token endpoint

POST /oauth/token prend un corps form-encoded et renvoie du JSON avec Cache-Control: no-store. Le paramètre grant_type sélectionne le flux :

grant_typeUsageParamètres spécifiques
authorization_codeConnecter un utilisateurcode (requis, usage unique), redirect_uri (correspondance exacte avec la requête d'authorize), code_verifier (requis, PKCE S256)
refresh_tokenRenouveler les jetons, avec rotation et détection de réutilisationrefresh_token (requis), scope (optionnel, sous-ensemble des scopes initiaux)
client_credentialsIdentité machine, sans utilisateurscope (optionnel, sous-ensemble des scopes du client) ; clients confidentiels uniquement, aucun refresh token émis
urn:ietf:params:oauth:grant-type:token-exchangeJetons délégués pour agents IA (RFC 8693)subject_token (requis), subject_token_type et requested_token_type (optionnels, URN access_token uniquement), scope (réduction de périmètre optionnelle), resource (audience cible optionnelle, RFC 8707)

L'authentification du client supporte client_secret_basic, client_secret_post, private_key_jwt (assertion signée, RFC 7523) et none pour les clients publics, qui reposent sur PKCE seul. Sur tout grant, un en-tête DPoP optionnel lie le jeton émis à la clé du client (claim cnf.jkt) et le token_type devient DPoP au lieu de Bearer. Voir Sécurité avancée des clients.

curl -X POST https://accounts.obexal.com/oauth/token \
  -d grant_type=client_credentials \
  -d client_id=svc-reporting \
  -d client_secret="$CLIENT_SECRET"
{"access_token": "eyJhbGciOiJSUzI1NiIs...", "token_type": "Bearer", "expires_in": 600, "scope": "reports:read"}

Seuls authorization_code et refresh_token renvoient un refresh token et, avec le scope openid, un ID token. Les réponses Token Exchange ajoutent issued_token_type. Les réponses d'erreur utilisent la forme OAuth (error, error_description) : voir Erreurs et limites, et Valider les jetons pour consommer ce que vous recevez.

Déconnexion back-channel

La déconnexion back-channel est émise, pas reçue : il n'existe aucun endpoint entrant de déconnexion. Quand la session d'un utilisateur se termine, Obexal envoie en POST un logout_token signé (JWT, typ: logout+jwt, RS256) à la backchannel_logout_uri enregistrée sur chaque application à laquelle l'utilisateur avait consenti. La déconnexion est indexée par sub, pas par session (backchannel_logout_session_supported: false). Voir Sessions et déconnexion.

Endpoints SAML 2.0

Dans les chemins ci-dessous, {tenant} est le slug de votre organisation.

Obexal comme fournisseur d'identité (SSO sortant, voir IdP SAML) :

MéthodeCheminRôleAuthentification
GET/saml/idp/{tenant}/metadataMétadonnées IdP (XML)Aucune (public)
GET, POST/saml/idp/{tenant}/ssoEndpoint SSO, initié par le SPSession navigateur (redirige vers la connexion si absente)
GET/saml/idp/{tenant}/apps/{appId}/ssoSSO initié par l'IdP pour une app enregistréeSession navigateur

Obexal comme service provider (SSO d'entreprise entrant, voir SP SAML) :

MéthodeCheminRôleAuthentification
GET/saml/{tenant}/metadataMétadonnées SP (XML)Aucune (public)
GET/saml/{tenant}/loginDémarre la connexion auprès de l'IdP d'entrepriseAucune (démarre le flux)
POST/saml/{tenant}/acsAssertion consumer serviceAssertion SAML signée par l'IdP
Note

Il n'existe aucun endpoint SAML Single Logout (SLO), ni entrant ni sortant.

SCIM 2.0

Le provisioning entrant est servi sous /scim/v2 (ressource Users uniquement), authentifié par un bearer token propre au tenant. La surface complète, le schéma d'attributs et les limites sont documentés dans la référence SCIM.