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.