JWT valideren
VAN TOEPASSING OP: Alle API Management-lagen
Het validate-jwt
beleid dwingt het bestaan en de geldigheid af van een ondersteund JSON-webtoken (JWT) dat is geëxtraheerd uit een opgegeven HTTP-header, uit een opgegeven queryparameter is geëxtraheerd of overeenkomt met een specifieke waarde.
Notitie
Api Management biedt ook het validate-azure-ad-token
beleid om een JWT te valideren die is geleverd door de Microsoft Entra-service.
Notitie
Stel de elementen en onderliggende elementen van het beleid in de volgorde in die in de beleidsverklaring is opgegeven. Om u te helpen dit beleid te configureren, biedt de portal een begeleide editor op basis van formulieren. Meer informatie over het instellen of bewerken van API Management-beleid.
Beleidsinstructie
<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" />
<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>
Kenmerken
Kenmerk | Beschrijving | Vereist | Standaardinstelling |
---|---|---|---|
header-name | De naam van de HTTP-header met het token. Beleidsexpressies zijn toegestaan. | Een van header-name , query-parameter-name of token-value moet worden opgegeven. |
N.v.t. |
query-parameter-name | De naam van de queryparameter die het token bevat. Beleidsexpressies zijn toegestaan. | Een van header-name , query-parameter-name of token-value moet worden opgegeven. |
N.v.t. |
tokenwaarde | Expressie die een tekenreeks retourneert die het token bevat. U mag niet retourneren Bearer als onderdeel van de tokenwaarde. Beleidsexpressies zijn toegestaan. |
Een van header-name , query-parameter-name of token-value moet worden opgegeven. |
N.v.t. |
failed-validation-httpcode | HTTP-statuscode die moet worden geretourneerd als de JWT geen validatie doorstaan. Beleidsexpressies zijn toegestaan. | Nee | 401 |
failed-validation-error-message | Foutbericht dat moet worden geretourneerd in de hoofdtekst van het HTTP-antwoord als de JWT de validatie niet doorstaan. Dit bericht moet speciale tekens bevatten die correct zijn ontsnapt. Beleidsexpressies zijn toegestaan. | Nee | Het standaardfoutbericht is afhankelijk van het validatieprobleem, bijvoorbeeld 'JWT niet aanwezig'. |
verlooptijd vereisen | Booleaans. Hiermee geeft u op of een vervaldatumclaim vereist is in het token. Beleidsexpressies zijn toegestaan. | Nee | true |
require-scheme | De naam van het tokenschema, bijvoorbeeld Bearer. Wanneer dit kenmerk is ingesteld, zorgt het beleid ervoor dat het opgegeven schema aanwezig is in de waarde van de autorisatieheader. Beleidsexpressies zijn toegestaan. | Nee | N.v.t. |
ondertekende tokens vereisen | Booleaans. Hiermee geeft u op of een token moet worden ondertekend. Beleidsexpressies zijn toegestaan. | Nee | true |
klok-scheeftrekken | Tijdspanne. Gebruik dit diagram om het maximale verwachte tijdsverschil op te geven tussen de systeemklokken van de tokenverlener en het API Management-exemplaar. Beleidsexpressies zijn toegestaan. | Nee | 0 seconden |
output-token-variable-name | Snaar. Naam van contextvariabele die tokenwaarde als object van het type Jwt ontvangt bij geslaagde tokenvalidatie. Beleidsexpressies zijn niet toegestaan. |
Nee | N.v.t. |
Elementen
Element | Beschrijving | Vereist |
---|---|---|
openid-config | Voeg een of meer van deze elementen toe om een compatibele URL voor het OpenID-configuratie-eindpunt op te geven waaruit ondertekeningssleutels en verleners kunnen worden verkregen. Configuratie met inbegrip van de JSON Web Key Set (JWKS) wordt elke 1 uur opgehaald uit het eindpunt en in de cache opgeslagen. Als het token dat wordt gevalideerd verwijst naar een validatiesleutel (met behulp van kid claim) die ontbreekt in de configuratie in de cache of als het ophalen mislukt, haalt API Management maximaal één keer per 5 minuten het eindpunt op. Deze intervallen kunnen zonder kennisgeving worden gewijzigd. Het antwoord moet zijn gebaseerd op specificaties zoals gedefinieerd op URL: https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata . Gebruik voor Microsoft Entra ID het openID Connect-metagegevenseindpunt dat is geconfigureerd in uw app-registratie, zoals: - v2 https://login.microsoftonline.com/{tenant-name}/v2.0/.well-known/openid-configuration - v2 Multitenant https://login.microsoftonline.com/organizations/v2.0/.well-known/openid-configuration - v1 https://login.microsoftonline.com/{tenant-name}/.well-known/openid-configuration - Tenant van klant (preview) https://{tenant-name}.ciamlogin.com/{tenant-id}/v2.0/.well-known/openid-configuration Vervang de naam of id van uw maptenant, bijvoorbeeld contoso.onmicrosoft.com .{tenant-name} |
Nee |
verlener-ondertekeningssleutels | Een lijst met met Base64 gecodeerde beveiligingssleutels, in key subelementen, die worden gebruikt om ondertekende tokens te valideren. Als er meerdere beveiligingssleutels aanwezig zijn, wordt elke sleutel geprobeerd totdat alle zijn uitgeput (in dat geval mislukt de validatie) of één geslaagd (handig voor het rollover van tokens). Geef desgewenst een sleutel op met behulp van het id kenmerk dat overeenkomt met een kid claim. Als u een token wilt valideren dat is ondertekend met een asymmetrische sleutel, geeft u desgewenst de openbare sleutel op met een certificate-id kenmerk met een waarde die is ingesteld op de id van een certificaat dat is geüpload naar API Management, of het RSA-modulus n - en exponentpaar e van de ondertekeningssleutel in base64url-gecodeerde indeling. |
Nee |
ontsleutelingssleutels | Een lijst met met Base64 gecodeerde sleutels, in key subelementen, die worden gebruikt om de tokens te ontsleutelen. Als er meerdere beveiligingssleutels aanwezig zijn, wordt elke sleutel geprobeerd totdat alle sleutels zijn uitgeput (in dat geval mislukt de validatie) of een sleutel slaagt.Als u een token wilt ontsleutelen dat is versleuteld met een asymmetrische sleutel, geeft u desgewenst de openbare sleutel op met een certificate-id kenmerk met een waarde die is ingesteld op de id van een certificaat dat is geüpload naar API Management. |
Nee |
Publiek | Een lijst met acceptabele doelgroepclaims, in audience subelementen, die aanwezig kunnen zijn op het token. Als er meerdere doelgroepwaarden aanwezig zijn, wordt elke waarde geprobeerd totdat alle waarden zijn uitgeput (in dat geval mislukt de validatie) of totdat één is geslaagd. Er moet ten minste één doelgroep worden opgegeven. |
Nee |
Emittenten | Een lijst met acceptabele principals, in issuer subelementen, die het token hebben uitgegeven. Als er meerdere verlenerwaarden aanwezig zijn, wordt elke waarde geprobeerd totdat alle waarden zijn uitgeput (in dat geval mislukt de validatie) of totdat een waarde slaagt. |
Nee |
vereiste claims | Een lijst met claims, in claim subelementen, verwachtte aanwezig te zijn op het token, zodat deze als geldig kan worden beschouwd. Wanneer er meerdere claims aanwezig zijn, moet het token overeenkomen met claimwaarden op basis van de waarde van het match kenmerk. |
Nee |
sleutelkenmerken
Kenmerk | Beschrijving | Vereist | Standaardinstelling |
---|---|---|---|
id | (Alleen ondertekeningssleutel voor verleners) Snaar. Id die wordt gebruikt om de claim te vergelijken kid die wordt weergegeven in JWT. |
Nee | N.v.t. |
certificaat-id | Id van een certificaatentiteit die is geüpload naar API Management, die wordt gebruikt om de openbare sleutel op te geven om een token te verifiëren dat is ondertekend met een asymmetrische sleutel. | Nee | N.v.t. |
n | (Alleen ondertekeningssleutel voor verleners) Modulus van de openbare sleutel die wordt gebruikt om de uitgever van een token te verifiëren dat is ondertekend met een asymmetrische sleutel. Moet worden opgegeven met de waarde van de exponent e . Beleidsexpressies zijn niet toegestaan. |
Nee | N.v.t. |
e | (Alleen ondertekeningssleutel voor verleners) Exponent van de openbare sleutel die wordt gebruikt om de verlener van een token te verifiëren dat is ondertekend met een asymmetrische sleutel. Moet worden opgegeven met de waarde van de modulus n . Beleidsexpressies zijn niet toegestaan. |
Nee | N.v.t. |
claimkenmerken
Kenmerk | Beschrijving | Vereist | Standaardinstelling |
---|---|---|---|
lucifer | Het match kenmerk op het claim element geeft aan of elke claimwaarde in het beleid aanwezig moet zijn in het token om te kunnen worden gevalideerd. Mogelijke waarden zijn:- all - elke claimwaarde in het beleid moet aanwezig zijn in het token om te kunnen worden gevalideerd.- any - ten minste één claimwaarde moet aanwezig zijn in het token om de validatie te voltooien. |
Nee | Alles |
scheidingsteken | Snaar. Hiermee geeft u een scheidingsteken (bijvoorbeeld ',') op dat moet worden gebruikt voor het extraheren van een set waarden uit een claim met meerdere waarden. | Nee | N.v.t. |
Gebruik
- Beleidssecties: inkomend
- Beleidsbereik: globaal, werkruimte, product, API, bewerking
- Gateways: klassiek, v2, verbruik, zelf-hostend, werkruimte
Gebruiksnotities
- Het
validate-jwt
beleid vereist dat deexp
geregistreerde claim is opgenomen in het JWT-token, tenzij hetrequire-expiration-time
kenmerk is opgegeven en is ingesteld opfalse
. - Het beleid ondersteunt zowel symmetrische als asymmetrische ondertekeningsalgoritmen:
- Symmetrisch : de volgende versleutelingsalgoritmen worden ondersteund: A128CBC-HS256, A192CBC-HS384, A256CBC-HS512.
- Als deze wordt gebruikt in het beleid, moet de sleutel inline worden opgegeven in het beleid in het met Base64 gecodeerde formulier.
- Asymmetrisch : de volgende versleutelingsalgortithms worden ondersteund: PS256, RS256, RS512, ES256.
- Als deze wordt gebruikt in het beleid, kan de sleutel worden opgegeven via een OpenID-configuratie-eindpunt of door de id op te geven van een geüpload certificaat (in PFX-indeling) dat de openbare sleutel bevat, of het modulus-exponent-paar van de openbare sleutel.
- Symmetrisch : de volgende versleutelingsalgoritmen worden ondersteund: A128CBC-HS256, A192CBC-HS384, A256CBC-HS512.
- Als u het beleid wilt configureren met een of meer OpenID-configuratie-eindpunten voor gebruik met een zelf-hostende gateway, moeten de URL's voor OpenID-configuratie-eindpunten ook bereikbaar zijn voor de cloudgateway.
- U kunt toegangsbeperkingsbeleid in verschillende bereiken voor verschillende doeleinden gebruiken. U kunt bijvoorbeeld de hele API beveiligen met Microsoft Entra-verificatie door het
validate-jwt
beleid toe te passen op API-niveau, of u kunt deze toepassen op het niveau van de API-bewerking en deze gebruikenclaims
voor gedetailleerdere controle. - Wanneer u een aangepaste header (
header-name
) gebruikt, wordt het geconfigureerde vereiste schema (require-scheme
) genegeerd. Als u een vereist schema wilt gebruiken, moeten JWT-tokens worden opgegeven in deAuthorization
header.
Voorbeelden
Eenvoudige tokenvalidatie
<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>
Tokenvalidatie met RSA-certificaat
<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>
Validatie van één tenanttoken voor 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>
Validatie van tenanttoken voor Microsoft Entra ID-klant
<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>
Validatie van Azure Active Directory B2C-token
<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>
Toegang tot bewerkingen autoriseren op basis van tokenclaims
In dit voorbeeld ziet u hoe u het validate-jwt
beleid gebruikt om toegang tot bewerkingen te autoriseren op basis van de waarde van tokenclaims.
<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>
Gerelateerd beleid
Gerelateerde inhoud
Zie voor meer informatie over het werken met beleid:
- Zelfstudie: Uw API transformeren en beveiligen
- Beleidsreferentie voor een volledige lijst met beleidsinstructies en hun instellingen
- Beleidsexpressies
- Beleid instellen of bewerken
- Beleidsconfiguraties opnieuw gebruiken
- Beleidsfragmentenopslagplaats
- Beleid ontwerpen met Behulp van Microsoft Copilot in Azure