Passer au contenu principal

OAuth 2.0

Introduction

Casdoor prend en charge l'utilisation de l'Access Token pour authentifier les clients. Dans cette section, nous allons vous montrer comment obtenir un Access Token, comment vérifier un Access Token et comment utiliser un Access Token.

Comment obtenir un Access Token

Il y a deux façons d'obtenir un Access Token : vous pouvez utiliser les SDKs Casdoor. Pour des informations détaillées, veuillez vous référer à la documentation SDK. Ici, nous allons principalement vous montrer comment utiliser l'API pour obtenir l'Access Token.

Casdoor prend en charge quatre types d'autorisation OAuth : Authorization Code Grant, Implicit Grant, Resource Owner Password Credentials Grant, et Client Credentials Grant.

Pour des raisons de sécurité, l'application Casdoor a le mode code d'autorisation activé par défaut. Si vous avez besoin d'utiliser d'autres modes, veuillez aller à l'application appropriée pour le configurer.

Types d'autorisation

Authorization Code Grant

Tout d'abord, redirigez vos utilisateurs vers :

https://<CASDOOR_HOST>/login/oauth/authorize?
client_id=CLIENT_ID&
redirect_uri=REDIRECT_URI&
response_type=code&
scope=openid&
state=STATE

Portées disponibles

NomDescription
openid (no scope)sub (id de l'utilisateur), iss (émetteur), et aud (audience)
profileinformations du profil utilisateur, y compris le nom, displayName, et avatar
emailadresse e-mail de l'utilisateur
addressadresse de l'utilisateur
phonenuméro de téléphone de l'utilisateur
info

Votre application OAuth peut demander les portées lors de la redirection initiale. Vous pouvez spécifier plusieurs portées en les séparant par un espace en utilisant %20 :

https://<CASDOOR_HOST>/login/oauth/authorize?
client_id=...&
scope=openid%20email

Pour plus de détails, veuillez consulter la norme OIDC

Après que votre utilisateur se soit authentifié avec Casdoor, Casdoor le redirigera vers :

https://REDIRECT_URI?code=CODE&state=STATE

Maintenant que vous avez obtenu le code d'autorisation, faites une requête POST à :

https://<CASDOOR_HOST>/api/login/oauth/access_token

dans votre application backend :

{
"grant_type": "authorization_code",
"client_id": ClientId,
"client_secret": ClientSecret,
"code": Code,
}

Vous obtiendrez la réponse suivante :

{
"access_token": "eyJhb...",
"id_token": "eyJhb...",
"refresh_token": "eyJhb...",
"token_type": "Bearer",
"expires_in": 10080,
"scope": "openid"
}
note

Casdoor prend également en charge la fonctionnalité PKCE. Lors de l'obtention du code d'autorisation, vous pouvez ajouter deux paramètres pour activer PKCE :

&code_challenge_method=S256&code_challenge=VOTRE_CHALLENGE

Lors de l'obtention du token, vous devez passer le paramètre code_verifier pour vérifier PKCE. Il est à noter qu'avec PKCE activé, Client_Secret n'est pas requis, mais si vous le passez, il doit être la valeur correcte.

Implicit Grant

Peut-être que votre application n'a pas de backend, et vous devez utiliser Implicit Grant. Tout d'abord, vous devez vous assurer que vous avez Implicit Grant activé, puis redirigez vos utilisateurs vers :

https://<CASDOOR_HOST>/login/oauth/authorize?client_id=CLIENT_ID&redirect_uri=REDIRECT_URI&response_type=token&scope=openid&state=STATE

Après que votre utilisateur se soit authentifié avec Casdoor, Casdoor le redirigera vers :

https://REDIRECT_URI/#access_token=ACCESS_TOKEN

Casdoor prend également en charge le id_token comme response_type, qui est une fonctionnalité d'OpenID.

Resource Owner Password Credentials Grant

Si votre application n'a pas de frontend qui redirige les utilisateurs vers Casdoor, alors vous pourriez avoir besoin de ceci.

Tout d'abord, vous devez vous assurer que vous avez Password Credentials Grant activé et envoyer une requête POST à :

https://<CASDOOR_HOST>/api/login/oauth/access_token
{
"grant_type": "password",
"client_id": ClientId,
"client_secret": ClientSecret,
"username": Username,
"password": Password,
}

Vous obtiendrez la réponse suivante :

{
"access_token": "eyJhb...",
"id_token": "eyJhb...",
"refresh_token": "eyJhb...",
"token_type": "Bearer",
"expires_in": 10080,
"scope": "openid"
}

Client Credentials Grant

Vous pouvez également utiliser Client Credentials Grant lorsque votre application n'a pas de frontend.

Tout d'abord, vous devez vous assurer que vous avez Client Credentials Grant activé et envoyer une requête POST à https://<CASDOOR_HOST>/api/login/oauth/access_token :

{
"grant_type": "client_credentials",
"client_id": ClientId,
"client_secret": ClientSecret,
}

Vous obtiendrez la réponse suivante :

{
"access_token": "eyJhb...",
"id_token": "eyJhb...",
"refresh_token": "eyJhb...",
"token_type": "Bearer",
"expires_in": 10080,
"scope": "openid"
}

Il est important de noter que l'AccessToken obtenu de cette manière diffère des trois premiers en ce qu'il correspond à l'application plutôt qu'à l'utilisateur.

Refresh Token

Peut-être que vous souhaitez mettre à jour votre Access Token, alors vous pouvez utiliser le refreshToken que vous avez obtenu ci-dessus.

Tout d'abord, vous devez définir le temps d'expiration du Refresh Token dans l'application (par défaut c'est 0 heures), et envoyer une requête POST à https://<CASDOOR_HOST>/api/login/oauth/refresh_token

