Udostępnij za pośrednictwem


Zapora aplikacji (wersja zapoznawcza) dla usługi Azure SignalR Service

Zapora aplikacji zapewnia zaawansowaną kontrolę nad połączeniami klientów w systemie rozproszonym. Przed rozpoczęciem pracy z jej funkcjonalnością i konfiguracją wyjaśnijmy, czego nie robi zapora aplikacji:

  1. Nie zastępuje uwierzytelniania. Zapora działa za warstwą uwierzytelniania połączenia klienta.
  2. Nie jest to związane z kontrolą dostępu warstwy sieciowej.

Co robi zapora aplikacji?

Zapora aplikacji składa się z różnych list reguł. Obecnie istnieją dwie listy reguł nazywane regułami liczby połączeń klienta i regułami kontroli ruchu klienta. Przyszłe aktualizacje będą obsługiwać więcej list reguł w celu kontrolowania aspektów, takich jak okres istnienia połączenia.

Te wytyczne są podzielone na trzy części:

  1. Wprowadzenie do różnych reguł zapory aplikacji.
  2. Instrukcje dotyczące konfigurowania reguł przy użyciu portalu lub Bicep po stronie usługi SignalR.
  3. Kroki konfigurowania tokenu po stronie serwera.

Wymagania wstępne

  • Usługa Azure SignalR Service w warstwie Premium.

Reguły liczby połączeń klienta

Reguły liczby połączeń klienta ograniczają współbieżne połączenia klienckie. Gdy klient próbuje ustanowić nowe połączenie, reguły są sprawdzane sekwencyjnie. Jeśli zostanie naruszona jakakolwiek reguła, połączenie zostanie odrzucone z kodem stanu 429.

ThrottleByUserIdRule

Ta reguła ogranicza współbieżne połączenia użytkownika. Jeśli na przykład użytkownik otworzy wiele kart przeglądarki lub zaloguje się przy użyciu różnych urządzeń, możesz użyć tej reguły, aby ograniczyć liczbę współbieżnych połączeń dla tego użytkownika.

Uwaga

ThrottleByJwtSignatureRule

Ta reguła ogranicza współbieżne połączenia tego samego tokenu, aby uniemożliwić złośliwym użytkownikom ponowne użycie tokenów w celu ustanowienia nieskończonych połączeń, co może wyczerpać limit przydziału połączeń.

Uwaga

  • Nie jest gwarantowane domyślnie, że tokeny generowane przez zestaw SDK są różne za każdym razem. Chociaż każdy token zawiera znacznik czasu, ten znacznik czasu może być taki sam, jeśli ogromne tokeny są generowane w ciągu kilku sekund. Aby uniknąć identycznych tokenów, wstaw losowe oświadczenie do oświadczeń tokenu. Zobacz Konfigurowanie tokenu dostępu.

ThrottleByJwtCustomClaimRule

Bardziej zaawansowane połączenia mogą być pogrupowane w różne grupy zgodnie z oświadczeniem niestandardowym. Połączenia z tym samym oświadczeniem są agregowane w celu sprawdzenia. Można na przykład dodać parametr ThrottleByJwtCustomClaimRule , aby zezwolić na 5 równoczesnych połączeń z niestandardową nazwą oświadczenia freeUser.

Uwaga

  • Reguła ma zastosowanie do wszystkich oświadczeń o określonej nazwie oświadczenia. Agregacja liczby połączeń dotyczy tego samego oświadczenia (w tym nazwy oświadczenia i wartości oświadczenia). Właściwość ThrottleByUserIdRule jest specjalnym przypadkiem tej reguły, która ma zastosowanie do wszystkich połączeń z oświadczeniem userIdentity.

Ostrzeżenie

  • Unikaj używania zbyt agresywnego parametru maxCount. Połączenia klienckie mogą być zamykane bez kończenia uzgadniania PROTOKOŁU TCP. Usługa SignalR service nie może natychmiast wykryć tych połączeń "w połowie zamkniętych". Połączenie jest traktowane jako aktywne do momentu awarii pulsu. W związku z tym agresywne strategie ograniczania przepustowości mogą nieoczekiwanie ograniczać klientów. Łagodniejsze podejście polega na pozostawieniu buforu dla liczby połączeń, na przykład: dwukrotnie maksymalnej liczby.

Reguły sterowania ruchem klienta

Reguły kontroli ruchu klienta ograniczają przepływność przychodzącą połączeń klienckich. Gdy klient próbuje wysłać komunikat, reguły są sprawdzane sekwencyjnie. W każdym oknie agregacji rozmiar komunikatu zostanie zagregowany w celu sprawdzenia maksymalnej liczby komunikatów przychodzących. Jeśli zostanie naruszona żadna reguła, połączenie zostanie rozłączone.

TrafficThrottleByUserIdRule

Ta reguła ogranicza przepływność przychodzącą użytkownika.

TrafficThrottleByJwtSignatureRule

Ta reguła ogranicza przepływność przychodzącą każdego tokenu.

TrafficThrottleByJwtCustomClaimRule

Ta reguła ogranicza przepływność przychodzącą tego samego oświadczenia.

Konfigurowanie zapory aplikacji

Aby użyć zapory aplikacji, przejdź do bloku Zapora aplikacji usługi SignalR w witrynie Azure Portal i kliknij przycisk Dodaj, aby dodać regułę.

Zrzut ekranu przedstawiający dodawanie reguł zapory aplikacji dla usługi Azure SignalR w portalu.

Konfigurowanie tokenu dostępu

Reguły zapory aplikacji obowiązują tylko wtedy, gdy token dostępu zawiera odpowiednie oświadczenie. Reguła jest pomijana , jeśli połączenie nie ma odpowiedniego oświadczenia.

Poniżej przedstawiono przykład dodawania identyfikatora użytkownika lub oświadczenia niestandardowego w tokenie dostępu w trybie domyślnym:

services.AddSignalR().AddAzureSignalR(options =>
    {
        //  Add necessary claims according to your rules.
        options.ClaimsProvider = context => new[]
        {
            // Add UserId: Used in ThrottleByUserIdRule
            new Claim(ClaimTypes.NameIdentifier, context.Request.Query["username"]),

            // Add unique claim: Ensure uniqueness when using ThrottleByJwtSignatureRule. 
            // The token name is not important. You could change it as you like.
            new Claim("uniqueToken", Guid.NewGuid().ToString()),
           
            // Custom claim: Used in ThrottleByJwtCustomClaimRule
            new Claim("<Custom Claim Name>", "<Custom Claim Value>"),
            // Custom claim example
            new Claim("freeUser", context.Request.Query["username"]),
        };
    });

Logika trybu bezserwerowego jest podobna.

Aby uzyskać więcej informacji, zobacz Negocjowanie klienta.