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: