Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
S’APPLIQUE À : tous les niveaux de Gestion des API
La validate-jwt stratégie applique l’existence et la validité d’un jeton web JSON pris en charge (JWT) fourni par un fournisseur d’identité. Le JWT peut être extrait à partir d’un en-tête HTTP spécifié, extrait à partir d’un paramètre de requête spécifié, ou correspondant à une valeur spécifique.
Remarque
Utilisez la stratégie validate-azure-ad-token pour valider un JWT fourni par Microsoft Entra.
Remarque
Définissez les éléments enfants et de stratégie dans l’ordre fourni dans l’instruction de stratégie. Pour vous aider à configurer cette stratégie, le portail fournit un éditeur guidé basé sur des formulaires. En savoir plus sur comment définir ou modifier des stratégies du service Gestion des API.
Instruction de la stratégie
<validate-jwt
header-name="name of HTTP header containing the token (alternatively, use query-parameter-name or token-value attribute to specify token)"
query-parameter-name="name of query parameter used to pass the token (alternative, use header-name or token-value attribute to specify token)"
token-value="expression returning the token as a string (alternatively, use header-name or query-parameter attribute to specify token)"
failed-validation-httpcode="HTTP status code to return on failure"
failed-validation-error-message="error message to return on failure"
require-expiration-time="true | false"
require-scheme="scheme"
require-signed-tokens="true | false"
clock-skew="allowed clock skew in seconds"
output-token-variable-name="name of a variable to receive a JWT object representing successfully validated token">
<openid-config url="full URL of the configuration endpoint, for example, https://login.constoso.com/openid-configuration" validate-connectivity="true | false"/>
<issuer-signing-keys>
<key id="kid-claim" certificate-id="mycertificate" n="modulus" e="exponent">Base64 encoded signing key</key>
<!-- if there are multiple keys, then add additional key elements -->
</issuer-signing-keys>
<decryption-keys>
<key certificate-id="mycertificate">Base64 encoded signing key</key>
<!-- if there are multiple keys, then add additional key elements -->
</decryption-keys>
<audiences>
<audience>audience string</audience>
<!-- if there are multiple possible audiences, then add additional audience elements -->
</audiences>
<issuers>
<issuer>issuer string</issuer>
<!-- if there are multiple possible issuers, then add additional issuer elements -->
</issuers>
<required-claims>
<claim name="name of the claim as it appears in the token" match="all | any" separator="separator character in a multi-valued claim">
<value>claim value as it is expected to appear in the token</value>
<!-- if there is more than one allowed value, then add additional value elements -->
</claim>
<!-- if there are multiple possible allowed claim, then add additional claim elements -->
</required-claims>
</validate-jwt>
Attributs
| Attribut | Descriptif | Obligatoire | Par défaut |
|---|---|---|---|
| header-name | Nom de l’en-tête HTTP contenant le jeton. Les expressions de stratégie sont autorisées. | L’un des header-nameou query-parameter-nametoken-value doit être spécifié. |
N/A |
| query-parameter-name | Nom du paramètre de la requête contenant le jeton. Les expressions de stratégie sont autorisées. | L’un des header-nameou query-parameter-nametoken-value doit être spécifié. |
N/A |
| token-value | Expression retournant une chaîne contenant le jeton. Vous ne devez pas retourner Bearer dans le cadre de la valeur du jeton. Les expressions de stratégie sont autorisées. |
L’un des header-nameou query-parameter-nametoken-value doit être spécifié. |
N/A |
| échec de la validation-httpcode | Code d’état HTTP à renvoyer si le JWT n’est pas validé. Les expressions de stratégie sont autorisées. | Non | 401 |
| échec de la validation-error-message | Message d’erreur à renvoyer dans le corps de la réponse HTTP si le JWT n’est pas validé. Les éventuels caractères spéciaux de ce message doivent être correctement placés dans une séquence d’échappement. Les expressions de stratégie sont autorisées. | Non | Le message d’erreur par défaut dépend du problème de validation, par exemple « JWT absent ». |
| require-expiration-time | Propriété booléenne. Spécifie si une revendication d’expiration est requise dans le jeton. Les expressions de stratégie sont autorisées. | Non | vrai |
| require-scheme | Le nom du schéma de jeton, par ex. « Support ». Lorsque cet attribut est défini, la stratégie garantit que le schéma spécifié est présent dans la valeur d’en-tête d’autorisation. Les expressions de stratégie sont autorisées. | Non | N/A |
| exiger des jetons signés | Propriété booléenne. Spécifie si un jeton doit être signé. Les expressions de stratégie sont autorisées. | Non | vrai |
| horloge-asymétrie | Intervalle de temps. Permet de spécifier l’écart maximal de durée estimée entre les horloges système de l’émetteur du jeton et l’instance de gestion des API. Les expressions de stratégie sont autorisées. | Non | 0 seconde |
| output-token-variable-name | Chaîne. Nom de la variable de contexte qui recevra la valeur du jeton en tant qu’objet de type Jwt lors de la validation réussie du jeton. Les expressions de stratégie ne sont pas autorisées. |
Non | N/A |
Éléments
| Élément | Descriptif | Obligatoire |
|---|---|---|
| openid-config | Ajoutez un ou plusieurs de ces éléments pour spécifier un point de terminaison de configuration OpenID (url attribut) conforme à partir duquel les clés de signature et l’émetteur peuvent être obtenues.Si vous le souhaitez, définissez validate-connectivity l’attribut pour false désactiver la vérification de la disponibilité du point de terminaison si l’URL ne peut pas être résolue via le DNS public.La configuration incluant le jeu de clés web JSON (JWKS) est extraite du point de terminaison toutes les heures et mise en cache. Si le jeton validé fait référence à une clé de validation (à l’aide kid de la revendication) manquante dans la configuration mise en cache ou si la récupération échoue, gestion des API extrait le point de terminaison au plus une fois par 5 min. Ces intervalles sont susceptibles d’être modifiés sans préavis. La réponse doit être conforme aux spécifications définies à l’URL : https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata. Pour Microsoft Entra ID utiliser le point de terminaison OpenID Connect metadata configuré dans l’inscription de votre application, par exemple : - v2 https://login.microsoftonline.com/{tenant-name}/v2.0/.well-known/openid-configuration- v2 Multilocataire https://login.microsoftonline.com/organizations/v2.0/.well-known/openid-configuration- v1 https://login.microsoftonline.com/{tenant-name}/.well-known/openid-configuration - Client locataire (préversion) https://{tenant-name}.ciamlogin.com/{tenant-id}/v2.0/.well-known/openid-configuration Substitution du nom ou de l’ID de votre locataire d’annuaire, par exemple contoso.onmicrosoft.com, pour {tenant-name}. |
Non |
| issuer-signing-keys | Liste des clés de sécurité encodées en Base64, dans key les sous-éléments, utilisées pour valider les jetons signés. Si plusieurs clés de sécurité sont présentes, chacune est tentée jusqu’à ce qu’il n’en reste plus (ce qui entraîne un échec de validation) ou jusqu’à ce que l’une d’elles soit la clé appropriée (utile pour la substitution de jeton). Si vous le souhaitez, spécifiez une clé à l’aide de l’attribut id pour correspondre à la revendication du kid jeton. Pour valider un jeton signé avec une clé asymétrique, spécifiez éventuellement la clé publique à l’aide d’un certificate-id attribut dont la valeur est définie sur l’identificateur d’un certificat chargé dans Gestion des API, ou la paire module RSA n et exposant e de la clé de signature au format codé en Base64url. |
Non |
| déchiffrement-clés | Liste des clés encodées en Base64, dans key les sous-éléments, utilisées pour déchiffrer les jetons. Si plusieurs clés de sécurité sont présentes, chacune est tentée jusqu’à ce qu’il n’en reste plus (ce qui entraîne un échec de validation) ou jusqu’à ce que l’une d’elles soit la clé appropriée.Pour déchiffrer un jeton chiffré avec une clé asymétrique, spécifiez éventuellement la clé publique à l’aide d’un certificate-id attribut dont la valeur est définie sur l’identificateur d’un certificat chargé dans Gestion des API. |
Non |
| Public | Liste des revendications d’audience acceptables, dans audience les sous-éléments, qui peuvent être présentes sur le jeton. Si plusieurs valeurs d’audience sont présentes, chacune est tentée jusqu’à ce que toutes soient épuisées (auquel cas la validation échoue) ou que l’une d’elles réussisse. Au moins une audience doit être spécifiée. |
Non |
| Émetteurs | Liste des principaux acceptables, dans issuer les sous-éléments, qui ont émis le jeton. Si plusieurs valeurs d’émetteur sont présentes, chacune est tentée jusqu’à ce que toutes soient épuisées (auquel cas la validation échoue) ou que l’une d’elles réussisse. |
Non |
| required-claims | Une liste de revendications, dans claim les sous-éléments, devrait être présente sur le jeton pour qu’elle soit considérée comme valide. Lorsque plusieurs revendications sont présentes, le jeton doit correspondre aux valeurs de revendication en fonction de la valeur de l’attribut match . |
Non |
attributs de clé
| Attribut | Descriptif | Obligatoire | Par défaut |
|---|---|---|---|
| pièce d'identité | (Clé de signature de l’émetteur uniquement) Chaîne. Identificateur utilisé pour faire correspondre kid la revendication présentée dans JWT. Si aucune clé ne correspond à la revendication, Gestion des API tente chaque clé spécifiée.
En savoir plus sur la kid revendication dans la RFC. |
Non | N/A |
| certificate-id | Identificateur d’une entité de certificat chargée dans Gestion des API, utilisé pour spécifier la clé publique pour vérifier qu’un jeton est signé avec une clé asymétrique. | Non | N/A |
| n | (Clé de signature de l’émetteur uniquement) Module de la clé publique utilisée pour vérifier l’émetteur d’un jeton signé avec une clé asymétrique. Doit être spécifié avec la valeur de l’exposant e. Les expressions de stratégie ne sont pas autorisées. |
Non | N/A |
| e | (Clé de signature de l’émetteur uniquement) Exposant de la clé publique utilisée pour vérifier l’émetteur d’un jeton signé avec une clé asymétrique. Doit être spécifié avec la valeur du module n. Les expressions de stratégie ne sont pas autorisées. |
Non | N/A |
attributs de revendication
| Attribut | Descriptif | Obligatoire | Par défaut |
|---|---|---|---|
| allumette | L’attribut match de l’élément claim spécifie si chaque valeur de revendication dans la stratégie doit être présente dans le jeton pour que la validation réussisse. Les valeurs possibles sont les suivantes :- all : chaque valeur de revendication de la stratégie doit être présente dans le jeton pour que la validation réussisse.- any - au moins une valeur de revendication doit être présente dans le jeton pour que la validation réussisse. |
Non | tout |
| séparateur | Chaîne. Spécifie un séparateur (par exemple, « , ») à utiliser pour extraire un ensemble de valeurs à partir d’une revendication à valeurs multiples. | Non | N/A |
Utilisation
- Sections de la stratégie : inbound
- Étendues de la stratégie : global, espace de travail, produit, API, opération
- Passerelles : classiques, v2, consommation, auto-hébergées, espace de travail
Notes d’utilisation
- La
validate-jwtstratégie exige que laexprevendication inscrite soit incluse dans le JWT, sauf sirequire-expiration-timel’attribut est spécifié et défini surfalse. - La stratégie prend en charge les algorithmes de signature symétriques et asymétriques :
-
Symétrique : les algorithmes de chiffrement suivants sont pris en charge : A128CBC-HS256, A192CBC-HS384, A256CBC-HS512.
- Si elle est utilisée dans la stratégie, la clé doit être fournie en ligne au sein de la stratégie au format encodé en Base64.
-
Asymétrique : les algorithmes de chiffrement suivants sont pris en charge : PS256, RS256, RS512, ES256.
- Si elle est utilisée dans la stratégie, la clé peut être fournie soit via un point de terminaison de configuration OpenID, soit en spécifiant l’ID d’un certificat chargé (au format PFX) qui contient la clé publique ou la paire modulo-exposant de la clé publique.
-
Symétrique : les algorithmes de chiffrement suivants sont pris en charge : A128CBC-HS256, A192CBC-HS384, A256CBC-HS512.
- Si l’instance Gestion des API est injectée ou intégrée dans un réseau virtuel et
openid-configles URL de point de terminaison sont configurées dans la stratégie, définissez l’attribut pourfalsedésactiver lavalidate-connectivityvérification de la disponibilité des points de terminaison. - Vous pouvez utiliser des stratégies de restriction d’accès dans différentes étendues à des fins différentes. Par exemple, vous pouvez sécuriser toute l’API avec l’authentification Microsoft Entra en appliquant la stratégie
validate-jwtau niveau de l’API, ou vous pouvez l’appliquer au niveau de l’opération d’API et utiliserclaimspour un contrôle plus précis. - Lors de l’utilisation d’un en-tête personnalisé (
header-name), le schéma requis configuré (require-scheme) est ignoré. Pour utiliser un schéma requis, les JWT doivent être fournis dans l’en-têteAuthorization.
Exemples
Validation simple du jeton
<validate-jwt header-name="Authorization" require-scheme="Bearer">
<issuer-signing-keys>
<key>{{jwt-signing-key}}</key> <!-- signing key specified as a named value -->
</issuer-signing-keys>
<audiences>
<audience>@(context.Request.OriginalUrl.Host)</audience> <!-- audience is set to API Management host name -->
</audiences>
<issuers>
<issuer>http://contoso.com/</issuer>
</issuers>
</validate-jwt>
Validation de jeton avec certificat RSA
<validate-jwt header-name="Authorization" require-scheme="Bearer">
<issuer-signing-keys>
<key certificate-id="my-rsa-cert" /> <!-- signing key specified as certificate ID, enclosed in double-quotes -->
</issuer-signing-keys>
<audiences>
<audience>@(context.Request.OriginalUrl.Host)</audience> <!-- audience is set to API Management host name -->
</audiences>
<issuers>
<issuer>http://contoso.com/</issuer>
</issuers>
</validate-jwt>
validation de jeton à locataire unique Microsoft Entra ID
<validate-jwt header-name="Authorization" failed-validation-httpcode="401" failed-validation-error-message="Unauthorized. Access token is missing or invalid.">
<openid-config url="https://login.microsoftonline.com/contoso.onmicrosoft.com/.well-known/openid-configuration" />
<audiences>
<audience>00001111-aaaa-2222-bbbb-3333cccc4444</audience>
</audiences>
<required-claims>
<claim name="id" match="all">
<value>insert claim here</value>
</claim>
</required-claims>
</validate-jwt>
validation des jetons de locataire client Microsoft Entra ID
<validate-jwt header-name="Authorization" failed-validation-httpcode="401" failed-validation-error-message="Unauthorized. Access token is missing or invalid.">
<openid-config url="https://<tenant-name>.ciamlogin.com/<tenant-id>/v2.0/.well-known/openid-configuration" />
<required-claims>
<claim name="azp" match="all">
<value>insert claim here</value>
</claim>
</required-claims>
</validate-jwt>
validation de jeton Azure Active Directory B2C
<validate-jwt header-name="Authorization" failed-validation-httpcode="401" failed-validation-error-message="Unauthorized. Access token is missing or invalid.">
<openid-config url="https://login.microsoftonline.com/tfp/contoso.onmicrosoft.com/b2c_1_signin/v2.0/.well-known/openid-configuration" />
<audiences>
<audience>11112222-bbbb-3333-cccc-4444dddd5555</audience>
</audiences>
<required-claims>
<claim name="id" match="all">
<value>insert claim here</value>
</claim>
</required-claims>
</validate-jwt>
Important
À compter du 1er mai 2025, Azure AD B2C ne sera plus disponible pour les nouveaux clients. Pour plus d’informations, consultez notre FAQ.
Validation du jeton à l'aide de la clé de décryptage
Cet exemple montre comment utiliser la validate-jwt stratégie pour valider un jeton déchiffré à l’aide d’une clé de déchiffrement. La clé est spécifiée à l'aide de l'identifiant d'un certificat téléchargé (au format PFX) qui contient la clé publique.
<validate-jwt header-name="Authorization" require-scheme="Bearer" output-token-variable-name="jwt">
<issuer-signing-keys>
<key>{{jwt-signing-key}}</key> <!-- signing key is stored in a named value -->
</issuer-signing-keys>
<audiences>
<audience>@(context.Request.OriginalUrl.Host)</audience>
</audiences>
<issuers>
<issuer>contoso.com</issuer>
</issuers>
<required-claims>
<claim name="group" match="any">
<value>finance</value>
<value>logistics</value>
</claim>
</required-claims>
<decryption-keys>
<key certificate-id="my-certificate-in-api-management" /> <!-- decryption key specified as certificate ID -->
</decryption-keys>
</validate-jwt>
Autoriser l’accès aux opérations à partir de revendications de jetons
Cet exemple montre comment utiliser la stratégie pour autoriser l’accès aux opérations en fonction de la validate-jwt valeur des revendications de jeton.
<validate-jwt header-name="Authorization" require-scheme="Bearer" output-token-variable-name="jwt">
<issuer-signing-keys>
<key>{{jwt-signing-key}}</key> <!-- signing key is stored in a named value -->
</issuer-signing-keys>
<audiences>
<audience>@(context.Request.OriginalUrl.Host)</audience>
</audiences>
<issuers>
<issuer>contoso.com</issuer>
</issuers>
<required-claims>
<claim name="group" match="any">
<value>finance</value>
<value>logistics</value>
</claim>
</required-claims>
</validate-jwt>
<choose>
<when condition="@(context.Request.Method == "POST" && !((Jwt)context.Variables["jwt"]).Claims["group"].Contains("finance"))">
<return-response>
<set-status code="403" reason="Forbidden" />
</return-response>
</when>
</choose>
Stratégies connexes
Contenu connexe
Pour plus d’informations sur l’utilisation des stratégies, consultez :
- Tutoriel : Transformer et protéger votre API
- Référence de politique pour obtenir la liste complète des déclarations et des paramètres de politique
- Expressions de stratégie
- Définir ou modifier des stratégies
- Réutiliser les configurations de stratégie
- Po de extraits de codePolicy
- po de terrain de jeuPolicy
- Azure API Management kit de ressources de stratégie
- Get Copilot assistance pour créer, expliquer et dépanner des stratégies