Principer för åtkomstbegränsning i API Management
Det här avsnittet innehåller en referens för följande API Management principer. Information om hur du lägger till och konfigurerar principer finns i Principer i API Management.
Principer för åtkomstbegränsning
- Kontrollera HTTP-huvud – Framtvingar förekomsten och/eller värdet för ett HTTP-huvud.
- Begränsa anropsfrekvensen per prenumeration – Förhindrar toppar i API-användning genom att begränsa anropsfrekvensen per prenumeration.
- Begränsa anropsfrekvensen efter nyckel – Förhindrar toppar i API-användningen genom att begränsa anropsfrekvensen per nyckel.
- Begränsa anropar-IP-adresser – Filtrerar (tillåter/nekar) anrop från specifika IP-adresser och/eller adressintervall.
- Ange användningskvot per prenumeration – Gör att du kan framtvinga en kvot för anropsvolym för förnyelse eller livslängd och/eller bandbredd per prenumeration.
- Ange användningskvot per nyckel – Gör att du kan framtvinga en kvot för anropsvolym för förnyelse eller livslängd och/eller bandbredd per nyckel.
- Verifiera JWT – Framtvingar förekomsten och giltigheten för en JWT som extraherats från antingen en angiven HTTP-rubrik eller en angiven frågeparameter.
- Verifiera klientcertifikat – Framtvingar att ett certifikat som presenteras av en klient API Management en instans matchar angivna verifieringsregler och anspråk.
Tips
Du kan använda principer för åtkomstbegränsningar i olika omfång för olika syften. Du kan till exempel skydda hela API:et med AAD-autentisering genom att tillämpa principen på API-nivå eller tillämpa den på API-åtgärdsnivå och använda för validate-jwt claims mer detaljerad kontroll.
Kontrollera HTTP-huvud
Använd principen check-header för att framtvinga att en begäran har ett angivet HTTP-huvud. Du kan också kontrollera om rubriken har ett visst värde eller söka efter ett intervall med tillåtna värden. Om kontrollen misslyckas avslutar principen bearbetningen av begäran och returnerar HTTP-statuskoden och felmeddelandet som anges av principen.
Principutdrag
<check-header name="header name" failed-check-httpcode="code" failed-check-error-message="message" ignore-case="true">
<value>Value1</value>
<value>Value2</value>
</check-header>
Exempel
<check-header name="Authorization" failed-check-httpcode="401" failed-check-error-message="Not authorized" ignore-case="false">
<value>f6dc69a089844cf6b2019bae6d36fac8</value>
</check-header>
Element
| Namn | Beskrivning | Krävs |
|---|---|---|
| check-header | Rotelementet. | Yes |
| värde | Tillåtet HTTP-huvudvärde. När flera värdeelement anges anses kontrollen vara lyckad om något av värdena matchar. | No |
Attribut
| Name | Beskrivning | Krävs | Standardvärde |
|---|---|---|---|
| failed-check-error-message | Felmeddelande som returneras i HTTP-svarstexten om rubriken inte finns eller har ett ogiltigt värde. Det här meddelandet måste innehålla eventuella specialtecken som är korrekt frånkommet. | Yes | Ej tillämpligt |
| failed-check-httpcode | HTTP-statuskod som returneras om rubriken inte finns eller har ett ogiltigt värde. | Yes | Ej tillämpligt |
| rubriknamn | Namnet på DET HTTP-huvud som ska kontrolleras. | Yes | Ej tillämpligt |
| ignore-case | Kan anges till Sant eller Falskt. Om värdet är inställt på Sant ignoreras det när rubrikvärdet jämförs med uppsättningen godkända värden. | Yes | Ej tillämpligt |
Användning
Den här principen kan användas i följande principavsnitt och omfång.
Principavsnitt: inkommande, utgående
Principomfång: alla omfång
Begränsa anropsfrekvensen efter prenumeration
Principen rate-limit förhindrar API-användningstoppar per prenumeration genom att begränsa anropsfrekvensen till ett angivet tal per angiven tidsperiod. När anropsfrekvensen överskrids får anroparen en 429 Too Many Requests svarsstatuskod.
Viktigt
Den här principen kan bara användas en gång per principdokument.
Principuttryck kan inte användas i något av principattributen för den här principen.
Varning
På grund av den distribuerade typen av begränsningsarkitektur är hastighetsbegränsning aldrig helt korrekt. Skillnaden mellan det konfigurerade och det verkliga antalet tillåtna begäranden varierar beroende på begärandevolymen och hastigheten, svarstiden i serverdelen och andra faktorer.
Anteckning
Information om skillnaden mellan hastighetsbegränsningar och kvoter finns i Frekvensbegränsningar och kvoter.
Principutdrag
<rate-limit calls="number" renewal-period="seconds">
<api name="API name" id="API id" calls="number" renewal-period="seconds">
<operation name="operation name" id="operation id" calls="number" renewal-period="seconds"
retry-after-header-name="header name"
retry-after-variable-name="policy expression variable name"
remaining-calls-header-name="header name"
remaining-calls-variable-name="policy expression variable name"
total-calls-header-name="header name"/>
</api>
</rate-limit>
Exempel
I följande exempel är gränsen per prenumerationspris 20 anrop per 90 sekunder. Efter varje principkörning lagras de återstående anrop som tillåts under tidsperioden i variabeln remainingCallsPerSubscription .
<policies>
<inbound>
<base />
<rate-limit calls="20" renewal-period="90" remaining-calls-variable-name="remainingCallsPerSubscription"/>
</inbound>
<outbound>
<base />
</outbound>
</policies>
Element
| Namn | Beskrivning | Krävs |
|---|---|---|
| hastighetsbegränsning | Rotelementet. | Yes |
| api | Lägg till ett eller flera av dessa element för att införa en gräns för anropsfrekvens för API:er i produkten. Frekvensbegränsningar för produkt- och API-anrop tillämpas oberoende av varandra. API:et kan refereras antingen via name eller id . Om båda attributen anges id används och name ignoreras. |
No |
| operation | Lägg till ett eller flera av dessa element för att införa en gräns för anropsfrekvens för åtgärder inom ett API. Gränserna för anropsfrekvens för produkter, API och åtgärd tillämpas oberoende av varandra. Åtgärden kan refereras antingen via name eller id . Om båda attributen anges id används och name ignoreras. |
No |
Attribut
| Name | Beskrivning | Krävs | Standardvärde |
|---|---|---|---|
| name | Namnet på api:et som frekvensbegränsningen ska tillämpas på. | Yes | Ej tillämpligt |
| Samtal | Det maximala totala antalet anrop som tillåts under det tidsintervall som anges i renewal-period . |
Yes | Ej tillämpligt |
| förnyelseperiod | Längden i sekunder för skjutfönstret då antalet tillåtna begäranden inte får överskrida det värde som anges i calls . Högsta tillåtna värde: 300 sekunder. |
Yes | Ej tillämpligt |
| retry-after-header-name | Namnet på ett svarshuvud vars värde är det rekommenderade återförsöksintervallet i sekunder efter att anropsfrekvensen har överskridits. | No | Ej tillämpligt |
| retry-after-variable-name | Namnet på en principuttrycksvariabel som lagrar det rekommenderade återförsöksintervallet i sekunder efter att anropsfrekvensen har överskridits. | No | Ej tillämpligt |
| remaining-calls-header-name | Namnet på ett svarshuvud vars värde efter varje principkörning är antalet återstående anrop som tillåts för det tidsintervall som anges i renewal-period . |
No | Ej tillämpligt |
| remaining-calls-variable-name | Namnet på en principuttrycksvariabel som efter varje principkörning lagrar antalet återstående anrop som tillåts för det tidsintervall som anges i renewal-period . |
No | Ej tillämpligt |
| total-calls-header-name | Namnet på ett svarshuvud vars värde är det värde som anges i calls . |
No | Ej tillämpligt |
Användning
Den här principen kan användas i följande principavsnitt och omfång.
Principavsnitt: inkommande
Principomfattningar: product, api, operation
Begränsa anropsfrekvensen efter nyckel
Viktigt
Den här funktionen är inte tillgänglig på förbrukningsnivån för API Management.
Principen rate-limit-by-key förhindrar api-användningstoppar per nyckel genom att begränsa anropsfrekvensen till ett angivet tal per angiven tidsperiod. Nyckeln kan ha ett godtyckligt strängvärde och tillhandahålls vanligtvis med hjälp av ett principuttryck. Valfritt ökningsvillkor kan läggas till för att ange vilka begäranden som ska räknas mot gränsen. När anropsfrekvensen överskrids får anroparen en 429 Too Many Requests svarsstatuskod.
Mer information och exempel på den här principen finns i Avancerad begränsning av förfrågningar med Azure API Management.
Varning
På grund av den distribuerade typen av begränsningsarkitektur är hastighetsbegränsning aldrig helt korrekt. Skillnaden mellan det konfigurerade och det verkliga antalet tillåtna begäranden varierar beroende på begärandevolymen och hastigheten, svarstiden i serverdelen och andra faktorer.
Anteckning
Information om skillnaden mellan hastighetsbegränsningar och kvoter finns i Frekvensbegränsningar och kvoter.
Principutdrag
<rate-limit-by-key calls="number"
renewal-period="seconds"
increment-condition="condition"
counter-key="key value"
retry-after-header-name="header name" retry-after-variable-name="policy expression variable name"
remaining-calls-header-name="header name" remaining-calls-variable-name="policy expression variable name"
total-calls-header-name="header name"/>
Exempel
I följande exempel nyckelas frekvensgränsen på 10 anrop per 60 sekunder av anroparens IP-adress. Efter varje principkörning lagras de återstående anrop som tillåts under tidsperioden i variabeln remainingCallsPerIP .
<policies>
<inbound>
<base />
<rate-limit-by-key calls="10"
renewal-period="60"
increment-condition="@(context.Response.StatusCode == 200)"
counter-key="@(context.Request.IpAddress)"
remaining-calls-variable-name="remainingCallsPerIP"/>
</inbound>
<outbound>
<base />
</outbound>
</policies>
Element
| Namn | Beskrivning | Krävs |
|---|---|---|
| rate-limit-by-key | Rotelementet. | Yes |
Attribut
| Name | Beskrivning | Krävs | Standardvärde |
|---|---|---|---|
| Samtal | Det maximala totala antalet anrop som tillåts under det tidsintervall som anges i renewal-period . Principuttryck tillåts. |
Yes | Ej tillämpligt |
| räknarnyckel | Nyckeln som ska användas för frekvensbegränsningsprincipen. | Yes | Ej tillämpligt |
| inkrementsvillkor | Det booleska uttrycket som anger om begäran ska räknas mot hastigheten ( true ). |
No | Ej tillämpligt |
| förnyelseperiod | Längden i sekunder för skjutfönstret då antalet tillåtna begäranden inte får överskrida det värde som anges i calls . Principuttryck tillåts. Högsta tillåtna värde: 300 sekunder. |
Yes | Ej tillämpligt |
| retry-after-header-name | Namnet på ett svarshuvud vars värde är det rekommenderade återförsöksintervallet i sekunder efter att anropsfrekvensen har överskridits. | No | Ej tillämpligt |
| retry-after-variable-name | Namnet på en principuttrycksvariabel som lagrar det rekommenderade återförsöksintervallet i sekunder efter att anropsfrekvensen har överskridits. | No | Ej tillämpligt |
| remaining-calls-header-name | Namnet på ett svarshuvud vars värde efter varje principkörning är antalet återstående anrop som tillåts för det tidsintervall som anges i renewal-period . |
No | Ej tillämpligt |
| remaining-calls-variable-name | Namnet på en principuttrycksvariabel som efter varje principkörning lagrar antalet återstående anrop som tillåts för det tidsintervall som anges i renewal-period . |
No | Ej tillämpligt |
| total-calls-header-name | Namnet på ett svarshuvud vars värde är det värde som anges i calls . |
No | Ej tillämpligt |
Användning
Den här principen kan användas i följande principavsnitt och omfång.
Principavsnitt: inkommande
Principomfång: alla omfång
Begränsa anropar-IP-adresser
Principen ip-filter filtrerar (tillåter/nekar) anrop från specifika IP-adresser och/eller adressintervall.
Principutdrag
<ip-filter action="allow | forbid">
<address>address</address>
<address-range from="address" to="address" />
</ip-filter>
Exempel
I följande exempel tillåter principen endast begäranden som kommer från antingen den enskilda IP-adressen eller intervallet med angivna IP-adresser
<ip-filter action="allow">
<address>13.66.201.169</address>
<address-range from="13.66.140.128" to="13.66.140.143" />
</ip-filter>
Element
| Namn | Beskrivning | Krävs |
|---|---|---|
| ip-filter | Rotelementet. | Yes |
| adress | Anger en enskild IP-adress som ska filtreras. | Minst ett address - address-range eller -element krävs. |
| address-range from="address" to="address" | Anger ett intervall med IP-adresser som ska filtreras. | Minst ett address - address-range eller -element krävs. |
Attribut
| Name | Beskrivning | Krävs | Standardvärde |
|---|---|---|---|
| address-range from="address" to="address" | Ett intervall med IP-adresser som åtkomst tillåts eller nekas för. | Krävs när address-range elementet används. |
Ej tillämpligt |
| ip-filter action="allow | forbid" | Anger om anrop ska tillåtas eller inte för de angivna IP-adresserna och intervallen. | Yes | Ej tillämpligt |
Användning
Den här principen kan användas i följande principavsnitt och omfång.
- Principavsnitt: inkommande
- Principomfång: alla omfång
Ange användningskvot per prenumeration
Principen quota tillämpar en förnyelsebar volym eller livslängd för anropsvolym och/eller bandbreddskvot per prenumeration.
Viktigt
Den här principen kan bara användas en gång per principdokument.
Principuttryck kan inte användas i något av principattributen för den här principen.
Anteckning
Information om skillnaden mellan hastighetsbegränsningar och kvoter finns i Hastighetsbegränsningar och kvoter.
Principutdrag
<quota calls="number" bandwidth="kilobytes" renewal-period="seconds">
<api name="API name" id="API id" calls="number" renewal-period="seconds" />
<operation name="operation name" id="operation id" calls="number" renewal-period="seconds" />
</api>
</quota>
Exempel
<policies>
<inbound>
<base />
<quota calls="10000" bandwidth="40000" renewal-period="3600" />
</inbound>
<outbound>
<base />
</outbound>
</policies>
Element
| Namn | Beskrivning | Krävs |
|---|---|---|
| kvot | Rotelementet. | Yes |
| api | Lägg till ett eller flera av dessa element för att införa anropskvot för API:er i produkten. Kvoter för produkt- och API-anrop tillämpas oberoende av varandra. API:et kan refereras antingen via name eller id . Om båda attributen anges id används och name ignoreras. |
No |
| operation | Lägg till ett eller flera av dessa element för att införa anropskvot för åtgärder i ett API. Kvoter för produkt-, API- och åtgärdssamtal tillämpas oberoende av varandra. Åtgärden kan refereras antingen via name eller id . Om båda attributen anges id används och name ignoreras. |
No |
Attribut
| Name | Beskrivning | Krävs | Standardvärde |
|---|---|---|---|
| name | Namnet på det API eller den åtgärd som kvoten gäller för. | Yes | Ej tillämpligt |
| Bandbredd | Det maximala totala antalet kilobyte som tillåts under tidsintervallet som anges i renewal-period . |
Antingen calls , eller båda tillsammans måste bandwidth anges. |
Ej tillämpligt |
| Samtal | Det maximala totala antalet anrop som tillåts under det tidsintervall som anges i renewal-period . |
Antingen calls , eller båda tillsammans måste bandwidth anges. |
Ej tillämpligt |
| förnyelseperiod | Tidsperioden i sekunder efter vilken kvoten återställs. När den är inställd på 0 perioden är inställd på oändligt. |
Yes | Ej tillämpligt |
Användning
Den här principen kan användas i följande principavsnitt och omfång.
- Principavsnitt: inkommande
- Principomfång: produkt
Ange användningskvot efter nyckel
Viktigt
Den här funktionen är inte tillgänglig på förbrukningsnivån för API Management.
Principen quota-by-key tillämpar en förnyelsebar volym eller livslängd för anropsvolym och/eller bandbreddskvot per nyckel. Nyckeln kan ha ett godtyckligt strängvärde och tillhandahålls vanligtvis med hjälp av ett principuttryck. Valfria ökningsvillkor kan läggas till för att ange vilka begäranden som ska räknas mot kvoten. Om flera principer skulle öka samma nyckelvärde ökas det bara en gång per begäran. När anropsfrekvensen överskrids får anroparen en 403 Forbidden svarsstatuskod.
Mer information och exempel på den här principen finns i Avancerad begränsning av förfrågningar med Azure API Management.
Anteckning
Information om skillnaden mellan hastighetsbegränsningar och kvoter finns i Hastighetsbegränsningar och kvoter.
Principutdrag
<quota-by-key calls="number"
bandwidth="kilobytes"
renewal-period="seconds"
increment-condition="condition"
counter-key="key value" />
Exempel
I följande exempel nyckelas kvoten av anroparens IP-adress.
<policies>
<inbound>
<base />
<quota-by-key calls="10000" bandwidth="40000" renewal-period="3600"
increment-condition="@(context.Response.StatusCode >= 200 && context.Response.StatusCode < 400)"
counter-key="@(context.Request.IpAddress)" />
</inbound>
<outbound>
<base />
</outbound>
</policies>
Element
| Namn | Beskrivning | Krävs |
|---|---|---|
| kvot | Rotelementet. | Yes |
Attribut
| Name | Beskrivning | Krävs | Standardvärde |
|---|---|---|---|
| Bandbredd | Det maximala totala antalet kilobyte som tillåts under tidsintervallet som anges i renewal-period . |
Antingen calls , eller båda tillsammans måste bandwidth anges. |
Ej tillämpligt |
| Samtal | Det maximala totala antalet anrop som tillåts under det tidsintervall som anges i renewal-period . |
Antingen calls , eller båda tillsammans måste bandwidth anges. |
Ej tillämpligt |
| counter-key | Nyckeln som ska användas för kvotprincipen. | Yes | Ej tillämpligt |
| inkrementsvillkor | Det booleska uttrycket som anger om begäran ska räknas mot kvoten ( true ) |
No | Ej tillämpligt |
| förnyelseperiod | Tidsperioden i sekunder efter vilken kvoten återställs. När den är inställd på 0 perioden är inställd på oändligt. |
Yes | Ej tillämpligt |
Anteckning
Attributvärdet måste vara unikt för alla API:er i API Management om du inte vill dela summan mellan de counter-key andra API:erna.
Användning
Den här principen kan användas i följande principavsnitt och omfång.
- Principavsnitt: inkommande
- Principomfång: alla omfång
Verifiera JWT
Principen validate-jwt framtvingar förekomsten och giltigheten för en JSON-webbtoken (JWT) som extraherats från antingen en angiven HTTP-rubrik eller en angiven frågeparameter.
Viktigt
Principen validate-jwt kräver att det registrerade exp anspråket ingår i JWT-token, såvida inte require-expiration-time attributet har angetts och angetts till false .
Principen validate-jwt stöder signeringsalgoritmerna HS256 och RS256. För HS256 måste nyckeln anges infogade i principen i base64-kodat format. För RS256 kan nyckeln anges antingen via en konfigurationsslutpunkt för öppet ID eller genom att ange ID för ett uppladdat certifikat som innehåller den offentliga nyckeln eller modulus-exponent-paret för den offentliga nyckeln.
Principen stöder token som krypterats med symmetriska nycklar med hjälp av följande validate-jwt krypteringsalgoritmer: A128CBC-HS256, A192CBC-HS384, A256CBC-HS512.
Principsats
<validate-jwt
header-name="name of http header containing the token (use query-parameter-name attribute if the token is passed in the URL)"
failed-validation-httpcode="http status code to return on failure"
failed-validation-error-message="error message to return on failure"
token-value="expression returning JWT token as a string"
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, e.g. https://login.constoso.com/openid-configuration" />
<issuer-signing-keys>
<key>base64 encoded signing key</key>
<!-- if there are multiple keys, then add additional key elements -->
</issuer-signing-keys>
<decryption-keys>
<key>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 values, then add additional value elements -->
</claim>
<!-- if there are multiple possible allowed values, then add additional value elements -->
</required-claims>
</validate-jwt>
Exempel
Enkel tokenvalidering
<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>
Tokenvalidering med RSA-certifikat
<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>
Azure Active Directory tokenvalidering
<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>25eef6e4-c905-4a07-8eb4-0d08d5df8b3f</audience>
</audiences>
<required-claims>
<claim name="id" match="all">
<value>insert claim here</value>
</claim>
</required-claims>
</validate-jwt>
Azure Active Directory B2C-tokenvalidering
<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>d313c4e4-de5f-4197-9470-e509a2f0b806</audience>
</audiences>
<required-claims>
<claim name="id" match="all">
<value>insert claim here</value>
</claim>
</required-claims>
</validate-jwt>
Auktorisera åtkomst till åtgärder baserat på tokenanspråk
Det här exemplet visar hur du använder principen Validate JWT (Validera JWT) för att auktorisera åtkomst till åtgärder baserat på värdet för tokenanspråk.
<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>
Element
| Element | Beskrivning | Krävs |
|---|---|---|
| validate-jwt | Rotelementet. | Yes |
| Publik | Innehåller en lista över godkända målgruppsanspråk som kan finnas på token. Om det finns flera målgruppsvärden provas varje värde tills alla är uttömda (i vilket fall valideringen misslyckas) eller tills ett lyckas. Minst en målgrupp måste anges. | No |
| issuer-signing-keys | En lista över Base64-kodade säkerhetsnycklar som används för att verifiera signerade token. Om det finns flera säkerhetsnycklar provas varje nyckel tills antingen alla är uttömda (i vilket fall valideringen misslyckas) eller en lyckas (användbar för tokenförvaltning). Nyckelelement har ett valfritt id attribut som används för att matcha mot kid anspråk. Du kan också ange en utfärdares signeringsnyckel med hjälp av: - certificate-id i format för <key certificate-id="mycertificate" /> att ange identifieraren för en certifikatentitet som laddats upp till API Management– RSA-modulus och exponentpar i format för att ange n e <key n="<modulus>" e="<exponent>" /> RSA-parametrarna i base64url-kodat format |
No |
| dekrypteringsnycklar | En lista över Base64-kodade nycklar som används för att dekryptera token. Om det finns flera säkerhetsnycklar provas varje nyckel tills alla nycklar är uttömda (i vilket fall valideringen misslyckas) eller en nyckel lyckas. Nyckelelement har ett valfritt id attribut som används för att matcha mot kid anspråk.Du kan också ange en dekrypteringsnyckel med hjälp av: - certificate-id i format för <key certificate-id="mycertificate" /> att ange identifieraren för en certifikatentitet som laddats upp till API Management |
No |
| Emittenter | En lista över godkända huvudnamn som utfärdade token. Om det finns flera utfärdarvärden provas varje värde tills alla är uttömda (i vilket fall valideringen misslyckas) eller tills ett lyckas. | No |
| openid-config | Elementet som används för att ange en kompatibel konfigurationsslutpunkt för Open ID som signeringsnycklar och utfärdare kan hämtas från. | No |
| obligatoriska anspråk | Innehåller en lista över anspråk som förväntas finnas i token för att den ska anses vara giltig. När match attributet är inställt på all varje anspråksvärde i principen måste finnas i token för att verifieringen ska lyckas. När match attributet är inställt any på minst ett anspråk måste finnas i token för att verifieringen ska lyckas. |
No |
Attribut
| Name | Beskrivning | Krävs | Standardvärde |
|---|---|---|---|
| clock-skev | Gått. Används för att ange maximal förväntad tidsskillnad mellan systemklockan för tokenutfärdaren och API Management instansen. | No | 0 sekunder |
| failed-validation-error-message | Felmeddelande som returneras i HTTP-svarstexten om JWT inte klarar valideringen. Det här meddelandet måste innehålla eventuella specialtecken som är korrekt ryms. | No | Standardfelmeddelandet beror på verifieringsproblemet, till exempel "JWT finns inte". |
| failed-validation-httpcode | HTTP-statuskod som returneras om JWT inte klarar valideringen. | No | 401 |
| header-name | Namnet på HTTP-huvudet som innehåller token. | En av header-name , query-parameter-name eller måste token-value anges. |
Ej tillämpligt |
| query-parameter-name | Namnet på frågeparametern som innehåller token. | En av header-name , query-parameter-name eller måste token-value anges. |
Ej tillämpligt |
| token-value | Uttryck som returnerar en sträng som innehåller JWT-token. Du får inte returnera Bearer som en del av tokenvärdet. |
En av header-name , query-parameter-name eller måste token-value anges. |
Ej tillämpligt |
| id | Med attributet för elementet kan du ange den sträng som ska matchas mot anspråket i token (om det finns) för att ta reda på lämplig nyckel som ska användas för id key kid signaturverifiering. |
No | Ej tillämpligt |
| Matcha | Attributet match för elementet anger om varje claim anspråksvärde i principen måste finnas i token för att verifieringen ska lyckas. Möjliga värden:- all – varje anspråksvärde i principen måste finnas i token för att verifieringen ska lyckas.- any – Minst ett anspråksvärde måste finnas i token för att verifieringen ska lyckas. |
No | all |
| kräv förfallotid | Boolean. Anger om ett förfalloanspråk krävs i token. | No | true |
| require-scheme | Namnet på tokenschemat, t.ex. "Bearer". När det här attributet anges ser principen till att det angivna schemat finns i rubrikvärdet Auktorisering. | No | Ej tillämpligt |
| kräv signerade token | Boolean. Anger om en token måste signeras. | No | true |
| Avgränsare | Sträng. Anger en avgränsare (t.ex. ",") som ska användas för att extrahera en uppsättning värden från ett anspråk med flera värden. | No | Ej tillämpligt |
| url | Url till slutpunkten för ID-konfiguration där du kan hämta metadata för Open ID-konfiguration. Svaret ska vara enligt specifikationerna som definierats på URL:en: https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata . Använd Azure Active Directory URL: ersätt https://login.microsoftonline.com/{tenant-name}/.well-known/openid-configuration katalogens klientnamn, t.ex. contoso.onmicrosoft.com . |
Yes | Ej tillämpligt |
| output-token-variable-name | Sträng. Namnet på sammanhangsvariabeln som tar emot tokenvärde som ett objekt av typen Jwt vid lyckad tokenvalidering |
No | Ej tillämpligt |
Användning
Den här principen kan användas i följande principavsnitt och omfång.
- Principavsnitt: inkommande
- Principomfång: alla omfång
Verifiera klientcertifikat
Använd principen för att framtvinga att ett certifikat som presenteras av en klient till en API Management-instans matchar angivna valideringsregler och anspråk som ämne eller utfärdare för en eller flera validate-client-certificate certifikatidentiteter.
För att anses vara giltigt måste ett klientcertifikat matcha alla valideringsregler som definierats av attributen på toppnivåelementet och matcha alla definierade anspråk för minst en av de definierade identiteterna.
Använd den här principen för att kontrollera inkommande certifikategenskaper mot önskade egenskaper. Använd även den här principen för att åsidosätta standardvalidering av klientcertifikat i dessa fall:
- Om du har laddat upp anpassade CA-certifikat för att verifiera klientbegäranden till den hanterade gatewayen
- Om du har konfigurerat anpassade certifikatutfärdare för att verifiera klientbegäranden till en egen hanterad gateway
Mer information om anpassade CA-certifikat och certifikatutfärdare finns i Så här lägger du till ett anpassat CA-certifikat i Azure API Management.
Principsats
<validate-client-certificate
validate-revocation="true|false"
validate-trust="true|false"
validate-not-before="true|false"
validate-not-after="true|false"
ignore-error="true|false">
<identities>
<identity
thumbprint="certificate thumbprint"
serial-number="certificate serial number"
common-name="certificate common name"
subject="certificate subject string"
dns-name="certificate DNS name"
issuer-subject="certificate issuer"
issuer-thumbprint="certificate issuer thumbprint"
issuer-certificate-id="certificate identifier" />
</identities>
</validate-client-certificate>
Exempel
I följande exempel verifieras ett klientcertifikat så att det matchar principens standardvalideringsregler och kontrollerar om ämnes- och utfärdarnamnet matchar angivna värden.
<validate-client-certificate
validate-revocation="true"
validate-trust="true"
validate-not-before="true"
validate-not-after="true"
ignore-error="false">
<identities>
<identity
subject="C=US, ST=Illinois, L=Chicago, O=Contoso Corp., CN=*.contoso.com"
issuer-subject="C=BE, O=FabrikamSign nv-sa, OU=Root CA, CN=FabrikamSign Root CA" />
</identities>
</validate-client-certificate>
Element
| Element | Beskrivning | Krävs |
|---|---|---|
| validate-client-certificate | Rotelementet. | Yes |
| Identiteter | Innehåller en lista över identiteter med definierade anspråk på klientcertifikatet. | No |
Attribut
| Name | Beskrivning | Krävs | Standardvärde |
|---|---|---|---|
| validera återkallelse | Boolean. Anger om certifikatet har verifierats mot listan över återkallade onlinecertifikat. | nej | Sant |
| validate-trust | Boolean. Anger om verifieringen ska misslyckas om kedjan inte kan byggas upp till betrodd certifikatutfärdare. | nej | Sant |
| validate-not-before | Boolean. Validerar värdet mot aktuell tid. | nej | Sant |
| validate-not-after | Boolean. Validerar värdet mot aktuell tid. | nej | Sant |
| ignore-error | Boolean. Anger om principen ska fortsätta till nästa hanterare eller gå vidare till vid fel vid misslyckad validering. | nej | Falskt |
| identity | Sträng. Kombination av certifikatanspråksvärden som gör certifikatet giltigt. | ja | Ej tillämpligt |
| Stämpel | Tumavtryck för certifikat. | nej | Ej tillämpligt |
| serienummer | Certifikatserienummer. | nej | Ej tillämpligt |
| eget namn | Certifikatets eget namn (del av ämnessträngen). | nej | Ej tillämpligt |
| Ämne | Ämnessträng. Måste följa formatet för unikt namn. | nej | Ej tillämpligt |
| dns-name | Värdet för dnsName-posten i anspråket Alternativt namn för ämne. | nej | Ej tillämpligt |
| issuer-subject | Utfärdarens ämne. Måste följa formatet för unikt namn. | nej | Ej tillämpligt |
| issuer-thumbprint | Utfärdarens tumavtryck. | nej | Ej tillämpligt |
| issuer-certificate-id | Identifierare för befintlig certifikatentitet som representerar utfärdarens offentliga nyckel. Ömsesidigt uteslutande med andra utfärdarattribut. | nej | Ej tillämpligt |
Användning
Den här principen kan användas i följande principavsnitt och omfång.
- Principavsnitt: inkommande
- Principomfång: alla omfång
Nästa steg
Mer information om hur du arbetar med principer finns i:
- Principer i API Management
- Transformera API:er
- Principreferens för en fullständig lista över principutdrag och deras inställningar
- Principexempel