mTLS dans OAuth/OIDC
Les flux /OIDC par défaut ne garantissent pas toujours une sécurité optimale en raison des problèmes suivants :- L’utilisation d’un secret client partagé comme méthode d’authentification client.
- La possibilité qu’un jeton d’accès soit utilisé par des parties non autorisées.

/oauth/token
sur le serveur d’autorisation au moyen d’une connexion mTLS, le jeton d’accès généré contient des informations permettant au serveur de ressources de vérifier que le certificat TLS du client correspond à celui associé au jeton d’accès.

mTLS à Auth0
mTLS pour Auth0 s’appuie sur des domaines personnalisés et exploite l’infrastructure mTLS existante du client pour effectuer le provisionnement et la vérification des certificats. Les appels client authentifiés à Auth0, qui nécessitent habituellement un secret client, sont d’abord redirigés vers le périphérique client. Cela est déjà en place pour les domaines personnalisés utilisant des certificats gérés par le client. Le client Edge effectue la négociation mTLS avec le client et valide son certificat. Une fois le certificat client validé, la requête est ensuite transmise au domaine périphérique du locataire sur Auth0, en incluant le certificat client validé dans un en-tête HTTP avec la clé correctecname-api-key
, conformément à la fonctionnalité des domaines personnalisés.

Fait un appel au serveur d’autorisation
Étant donné que mTLS assure à la fois l’authentification du client et la liaison du jeton d’accès, il est essentiel que le client sache si ces fonctionnalités sont activées sur le serveur d’autorisation. De plus, les points de terminaison mTLS et non mTLS d’un serveur d’autorisation peuvent être exposés sur des domaines distincts. Pour obtenir les détails de configuration du serveur d’autorisation, le client envoie une requête GET au point de terminaison OpenID Connect Discovery :https://<custom-domain>/.well-known/openid-configuration
Une réponse réussie retourne le document de découverte OIDC ou un objet JSON détaillant les propriétés et points de terminaison du serveur d’autorisation, y compris ceux associés à mTLS.
Si l’authentification client mTLS est activée, le document de découverte OIDC inclut le token_endpoint_auth_methods_supported
property, which contains either tls_client_auth
ou self_signed_tls_client_auth
:
tls_client_certificate_bound_access_tokens
sur true
:
mtls_endpoint_aliases
, qui contient une liste de points de terminaison compatibles avec mTLS. Pour les clients qui prennent en charge mTLS, les points de terminaison répertoriés sous mtls_endpoint_aliases
ont priorité sur les mêmes points de terminaison exposés à l’extérieur de mtls_endpoint_aliases
.
Dans l’exemple de code suivant, la propriété du token_endpoint
est exposée deux fois. Le point de terminaison à utiliser pour les appels mTLS est répertorié sous mtls_endpoint_aliases
, ou https://mtls.auth.bank.com/oauth/token
:
mtls_endpoint_aliases
, utilisez le même point de terminaison répertorié en dehors de mtls_endpoint_aliases
. Dans l’exemple ci-dessus, pushed_authorization_request_endpoint
n’est pas répertorié sous mtls_endpoint_aliases
. Par conséquent, utilisez le pushed_authorization_request_endpoint
exposé à l’extérieur de mtls_endpoint_aliases
, ou https://auth.bank.com/oauth/par
.
Pour plus d’informations, veuillez consulter la section RFC 8705 sur les alias de points de terminaison.
Appel au serveur d’autorisation
Une fois qu’un client a reçu un jeton d’accès, il peut accéder aux ressources protégées sur un serveur de ressources. Si la liaison de jeton mTLS est activée, le serveur d’autorisation retourne le document de découverte OIDC, qui inclut la propriététls_client_certificate_bound_access_tokens
.
Lorsque le client appelle le serveur de ressources avec un jeton d’accès lié à mTLS, le serveur de ressources demande un certificat mTLS au client pendant l’établissement de liaison TLS. Le serveur de ressources doit rejeter les demandes avec un jeton d’accès qui ne correspond pas à ce certificat client avec un code d’état HTTP 401 et un code d’erreur invalid_token
. Pour en savoir plus, veuillez consulter Configurer le serveur de ressources pour la contrainte de l’expéditeur.