Aller au contenu principal

Protégez votre API

Si vous n'avez pas besoin de politiques de contrôle d'accès flexibles et granulaires, vous pouvez simplement protéger votre API directement. Nous vous guiderons à travers un diagramme de séquence et les étapes nécessaires pour intégrer le contrôle d'accès dans votre application.

Dans ce tutoriel

  • Point de terminaison Logto : https://tenant-id.logto.app
  • Application cliente : https://client.example.org
  • Serveur de ressources API : https://resource-server.com/api

Vous devez remplacer ceux-ci par vos points de terminaison réels lors de la mise en œuvre.

Requête d’authentification

Fournissez une liste de paramètres d'indicateur de ressource dans une Requête d’authentification. Cela indiquera toutes les ressources protégées que l'utilisateur peut demander.

GET https://tenant-id.logto.app/oidc/auth?response_type=code
&client_id=s6BhdRkqt3
&state=tNwzQ87pC6llebpmac_IDeeq-mCR2wLDYljHUZUAWuI
&redirect_uri=https%3A%2F%2Fclient.example.org%2Fcb
&resource=https%3A%2F%2Fresource-server.com%2Fapi
&scope=read%20write

Logto validera et stockera ces indicateurs de ressource. Un authorization_code sera accordé et retourné avec des portées restreintes à ces ressources spécifiées.

Exemple de configuration du SDK Logto :

const config: LogtoConfig = {
// ...autres configurations
resources: ['https://resource-server.com/api'],
scopes: ['read', 'write'],
};

Requête de jeton

Lorsque le paramètre de ressource est présent sur une Requête de jeton avec le authorization_code accordé ci-dessus, il spécifiera l'audience de la ressource API cible du jeton d’accès demandé.

POST https://tenant-id.logto.app/oidc/token HTTP/1.1
Content-Type: application/x-www-form-urlencoded

grant_type=authorization_code&redirect_uri=https%3A%2F%2Fclient.example.org%2Fcb&code=10esc29BWC2qZB0acc9v8zAv9ltc2pko105tQauZ&resource=https%3A%2F%2Fresource-server.com%2Fapi

Un jeton d’accès chiffré avec l'audience restreinte à cette ressource demandée sera accordé par Logto. Le jeton contient toutes les données nécessaires pour représenter le statut d’autorisation de la requête. Par exemple, l'identité et le rôle de l'utilisateur de la requête, l'audience du jeton et le temps d'expiration.

Exemple de code du SDK Logto :

const accessToken = await logtoClient.getAccessToken('https://resource-server.com/api');

La charge utile de accessToken contiendra :

{
iss: '<your-logto-endpoint>/oidc',
aud: 'https://resource-server.com/api',
scope: 'read write'
}

Requête à la ressource API

L'utilisateur client a envoyé une requête à la ressource API en présentant le access_token donné dans l'en-tête Authorization.

GET https://resource-server.com/api/users
Authorization: Bearer eyJhbGciOiJIUz...

Logto suit le protocole standard d’autorisation basé sur les jetons pour protéger vos ressources API. Pour en savoir plus sur OAuth 2.0, veuillez vous référer au document officiel d'OAuth 2.0.

Valider les jetons d’autorisation pour les requêtes API

Logto émet un jeton d’autorisation au format standard JWT pour chaque requête API autorisée. Le jeton est chiffré et signé en tant que jeton JWS.

Comprendre le jeton JWS

Un jeton JWS encodé est construit en trois parties :

  • En-tête JOSE : Déclare le type de code et l'algorithme de codage
  • Charge utile JWS : Inclut toutes les revendications du jeton
  • Signature JWS : Signature signée avec JWK

Un schéma standard de charge utile JWS émis par Logto : (les revendications peuvent varier, en fonction de votre configuration OIDC personnalisée)

clédescription
jtiID JWT unique
subsujet, généralement user-id
iathorodatage du jeton émis à
exphorodatage du jeton expirant à
client_idid de l'application
issidentité de l’émetteur du jeton
audaudience du jeton
scopeportées (permissions) du jeton
remarque

Pour le développement, pour inspecter visuellement un jeton JWT, vous pouvez visiter jwt.io pour décoder et vérifier les jetons que vous avez reçus. Soyez prudent ou n'utilisez jamais les jetons d'un environnement de production. Comme il s'agit d'un service en ligne public fourni par un tiers, votre jeton peut être exposé.

Valider le jeton d’autorisation

  1. Validation d'un JWT
  2. Validation de la signature JWS
  3. L’émetteur du jeton est https://<your-logto-domain>/oidc (émis par votre serveur d'authentification Logto)
  4. L’audience du jeton est égale à l'indicateur de ressource du récepteur actuel enregistré dans la console d'administration Logto
  5. Le jeton est dans son temps d'expiration
  6. (RBAC uniquement) Le jeton a la scope souhaitée

Il existe diverses bibliothèques et packages open-source qui peuvent vous aider à valider et décoder facilement un jeton JWT. Vous pouvez en choisir un et l'intégrer à votre application backend en fonction du langage et du framework que vous utilisez. Veuillez consulter certains des exemples que nous avons :

Référence

Logto utilise le protocole d’autorisation OAuth 2.0 basé sur le code pour sécuriser votre requête API. Si vous êtes intéressé par la stratégie qui le sous-tend, référez-vous à la spécification d'OAuth 2.0 pour plus de détails.