Points d’extrémité définis par OpenID Connect
Le point d’extrémité d’autorisation et le point d’extrémité de jeton sont tous deux situés sur le serveur d’autorisation (ce serveur).
Le point d’extrémité de redirection est situé dans l’application cliente. Il revient donc à l’administrateur de cette application de développer le code du point d’extrémité de redirection.
La spécification d’OpenID Connect ne décrit pas comment l’URI de ces points d’extrémité est définie. C’est à chaque développeur de décider. Cependant, l’observation de différents serveurs permet de dégager des options courantes, que nous avons adoptées.
Notons que OpenID Connect prévoit la découverte des points d’extrémités, ce que OAuthSD implémente à cette URL : [http://oa.dnc.global/.well-known/openid-configuration]
Voici comment OAuthSD définit les points d’extrémité du protocole OpenID Connect :
Point d’extrémité d’autorisation (Authorization Endpoint)
https://oa.dnc.global/authorize
Usage dans le cadre du flux Autorisation via un code : OpenID Connect : Obtenir une autorisation pour l’application cliente
Le point d’extrémité d’autorisation est le point d’extrémité sur le serveur d’autorisation auquel l’agent de l’utilisateur final (user-agent : le navigateur ou l’application mobile etc.) est redirigé par l’application cliente, pour permettre à l’utilisateur final de s’authentifier et d’accorder les autorisations demandées par l’application cliente.
Lors du traitement de la demande d’authentification, le serveur crée un jeton d’accès et un jeton d’identification. Ces jetons seront associés à l’ID de l’utilisateur final, ce qui ouvre une notion de session.
Dans le cas du flux d’autorisation via un code (celui qui nous intéresse le plus), à ce stade, il n’est retourné qu’un code d’autorisation de durée de vie très courte [1]. Les jetons ne seront retournés qu’en réponse à l’appel du point d’extrémité token, dans une liaison serveur-serveur, ce qui fonde la sécurité de ce flux.
Dans le cas des flux implicites et hybrides, utilisés pour des applications sans serveur (back-end), les jetons sont directement retournés dans la réponse et sont donc visibles par l’agent de l’utilisateur, ce qui est considéré comme une faiblesse de ces flux.
Point d’extrémité de redirection, ou URI de retour à l’application cliente (Redirection Endpoint)
Le point d’extrémité de redirection est le point d’extrémité dans l’application cliente vers lequel l’agent de l’utilisateur est redirigé, après avoir obtenu l’autorisation au point d’extrémité d’autorisation. Cet URI est défini par l’administrateur d’une application cliente quand il l’inscrit sur ce serveur. Voir : OpenID Connect : Lier une application cliente au serveur OAuthSD. Ce point d’extrémité pourrait être distinct de celui du protocole OAuth 2.0 car OpenID Connect prévoit des échanges différents et requiert que le jeton obtenu soit vérifié par l’application cliente. Cet article explique comment faire : OpenID Connect : Exemples complets du flux d’Autorisation via un code puis requête UserInfo
Point d’extrémité de jeton (Token Endpoint)
https://oa.dnc.global/token
Usage dans le cadre du flux Autorisation via un code : OpenID Connect : Obtenir les jetons d’accès
Le point d’extrémité de jeton est le point d’extrémité sur le serveur d’autorisation auquel s’adresse l’application cliente, avec le code d’autorisation et l’ID client, pour obtenir un jeton d’accès et un jeton d’identité ou rafraîchir des jetons ayant expiré.
Le jeton d’accès est utilisé pour effectuer des appels authentifiés vers une API sécurisée, tandis que le jeton d’identification contient des attributs de profil utilisateur représentés sous la forme de déclarations (claims). Les deux JWT ont une date d’expiration indiquée par la revendication exp (parmi d’autres mesures de sécurité, comme la signature).
Point d’extrémité d’introspection (Introspection Endpoint)
https://oa.dnc.global/introspect
Usage : Demande d’introspection.
La "norme" OpenID Connect ne définit pas l’introspection. En effet, dans une approche simpliste, OpenID Connect ne protège que les données UserInfo qui, étant situées sur le même serveur d’authentification, ne nécessitent pas l’introspection.
Mais si on souhaite utiliser OpenID Connect pour accéder à des données protégées situées sur un serveur de ressource distinct du serveur d’authentification, l’introspection est une des deux méthodes applicables pour permettre à ce serveur de valider le jeton JWT. La problématique générale est exposée ici : Validation du jeton par une ressource protégée.
Notons que l’introspection n’est pas une particularité d’OAuthSD, d’autres implémentations offrant également cette fonctionnalité.
Point d’extrémité d’informations sur l’utilisateur final (UserInfo)
https://oa.dnc.global/userinfo
Pour réaliser l’authentification, le protocole OpenID Connect permet à une application cliente d’accéder à l’identité de l’utilisateur final ayant accordé l’autorisation, ainsi qu’à différentes informations selon le scope passé dans la requête.
Usage :
Demande d’informations sur l’utilisateur (UserInfo Endpoint),
Réponse UserInfo.
Références :
UserInfo Endpoint
Point d’extrémité d’informations sur les clefs (Keys Endpoint)
Ce point permet à un serveur de ressource d’accéder à la clé publique qui lui permettra de valider le jeton d’identité, comme exposé dans cet article : Validation du jeton par une ressource protégée.
https://oa.dnc.global/keys
Ce sujet est traité plus en détail ici : API OpenId Connect : Point d’extrémité d’informations sur les clefs (Keys Endpoint)
Point d’extrémité de déconnexion (Logout Endpoint)
https://oa.dnc.global/logout.php
Ce point permet la déconnexion de l’utilisateur au niveau du serveur de toutes ses sessions sécurisées. Si un cookie SLI avait été généré, il est détruit, interdisant ainsi le rafraîchissement automatique des sessions de l’utilisateur ouvertes à partir d’autres applications.
L’appel de Logout se fait exactement comme Introspect, avec un jeton d’identité valide.
Découverte des points d’extrémité
Conformément à la spécification OpenID Connect Discovery 1.0, OAuthSD expose ses métadonnées à l’URI :
https://oa.dnc.global/.well-known/openid-configuration
Ce sujet est traité plus en détail ici : API OpenID Connect : Découverte.