Documentation
Connexion

Le flow

Authorization Code + PKCE, puis échange contre un JWT d'organisation.

Oreus implémente Authorization Code Flow avec PKCE. Aucun autre flow n'est à utiliser : implicit est déprécié, et client_credentials ne concerne que les services agissant pour eux-mêmes, sans utilisateur.

Vue d'ensemble

Les redirections sont traversées par le navigateur. Le dernier échange, lui, est un appel direct : le code_verifier — et le client_secret s'il y en a un — n'apparaissent jamais dans une URL.

Requête d'autorisation

GET https://oreus-sso.dev2.dev-id.fr/oidc/auth
  ?client_id=<APP_ID>
  &redirect_uri=<REDIRECT_URI>
  &response_type=code
  &scope=openid profile email offline_access urn:logto:scope:organizations
  &state=<aléatoire>
  &nonce=<aléatoire>
  &code_challenge=<BASE64URL(SHA256(code_verifier))>
  &code_challenge_method=S256
  &resource=<API_RESOURCE>
  &prompt=consent

Trois paramètres méritent une explication :

  • resource — indicateur de ressource (RFC 8707). Sans lui, l'access token ne vaut que pour userinfo, pas pour l'API.
  • prompt=consent — obligatoire pour obtenir un refresh token : sans lui, le scope offline_access est ignoré silencieusement.
  • state — à vérifier au retour. C'est la protection CSRF du flow.

Échange du code

POST https://oreus-sso.dev2.dev-id.fr/oidc/token
Content-Type: application/x-www-form-urlencoded

grant_type=authorization_code
&code=<CODE>
&redirect_uri=<REDIRECT_URI>
&client_id=<APP_ID>
&code_verifier=<VERIFIER>

Un client confidentiel ajoute client_secret. Le code est à usage unique et expire en une minute environ.

Jeton d'organisation

C'est l'étape que l'on oublie. L'access token issu du flow porte l'audience de la ressource, mais pas de contexte d'organisation. L'API en a besoin.

POST https://oreus-sso.dev2.dev-id.fr/oidc/token
Content-Type: application/x-www-form-urlencoded

grant_type=refresh_token
&client_id=<APP_ID>
&refresh_token=<REFRESH_TOKEN>
&organization_id=<ORG_ID>
&resource=<API_RESOURCE>

Les identifiants d'organisation disponibles se lisent dans le claim organizations de l'access token ou de l'id_token.

Chaque échange renvoie un nouveau refresh token et invalide l'ancien. Il faut le reporter dans la session, sinon l'échange suivant rejoue un jeton consommé — et Oreus révoque alors toute la famille de jetons.

Déconnexion

GET https://oreus-sso.dev2.dev-id.fr/oidc/session/end
  ?client_id=<APP_ID>
  &id_token_hint=<ID_TOKEN>
  &post_logout_redirect_uri=<POST_LOGOUT_URI>

Effacer la session locale ne suffit pas : sans cet appel, la session reste ouverte côté Oreus et la reconnexion est instantanée.

Sur cette page