{
"grant_type": "refresh_token",
"refresh_token": REFRESH_TOKEN,
"scope": SCOPE,
"client_id": ClientId,
"client_secret": ClientSecret,
}

Vous obtiendrez une réponse comme celle-ci :

{
"access_token": "eyJhb...",
"id_token": "eyJhb...",
"refresh_token": "eyJhb...",
"token_type": "Bearer",
"expires_in": 10080,
"scope": "openid"
}

Comment vérifier l'Access Token

Casdoor prend actuellement en charge le point de terminaison d'introspection de token. Ce point de terminaison est protégé par une authentification de base (ClientId:ClientSecret).

POST /api/login/oauth/introspect HTTP/1.1
Host: CASDOOR_HOST
Accept: application/json
Content-Type: application/x-www-form-urlencoded
Authorization: Basic Y2xpZW50X2lkOmNsaWVudF9zZWNyZXQ=

token=ACCESS_TOKEN&token_type_hint=access_token

Vous recevrez la réponse suivante :

{
"active": true,
"client_id": "c58c...",
"username": "admin",
"token_type": "Bearer",
"exp": 1647138242,
"iat": 1646533442,
"nbf": 1646533442,
"sub": "7a6b4a8a-b731-48da-bc44-36ae27338817",
"aud": [
"c58c..."
],
"iss": "http://localhost:8000"
}

Comment utiliser AccessToken

Vous pouvez utiliser AccessToken pour accéder aux API Casdoor qui nécessitent une authentification.

Par exemple, il existe deux façons différentes de demander /api/userinfo.

Type 1 : Paramètre de requête

https://<CASDOOR_HOST>/api/userinfo?accessToken=<your_access_token>

Type 2 : Token porteur HTTP

https://<CASDOOR_HOST>/api/userinfo with the header: "Authorization: Bearer <your_access_token>"

Casdoor analysera l'access_token et retournera les informations utilisateur correspondantes selon le scope. Vous recevrez la même réponse, qui ressemble à ceci :

{
"sub": "7a6b4a8a-b731-48da-bc44-36ae27338817",
"iss": "http://localhost:8000",
"aud": "c58c..."
}

Si vous attendez plus d'informations sur l'utilisateur, ajoutez scope lors de l'obtention de l'AccessToken à l'étape Authorization Code Grant.

Différences entre les API userinfo et get-account

  • /api/userinfo : Cette API retourne des informations utilisateur dans le cadre du protocole OIDC. Elle fournit des informations limitées, incluant uniquement les informations de base définies dans les normes OIDC. Pour une liste des portées disponibles prises en charge par Casdoor, veuillez vous référer à la section portées disponibles.

  • /api/get-account : Cette API récupère l'objet utilisateur pour le compte actuellement connecté. C'est une API spécifique à Casdoor qui vous permet d'obtenir toutes les informations de l'utilisateur dans Casdoor.