OAuth 2.0 oferuje wiele trybów autoryzacji, spośród których najczęściej stosowany i bezpieczny jest Authorization Code Grant. code_challenge jest funkcją zwiększaną bezpieczeństwa w tym trybie, głównie wykorzystywaną w mechanizmie PKCE (Proof Key for Code Exchange).
Czym jest PKCE?
PKCE (Proof Key for Code Exchange) to rozszerzenie zaprojektowane w celu zwiększenia bezpieczeństwa wzorca kodu autoryzacyjnego OAuth 2.0, szczególnie gdy jest używany w publicznych klientach, takich jak aplikacje JavaScript lub aplikacje mobilne działające w przeglądarkach. PKCE zapobiega przechwytywaniu i niewłaściwemu użyciu kodów autoryzacji poprzez dodanie dodatkowego kroku uwierzytelniania do żądań autoryzacji.
code_challenge Rola
code_challenge jest częścią mechanizmu PKCE, generowanym i wysyłanym podczas fazy żądania autoryzacji. Opiera się na wartości tajnej (zwanej code_verifier), przekształcanej przez algorytm haszujący, taki jak S256. Celem code_challenge jest zapewnienie podstawy walidacyjnej dla kolejnych żądań tokenów bez bezpośredniego ujawniania code_verifier.
Generowanie i wykorzystanie code_challenge oraz code_verifier
Pokolenie code_verifier: code_verifier jest losowo generowanym ciągiem o wysokiej entropii,Długość znaków (między 43 a 128). Domyślna wartość to 43。
Pokolenie code_challenge: Przy użyciu code_verifier code_challenge jest generowany za pomocą algorytmu haszującego (takiego jak S256). Dla S256 code_challenge jest kodowaniem URL Base64 wartości code_verifier SHA-256, ale znak = dosypujący z kodowania musi zostać usunięty, a długość wyjścia musi wynosić 43 znaki (ponieważ po kodowaniu URL Base64 każde 4 znaki reprezentują 3 bajty, ale ostatni blok znaków może mieć mniej niż 4 znaki, więc długość może się nieznacznie różnić po usunięciu = znaków).
Używaj code_challenge w wnioskach o autoryzację: Podczas inicjowania żądania autoryzacji code_challenge jest wysyłany jako jeden z parametrów żądania do serwera autoryzacji.
Wykorzystanie code_verifier w żądaniach tokenów: Gdy serwer autoryzacji zwraca kod autoryzacyjny, klient używa tego kodu wraz z wcześniej wygenerowanym code_verifier do żądania dostępu do punktu końcowego tokena. Serwer autoryzacji weryfikuje, czy code_challenge i code_verifier się zgadzają, zapewniając, że żądanie jest inicjowane przez oryginalnego klienta.
Generowanie PKCE
Internetowe narzędzia generowania PKCE:Logowanie do linku jest widoczne.
Kod C# generowany jest następująco:
Jak pokazano poniżej:
Odniesienie:
Logowanie do linku jest widoczne.
Logowanie do linku jest widoczne. |