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 |
---|---|
jti | ID JWT unique |
sub | sujet, généralement user-id |
iat | horodatage du jeton émis à |
exp | horodatage du jeton expirant à |
client_id | id de l'application |
iss | identité de l’émetteur du jeton |
aud | audience du jeton |
scope | portées (permissions) du jeton |
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
- Validation d'un JWT
- Validation de la signature JWS
- L’émetteur du jeton est
https://<your-logto-domain>/oidc
(émis par votre serveur d'authentification Logto) - L’audience du jeton est égale à l'indicateur de ressource du récepteur actuel enregistré dans la console d'administration Logto
- Le jeton est dans son temps d'expiration
- (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.