Udostępnij za pośrednictwem


Problemy z ograniczaniem żądań i http 403 — problemy z dostępem zabronionym

Korzystając z artykułu z serii rozwiązywania problemów z usługą Azure API Management, jest to piąty scenariusz laboratorium. Upewnij się, że wykonano instrukcje konfiguracji laboratorium zgodnie z tym, aby ponownie utworzyć problem.

Oryginalna wersja produktu: usługa API Management
Oryginalny numer KB: 4464928

Symptomy

Interfejs API zasobów pobiera dane osobowe użytkownika, wpisy w mediach społecznościowych, komentarze i zdjęcia oraz wykorzystuje odpowiedź zwróconą dla projektu uczenia maszynowego. Dziwnie po kilku dniach korzystania z niego operacja GetPosts zaczęła zgłaszać błąd HTTP 403 — Zabronione , podczas gdy inne operacje działają prawidłowo zgodnie z oczekiwaniami.

{
"statusCode": 403,
"message": "Zabronione"
}

Oprócz powyższych wystąpi również błąd HTTP 429 — zbyt wiele żądań podczas wywoływania operacji GetComments dla każdego drugiego żądania. Problem zostanie automatycznie rozwiązany po upływie 10 sekund, jednak powtarza się po ponownym wywołaniu interfejsu API. Zachowanie nie jest obserwowane w przypadku innych operacji.

{
"statusCode": 429,
"message": "Przekroczono limit szybkości. Spróbuj ponownie w ciągu 5 sekund.
}

Kroki rozwiązywania problemów

  • Błąd HTTP 403 — Zabronione może być zgłoszony, gdy zaimplementowano jakiekolwiek zasady ograniczeń dostępu.

  • Sprawdź ślad inspektora usługi APIM i zwróć uwagę na istnienie zasad „ip-filter”, które filtrują (zezwalają/odrzucają) wywołania z określonych adresów IP i/lub zakresów adresów.

  • Aby sprawdzić zakres zasad "ip-filter", wybierz przycisk Oblicz obowiązujące zasady . Jeśli nie widzisz żadnych zasad ograniczeń dostępu wdrożonych w żadnym zakresie, następny krok weryfikacji powinien zostać wykonany na poziomie produktu, przechodząc do skojarzonego produktu, a następnie klikając opcję Zasady.

    <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>
    
  • W przypadku drugiego problemu (HTTP 429 — zbyt wiele żądań) wykonamy tę samą procedurę, sprawdzając ślad inspektora APIM i sprawdzając, czy istnieją jakieś zasady "rate-limit" lub "rate-limit-by-key" zaimplementowane w dowolnym zakresie.

  • Jeśli obliczysz obowiązujące zasady, należy zauważyć zasady ograniczeń dostępu (rate-limit-by-key) zaimplementowane w zakresie globalnym, tj. w obszarze "Przetwarzanie przychodzące" w opcji "Wszystkie interfejsy API".

    <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>
    

Przeczytaj więcej na temat zasad filtru ip i rate-limit-by-key w usłudze APIM.

Skontaktuj się z nami, aby uzyskać pomoc

Jeśli masz pytania lub potrzebujesz pomocy, utwórz wniosek o pomoc techniczną lub zadaj pytanie w społeczności wsparcia dla platformy Azure. Możesz również przesłać opinię o produkcie do społeczności opinii na temat platformy Azure.