Dela via


Problem med begränsning av begäranden och HTTP 403 – Otillåtna problem

Med hänvisning till artikeln om felsökningsserien för Azure API Management är det här det femte scenariot i labbet. Se till att du har följt instruktionerna för labbkonfigurationen enligt detta för att återskapa problemet.

Ursprunglig produktversion: API Management Service
Ursprungligt KB-nummer: 4464928

Symptom

Resurs-API:et hämtar användarens personliga information, inlägg på sociala medier, kommentarer och foton och använder svaret som returneras för ett maskininlärningsprojekt. Efter några dagars användning började GetPosts-åtgärden att generera HTTP 403 – Förbjudet fel, medan de andra åtgärderna fungerar som förväntat.

{
"statusCode": 403,
"message": "Förbjuden"
}

Förutom ovanstående stöter vi också på HTTP 429 – för många begäranden när du anropar GetComments-åtgärden för varje andra begäran. Problemet löser sig automatiskt efter 10 sekunder, men det återkommer när det första anropet till API:et görs igen. Beteendet observeras inte för de andra åtgärderna.

{
"statusCode": 429,
"message": "Hastighetsgränsen har överskridits. Försök igen om 5 sekunder."
}

Felsökningsanvisningar

  • Felet HTTP 403 – Förbjudet kan utlösas när det finns en implementerad princip för åtkomstbegränsning.

  • Kontrollera APIM Inspector-spårningen. Du bör se att det finns en 'ip-filter'-princip som filtrerar (tillåter/nekar) anrop från specifika IP-adresser och/eller adressintervall.

  • Om du vill kontrollera omfånget för principen "ip-filter" väljer du knappen Beräkna effektiv princip . Om du inte ser någon princip för åtkomstbegränsning som implementeras i några omfång bör nästa valideringssteg göras på produktnivå genom att navigera till den associerade produkten och sedan klicka på alternativet Principer.

    <inbound>
        <base />
        <choose>
            <when condition="@(context.Operation.Name.Equals("GetPosts"))">
                <ip-filter action="forbid">
                    <address-range from="0.0.0.0" to="255.255.255.255" />
                </ip-filter>
            </when>
        </choose>
    </inbound>
    
  • För det andra problemet (HTTP 429 – För många begäranden) följer vi samma procedur genom att kontrollera APIM-kontrollspårningen och kontrollera om det finns någon "rate-limit" eller "rate-limit-by-key"-princip implementerad i något omfång.

  • Om du beräknar den effektiva principen bör du lägga märke till en princip för åtkomstbegränsning (hastighetsgräns per nyckel) som implementeras i globalt omfång, dvs. under "Inkommande bearbetning" i alternativet Alla API:er.

    <inbound>
        <choose>
            <when condition="@(context.Operation.Name.Equals("GetComments"))">
                <rate-limit-by-key calls="1" renewal-period="10" increment-condition="@(context.Response.StatusCode == 200)" counter-key="@(context.Request.IpAddress)" />
            </when>
        </choose>
    </inbound>
    

Läs mer om principer för ip-filter och rate-limit-by-key i APIM.

Kontakta oss för att få hjälp

Om du har frågor eller behöver hjälp skapar du en supportförfrågan eller frågar Azure community support. Du kan också skicka produktfeedback till Azure-feedbackcommunityn.