Open Cloud wspiera przepływ autoryzacji OAuth 2.0 z i bez PKCE, w zależności od tego, czy twoi klienci są poufni czy publiczne.
- Tajne klienty to aplikacje, które są w stanie utrzymywać poufne dane, takie jak strona internetowa, która może bezpiecznie przechowywać i odzyskiwać sekrety na swoim tylnym planie.
- Publiczni klienci to aplikacje, które nie mogą utrzymywać tajemnic, takie jak aplikacje mobilne i przeglądarki internetowe.
Polecamy przepływ autoryzacji kodu OAuth 2.0 z PKCE dla wszystkich klientów i wymagamy go od klientów publicznych.
Aby wdrożyć przepływ kodu autoryzacji, twoja aplikacja wykonuje następujące kroki:
- Generuj weryfikator kodu i wyzwanie kodowe (tylko PKCE).Umożliwia to uwzględnienie wyzwania w żądaniach, a nie sekretu klienta, co poprawia bezpieczeństwo.
- Wyślij żądanie GET do punktu autoryzacji z odpowiednimi parametrami.
- Rozwiąż wezwanie autoryzacji.Po uzyskaniu autoryzacji użyj kodu autoryzacji z Roblox w żądaniu przekierowania do URL, który określiłeś podczas dziełoaplikacji.Zanalizuj kod autoryzacji do późniejszego użycia.
- Wyślij prośbę POST o wysłanie do punktu końcowego tokenów z kodem autoryzacji.Jeśli zakończy się sukcesem, otrzymasz tokeny dostępu i odświeżenia, z którymi można wykonać wezwania API.
- Wezwij dowolną otwartą chmurę API, która wspiera autoryzację OAuth 2.0 w oparciu o dokumentację referencyjną dla zasobów, do których chcesz uzyskać dostęp.
Następujące sekcje opisują każdy krok bardziej szczegółowo.
Wygeneruj wyzwanie kodowe (tylko dla PKCE)
Zanim rozpoczniesz proces autoryzacji, musisz wygenerować wyzwanie kodowe z weryfikatorem kodu.Możesz używać bibliotek lub wbudowanych funkcji w języku programowania swojego wyboru, aby stworzyć weryfikator kodu, obliczyć hasz i wykonać kodowanie Base64, aby wygenerować wyzwanie kodowe.
Podczas tworzenia weryfikatora kodu użyj tylko niezarezerwowanych znaków, w tym dużych i małych liter (A-Z, a-z), dziesiętnych cyfr (0-9), spacji (-), okresu (.), podświetlenia (_) i znaku tilde (~), z minimalną długością 43 znaków i maksymalną długością 128 znaków.
Poniższy przykład pokazuje, jak używać Javascript, aby stworzyć weryfikator kodu i wygenerować wyzwanie kodowe za pomocą algorytmu SHA-256:
Generate Code Challenge
const crypto = require('crypto');
// base64URL encode the verifier and challenge
function base64URLEncode(str) {
return str.toString('base64')
.replace(/\+/g, '-')
.replace(/\//g, '_')
.replace(/=/g, '');
}
// create sha256 hash from code verifier
function sha256(buffer) {
return crypto.createHash('sha256').update(buffer).digest(`base64`);
}
// create a random code verifier
var code_verifier = base64URLEncode(crypto.randomBytes(32));
// generate a challenge from the code verifier
var code_challenge = base64URLEncode(sha256(code_verifier));
W przypadku PKCE potrzebujesz zarówno weryfikatora kodu, jak i wartości wyzwań w późniejszych krokach.
Stwórz URL autoryzacji
Aby rozpocząć proces autoryzacji użytkownika, stwórz URL autoryzacji z wymaganymi parametrami:
- client_id : ID klienta aplikacjauzyskane po rejestracji aplikacji .
- redirect_uri : Adres URL przekierowania aplikacja, punkt ponownego wejścia aplikacja.
- scope : Żądane zakresy, które określają uprawnienia dostępu, których Twoja aplikacja potrzebuje w oddzielonej przestrzeni.
- response_type : Ustaw to na code , aby wskazać przepływ kodu autoryzacji. Wymagane tylko dla PKCE
- code_challenge : Wyzwanie kodowe generowane z weryfikatora kodu.
- code_challenge_method : Ustaw wartość parametru na S256 , aby wskazać, że wyzwanie kodowe zostało przekształcone za pomocą algorytmu SHA-256, najpowszechniejszego i najbardziej bezpiecznego algorytmu wyzwania kodowego.
- state : Niewidzialna, bezpieczna losowa wartość do utrzymywania stanu między żądaniem a powrotem. Wymagane tylko dla nie-PKCE
- client_secret : Sekret klienta aplikacjauzyskany po zarejestrowaniu aplikacji .Jeśli używasz uwierzytelniania z PKCE, pomiń ten parametr.Adres URL żądania autoryzacji musi być dobrze sformatowany, tak jak w następnym przykładzie:
Przykładowy URL autoryzacji PKCE
https://apis.roblox.com/oauth/v1/authorize?client_id=7290610391231237934964&code_challenge=PLEKKVCjdD1V_07wOKlAm7P02NC-LZ_1hQfdu5XSXEI&code_challenge_method=S256&redirect_uri=https://example.com/redirect&scope=openid%20profile&response_type=code&state=abc123
Kiedy użytkownicy odwiedzają URL, są przekierowywani przez przepływ autoryzacji. Jeśli zakończy się sukcesem, Roblox przekieruje użytkownika do określonego redirect_uri.
Ręczne odwołania do autoryzacji
Gdy przepływ autoryzacji zakończy się sukcesem, twoja aplikacja otrzyma żądanie GET od serwera autoryzacji Roblox w redirect_uri, który określiłeś.W prośbaotrzymujesz code (kod autoryzacji) i state (jeśli wcześniej podałeś wartość) parametry.
Parametr code zawiera kod autoryzacji, który aplikacja może wymienić na token dostępu z serwera autoryzacji.Większość języków serwerów tylne ma standardowe sposoby dostępu do parametrów zapytania jako zdekodowane obiekty.Musisz uzyskać parametr code i użyć go do wymiany na tokeny dostępu.
Parametr state jest niedostępną wartością, którą pierwotnie podałeś w żądaniu autoryzacji.Możesz użyć tego parametru, aby utrzymać stan lub kontekst procesu autoryzacji.
Na przykład możesz otrzymać żądanie GET z następującym URL, jeśli określiłeś swoją przekierowaną URI jako https://example.com/redirect.
Przykładowy URL przekierowania
https://example.com/redirect?code=10c45PNuquKnFJ6pUcy5-fHkghEM6lSegm-7hj9mVEprub1dSDuStuKK_EAUXY7AHTD63xcnmvxSLthp-C8g3jzIGZVzuXSd20Y2dEYI9hx0LZmPg95ME4z2K03UheiZbroyXUjYyB3ReoMqobzDVPzyx6IS8kj2Uu-11Xq_0JiTYxtDatuqXRNIAmJT8gMJmbSyOLOP_vnDvbeMUiBsqCRrkTGVbWSwYSc8sTVVE-535kYdqQOgNjH1ffCoZLGl8YYxLnpb2CXJlRQPrcjkA&state=6789
Jeśli autoryzacja nie powiedzie się, twoja aplikacja otrzyma żądanie GET od określonej URL przekierowania z parametrami error, error_description i state (jeśli mające zastosowaniezastosowanie).
- Parametr error wskazuje na konkretny błąd OAuth 2.0, który wystąpił podczas procesu autoryzacji.
- Parametr error_description dostarcza dodatkowe szczegóły błędu.
- Parametr state pomaga twojej aplikacji utrzymywać stan w przypadku awarii.
Wymień kod autoryzacji na tokeny dostępu
Kiedy przetworzysz autoryzację code, zamień ją na żetony, aby uzyskać dostęp do żądanych zasobów Roblox:
Poproś o token dostępu i odśwież token, wysyłając prośbę o wymianę tokenów do punktu końcowego wymiany tokenów .Wniosek musi zawierać kod autoryzacji, identyfikator klienta i wartość weryfikatora kodu (PKCE) lub sekret klienta (nie-PKCE) w formacie x-www-form-urlencoded.
Zanalizuj odpowiednie tokeny otrzymane z odpowiedzi.Token dostępu jest ważny przez 15 minut.Zapisz żeton odświeżający bezpiecznie, zwykle po stronie serwera, aby móc go używać do uzyskiwania nowych żetonów w przyszłości.
Odpowiedź na koniec punktu tokenowego przykładu{"access_token": "eyJhbGciOiJFUzI1NiIsImtpZCI6IlBOeHhpb2JFNE8zbGhQUUlUZG9QQ3FCTE81amh3aXZFS1pHOWhfTGJNOWMiLCJ0eXAiOiJKV11234.eyJzdWIiOiIyMDY3MjQzOTU5IiwiYWlkIjoiM2Q2MWU3NDctM2ExNS00NTE4LWJiNDEtMWU3M2VhNDUyZWIwIiwic2NvcGUiOiJvcGVuaWQ6cmVhZCBwcm9maWxlOnJlYWQiLCJqdGkiOiJBVC5QbmFWVHpJU3k2YkI5TG5QYnZpTCIsIm5iZiI6MTY5MTYzOTY5OCwiZXhwIjoxNjkxNjQwNTk4LCJpYXQiOjE2OTE2Mzk2OTgsImlzcyI6Imh0dHBzOi8vYXBpcy5yb2Jsb3guY29tL29hdXRoLyIsImF1ZCI6IjcyOTA2MTAzOTc5ODc5MzQ5Nj1234.BjwMkC8Q5a_iP1Q5Th8FrS7ntioAollv_zW9mprF1ats9CD2axCvupZydVzYphzQ8TawunnYXp0Xe8k0t8ithg","refresh_token": "eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2Q0JDLUhTNTEyIiwia2lkIjoidGpHd1BHaURDWkprZEZkREg1dFZ5emVzRWQyQ0o1NDgtUi1Ya1J1TTBBRSIsInR5cCI6IkpXVCJ9..nKYZvjvXH6msDG8Udluuuw.PwP-_HJIjrgYdY-gMR0Q3cabNwIbmItcMEQHx5r7qStVVa5l4CbrKwJvjY-w9xZ9VFb6P70WmXndNifnio5BPZmivW5QkJgv5_sxLoCwsqB1bmEkz2nFF4ANLzQLCQMvQwgXHPMfCK-lclpVEwnHk4kemrCFOvfuH4qJ1V0Q0j0WjsSU026M67zMaFrrhSKwQh-SzhmXejhKJOjhNfY9hAmeS-LsLLdszAq_JyN7fIvZl1fWDnER_CeDAbQDj5K5ECNOHAQ3RemQ2dADVlc07VEt2KpSqUlHlq3rcaIcNRHCue4GfbCc1lZwQsALbM1aSIzF68klXs1Cj_ZmXxOSOyHxwmbQCHwY7aa16f3VEJzCYa6m0m5U_oHy84iQzsC-_JvBaeFCachrLWmFY818S-nH5fCIORdYgc4s7Fj5HdULnnVwiKeQLKSaYsfneHtqwOc_ux2QYv6Cv6Xn04tkB2TEsuZ7dFwPI-Hw2O30vCzLTcZ-Fl08ER0J0hhq4ep7B641IOnPpMZ1m0gpJJRPbHX_ooqHol9zHZ0gcLKMdYy1wUgsmn_nK_THK3m0RmENXNtepyLw_tSd5vqqIWZ5NFglKSqVnbomEkxneEJRgoFhBGMZiR-3FXMaVryUjq-N.Q_t4NGxTUSMsLVEppkTu0Q6rwt2rKJfFGuvy3s12345","token_type": "Bearer","expires_in": 899,"id_token": "eyJhbGciOiJFUzI1NiIsImtpZCI6IkNWWDU1Mi1zeWh4Y1VGdW5vNktScmtReFB1eW15YTRQVllodWdsd3hnNzgiLCJ0eXAiOiJKV11234.eyJzdWIiOiIyMDY3MjQzOTU5IiwibmFtZSI6ImxpbmtzZ29hdCIsIm5pY2tuYW1lIjoibGlua3Nnb2F0IiwicHJlZmVycmVkX3VzZXJuYW1lIjoibGlua3Nnb2F0IiwiY3JlYXRlZF9hdCI6MTYwNzM1NDIzMiwicHJvZmlsZSI6Imh0dHBzOi8vd3d3LnJvYmxveC5jb20vdXNlcnMvMjA2NzI0Mzk1OS9wcm9maWxlIiwibm9uY2UiOiIxMjM0NSIsImp0aSI6IklELnltd3ZjTUdpOVg4azkyNm9qd1I5IiwibmJmIjoxNjkxNjM5Njk4LCJleHAiOjE2OTE2NzU2OTgsImlhdCI6MTY5MTYzOTY5OCwiaXNzIjoiaHR0cHM6Ly9hcGlzLnJvYmxveC5jb20vb2F1dGgvIiwiYXVkIjoiNzI5MDYxMDM5Nzk4NzkzNDk2NCJ9.kZgCMJQGsariwCi8HqsUadUBMM8ZOmf_IPDoWyQY9gVX4Kx3PubDz-Q6MvZ9eU5spNFz0-PEH-G2WSvq2ljDyg","scope": "openid profile"}
Zadzwoń do metody zasobu
Teraz, gdy masz wymagany token dostępu, możesz go użyć do tworzenia uwierzytelnionych połączeń do metod zasobów.Włącz token dostępu do nagłówka wszystkich żądań API, aby je autoryzować.
Na przykład możesz sprawdzić, czy twoja aplikacja działa poprawnie, przechodząc przez cały przepływ autoryzacji, a następnie wysyłając żądanie do punktu końcowego informacji o użytkowniku z tokenem dostępu.Upewnij się, że masz openid lub oba zakresy openid i profile przed wezwaniem tego punktu końcowego.Jeśli zakończy się sukcesem, odpowiedź z tego punktu końcowego wygląda tak:
Odpowiedź na informacje użytkownika przykładowa
{
"sub": "12345678",
"name": "Jane Doe",
"nickname": "robloxjanedoe",
"preferred_username": "robloxjanedoe",
"created_at": 1607354232,
"profile": "https://www.roblox.com/użytkownicy/12345678/profil"
}