Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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:
- Nie zastępuje uwierzytelniania. Zapora działa za warstwą uwierzytelniania połączenia klienta.
- 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:
- Wprowadzenie do różnych reguł zapory aplikacji.
- Instrukcje dotyczące konfigurowania reguł przy użyciu portalu lub Bicep po stronie usługi SignalR.
- 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
- Identyfikator UserId musi istnieć w tokenie dostępu, aby ta reguła działała. Zobacz Konfigurowanie tokenu dostępu.
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łę.
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.