Endpoints et clés
Issuer, endpoints OIDC, JWKS et algorithmes de signature d'Oreus.
Issuer
https://oreus-sso.dev2.dev-id.fr/oidcL'endpoint du tenant est https://oreus-sso.dev2.dev-id.fr ; l'issuer OIDC vit
sous /oidc. La confusion entre les deux est la première cause d'échec de
découverte.
Découverte
https://oreus-sso.dev2.dev-id.fr/oidc/.well-known/openid-configurationUn client doit lire ce document plutôt que coder les URL en dur : elles peuvent changer, l'issuer non.
Endpoints
| Rôle | URL |
|---|---|
| Autorisation | https://oreus-sso.dev2.dev-id.fr/oidc/auth |
| Jetons | https://oreus-sso.dev2.dev-id.fr/oidc/token |
| UserInfo | https://oreus-sso.dev2.dev-id.fr/oidc/me |
| JWKS | https://oreus-sso.dev2.dev-id.fr/oidc/jwks |
| Déconnexion | https://oreus-sso.dev2.dev-id.fr/oidc/session/end |
| Révocation | https://oreus-sso.dev2.dev-id.fr/oidc/token/revocation |
| Introspection | https://oreus-sso.dev2.dev-id.fr/oidc/token/introspection |
userinfo_endpoint est /oidc/me, et non /oidc/userinfo comme chez beaucoup
de fournisseurs d'identité. Raison de plus pour passer par la découverte.
JWKS
https://oreus-sso.dev2.dev-id.fr/oidc/jwksC'est là que le serveur de ressources récupère les clés publiques pour vérifier la signature d'un jeton entrant. Trois règles :
- Mettre les clés en cache, en les rafraîchissant sur
kidinconnu. Les interroger à chaque requête fait d'Oreus un point de défaillance. - Sélectionner la clé par
kid, jamais la première du jeu. - Épingler l'algorithme attendu, sans jamais lire
algdepuis le jeton : c'est ce qui ouvre l'attaquealg: none.
Algorithmes
| Valeur | |
|---|---|
| Signature des id_token | ES384 |
| PKCE | S256 (seul supporté) |
ES384 est de la courbe elliptique P-384 : la bibliothèque de vérification doit
la gérer, toutes ne le font pas par défaut.
Ce qu'un serveur de ressources doit vérifier
Décoder un JWT ne le valide pas. Sur chaque jeton entrant :
- Signature valide contre le JWKS, avec le
kiddu jeton isségal àhttps://oreus-sso.dev2.dev-id.fr/oidcaudégal à l'identifiant de votre ressource APIexpnon dépassé,nbfatteintscopecouvrant l'opération demandéeorganization_idcohérent avec la ressource visée, pour un jeton d'organisation
Décoder un JWT ne le valide pas : une bibliothèque de vérification de signature est indispensable. N'accordez jamais un accès sur le simple décodage des claims.
Scopes
| Scope | Effet |
|---|---|
openid | Obligatoire. Donne l'id_token et l'accès à UserInfo. |
profile | Nom, nom d'utilisateur, avatar. |
email | Adresse e-mail et son état de vérification. |
offline_access | Refresh token. Nécessite prompt=consent. |
urn:logto:scope:organizations | Fait apparaître le claim organizations. |
urn:logto:scope:organization_roles | Rôles de l'utilisateur dans ses organisations. |
Les scopes propres à votre API (read:organization, etc.) s'ajoutent à cette
liste et doivent être déclarés sur la ressource côté Oreus.