Fermer

mars 23, 2021

Comment personnaliser et valider le message Json pour le jeton d'accès de type Grant dans Apigee


Présentation

Ce cas d'utilisation décrit comment personnaliser et valider le message JSON pour les informations d'identification du client GrantType – AccessToken.

Qu'est-ce que les informations d'identification du client GrantType?

Client POST est un appel API à Apigee avec ID client et secret client pour récupérer le jeton d'accès à partir de l'application développeur enregistrée. En outre, le paramètre de requête grant_type = client_credentials doit être transmis dans la requête. Mais dans ce blog, nous allons envoyer clientId / secret et grantType dans la charge utile json.

Diagramme de séquence

 Sequencediagram

  • L'application client envoie une requête Json à Apigee edge pour récupérer le jeton d'accès. La requête contient clientId, clientSecret et grantType.
  • Données de la requête validées par rapport à la spécification OpenAPI (Swagger).
  • Si la validation échoue, la réponse d'erreur est envoyée.
  • Authentification de périphérie autre clientId et clientSecret.
  • Si l'authentification échoue, envoie réponse d'erreur.
  • Else edge renvoie la réponse de succès json personnalisée.

Applications requises pour travailler sur ce cas d'utilisation

  • Postman ou toute application cliente
  • APIGEE Edge

Définition du problème

Ce document aide à résoudre des problèmes techniques lors de la configuration de clientCredential grantType

Public visé

Personnes ayant des connaissances (développeur / administrateur) dans APIGEE EDGE.

Spécification Open API

Créez une spécification OpenAPI pour définir la structure du jeton d'accès de type grant API RESTful. Définissez client_id, client_secret et grant_Type comme élément de requête requis. access_token, published_at et expires_in sont des éléments de réponse de réussite.

 Openapispec

Proxy Configuration

Créez un proxy sans cible en utilisant la spécification API ouverte

 Étape 1: Développer-> Proxy-> Pas de cible- > Cliquez sur Utiliser les spécifications OpenAPI
Étape 2: définir le nom, le chemin de base et la description
Étape 3: Sélectionnez la stratégie comme PassThrough 

 Proxyconfig

Configurations de stratégie

OpenAPI Spec validation policy
OAS Validation policy pour valider le message json entrant par rapport à la spécification API ouverte.

Ajoutez la politique de validation de spécification OpenAPI et importez la spécification d'API ouverte (Swagger) pour valider le message d'entrée.

 Google - Jumpstart Your Cloud Journey with Google Cloud Platform

 Oas Jsonvalidation

Extract Variables policy
Ajouter une stratégie de variable d'extraction pour définir la variable de flux clientId / clientSecret / GratTypeas à partir du message d'entrée.

 Ev Flowvariable

Ci-dessous, l'extrait de code pour extraire la variable de flux,



 $. Client_id [19659038] $. Client_secret 


 $. Grant_type 

JavaScriptPolicy
Ajoutez une stratégie JavaScript pour définir clientId / clientSecret sur formparam et grantType sur queryparam. Parce que par défaut, la politique OAuth2 lit clientCredential à partir de.

 var username = context.getVariable ("clientId");
var mot de passe = context.getVariable ("clientSecret");
var granttype = context.getVariable ("grantType");
context.setVariable ("request.queryparam.grant_type", granttype);
context.setVariable ("request.formparam.client_id", nom d'utilisateur);
context.setVariable ("request.formparam.client_secret", mot de passe); 

Politique OAuth2
Ajoutez une politique Oauth2 pour générer un jeton d'accès. Cette stratégie vérifie les clientCredentails avant d'envoyer le jeton d'accès. Mettez à jour la configuration ci-dessous vers la politique oauth2,

 GenerateAccessToken 

 client_credentials 

 request.queryparam.grant_type 

request.queryparam.grant_type – Cette balise indique à la politique oauth2 de récupérer la valeur grantType de queryparam.grant_type

request.queryparam.grant_type – Cette balise indique à la politique oauth2 de récupérer la valeur grantType à partir du queryparam. ] – Cette balise indique à la politique oauth2 de ne pas générer la réponse automatiquement.

Assign Message Policy
Ajoutez une politique d'affectation de message pour créer une réponse de succès JSON personnalisée. Mettez à jour l'extrait de code ci-dessous avec la stratégie,


 200 
 OK 
 {
"access_token": "{oauthv2accesstoken.GenerateAccessTokenClient.access_token}",
"published_at": "{oauthv2accesstoken.GenerateAccessTokenClient.issued_at}",
"expires_in": "{oauthv2accesstoken.GenerateAccessTokenClient.expires_in}"
}


Ajoutez une autre stratégie d'affectation pour gérer la réponse d'erreur JSON personnalisée. Mettez à jour l'extrait de code ci-dessous vers la stratégie,


 500 
 Erreur interne du serveur 
 {
"ErrorResponse": {
"errorMessage": "{escapeJSON (error.message)}",
"errorCode": "20030"
}
}


 

Fault Rule
Ajoutez une étape DefaultFaultRule pour gérer les cas d'erreur. Il ne sera exécuté que s'il y a une exception / erreur dans le flux proxy. Reportez-vous à la stratégie de message d'affectation de réponse d'erreur pour envoyer une réponse d'erreur personnalisée.




 AM-ErrorResponse 


 …….
………… ..  ProxyEndpoint >

Flow Design

 Flowdesign

Deploy and Test

Déployez le proxy et testez à l'aide de la collection postman.

Happy Path Scenario [19659029]  Happypath

Erreur de validation Json
La politique OAS valide la demande entrante et renvoie l'erreur de validation pour le champ grant_type.
 Failjsonvalidation

Authentification Erreur d'échec
La stratégie Oauth2 valide les informations d'identification client des utilisateurs enregistrés. Si les informations d'identification du client ne sont pas valides, l'erreur est générée.
 Failauth

Conclusion

Ce blog vous a montré comment personnaliser et valider le message JSON pour que les informations d'identification du client GrantType récupèrent le jeton d'accès. Pour plus d'informations sur les informations d'identification du client grantType, reportez-vous à la documentation apigee.

Lien de référence: https://docs.apigee.com/api-platform/security/oauth/oauth-20-client-credentials-grant -type






Source link