Open Cloud supporta il flusso di autorizzazione OAuth 2.0 con e senza PKCE , a seconda se i tuoi client sono privati o pubblici.
- I client confidenziali sono app che sono in grado di mantenere le credenziali confidenziali, come un sito Web che può archiviare e recuperare in modo sicuro segreti sul suo backend.
- I client pubblici sono app che non possono mantenere segreti, come le app per dispositivi mobili e browser web.
Raccomandiamo il flusso di autorizzazione OAuth 2.0 con PKCE per tutti i client e richiedere per i client pubblici.
Per implementare il flusso di autorizzazione, la tua app esegue i seguenti passaggi:
- Genera un verificatore di codice e una sfida di codice (solo PKCE). Ciò ti consente di includere una sfida nelle tue richieste invece che nel segreto client, il che migliora la sicurezza.
- Invia una richiesta GET all'autorizzazione con i parametri appropriati.
- Handling the authorization Richiama. After obtaining authorization, use the authorization code from Roblox in a redirect request to the URL you specified during app Creazioni. Parse the authorization code for later use.
- Invia una richiesta POST all'endpoint del token con il codice di autorizzazione. Se riuscito, ricevi l'accesso e aggiorna i gettoni con cui effettuare le chiamate API.
- Chiama qualsiasi API Open Cloud che supporta l'autenticazione OAuth 2.0 in base alla documentazione di riferimento per le risorse che vuoi Accesso.
Le seguenti sezioni descrivono ciascun passo in modo più dettagliato.
Generazione di una sfida di codice (per PKCE soltanto)
Prima di iniziare il processo di autorizzazione, è necessario generare una sfida di codice da un verificatore di codice. Puoi utilizzare le librerie o le funzioni incorporate nella lingua di programmazione della tua scelta per generare il verificatore di codice, calcolare l'hashes e eseguire l'encodamento Base64 per generare la sfida di codice.
Quando crei il verificatore del codice, usa solo caratteri non predisposti, tra cui lettere maiuscole e minuscole (A-Z , a-z), numeri decimali (0-9), punti virgola (-), punto (.), sottolineatura ( ) e tire (-), con una lunghezza minima di 43 caratteri e una lunghezza massima di 128 caratteri.
L'esempio seguente mostra come utilizzare Javascript per creare un verificatore di codici e generare la sfida di codice utilizzando l'algoritmo di hashing 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));
Per PKCE, è necessario sia il verificatore di codice che i valori di sfida in ulteriori passaggi.
Costruzione dell'URL dell'autorizzazione
Per iniziare il processo di autorizzazione dell'utente, costruisci un URL di autorizzazione con i parametri richiesti:
- client_id : Il client ID della tua applicazioneottenuto dopo aver registrato la tua app .
- redirect_uri : La tua URL di reindirizzamento dell'applicazione, il punto di rientro della tua applicazione.
- scope : Le scorse richieste che definiscono le autorizzazioni di accesso che la tua app ha bisogno in una lista separata spaziatamente.
- response_type : Impostalo su code per indicare il flusso di autorizzazione. Richiesto solo per PKCE
- code_challenge : La sfida del codice generata da un verificatore di codice.
- code_challenge_method : Imposta questo valore di parametro a S256 per indicare che la sfida del codice è stata trasformata utilizzando l'algoritmo SHA-256, il metodo di sfida del codice più ampiamente supportato e sicuro.
- state : Un valore casuale, sicuro e persistente per mantenere lo stato tra la richiesta e il Richiama. Richiesto solo per non-PKCE
- client_secret : Il client secret del tuo applicazioneottenuto dopo aver registrato il tuo app . Se stai usando l'autenticazione con PKCE, ometti questo parametro. Il tuo richiesta di autorizzazione URL deve essere ben formattato, come nel seguente esempio:
URL dell'autorizzazione PKCE esempio
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
Quando gli utenti visitano l'URL, vengono attraversati dal flusso di autorizzazione. Se il flusso è di successo, Roblox reindirizza l'utente al redirect_uri specificato.
Risposte all'autorizzazione
Quando un flusso di autorizzazione è di successo, la tua app riceve una richiesta GET dal server di autorizzazione Roblox all'indirizzo redirect_uri che hai specificato. Nel Richiesta, ricevi code (il codice di autorizzazione) e 1> state1> (se hai fornito un valore in precedenza).
Il parametro code contiene un codice di autorizzazione che l'app può scambiare per un token di accesso dal Serverdi autorizzazione. La maggior parte delle lingue di backend ha modi standard per accedere ai parametri di richiesta come oggetti decorati. Avrai bisogno di ottenere il parametro code e usarlo per scambiare per gettoni di accesso.
Il parametro state è un valore opaco che inizialmente hai fornito nella Richiestadi autorizzazione. Puoi utilizzare questo parametro per mantenere lo stato o il contesto del processo di autorizzazione.
Ad esempio, potresti ricevere una richiesta GET con l'URL seguente se hai specificato la tua URL di reindirizzamento per essere https://example.com/redirect .
URL di Rinascita di Esempio
https://example.com/redirect?code=10c45PNuquKnFJ6pUcy5-fHkghEM6lSegm-7hj9mVEprub1dSDuStuKK_EAUXY7AHTD63xcnmvxSLthp-C8g3jzIGZVzuXSd20Y2dEYI9hx0LZmPg95ME4z2K03UheiZbroyXUjYyB3ReoMqobzDVPzyx6IS8kj2Uu-11Xq_0JiTYxtDatuqXRNIAmJT8gMJmbSyOLOP_vnDvbeMUiBsqCRrkTGVbWSwYSc8sTVVE-535kYdqQOgNjH1ffCoZLGl8YYxLnpb2CXJlRQPrcjkA&state=6789
Se l'autorizzazione non funziona, il tuo app riceve una richiesta GET alla URL specificata con il error , error_description e 1> state1> (se Applicabile) parametri.
- Il parametro error indica l'errore specifico di OAuth 2.0 che si è verificato durante il processo di autorizzazione.
- Il parametro error_description fornisce ulteriori dettagli dell'errore.
- Il parametro state aiuta la tua app a mantenere lo stato nel caso di un fallo.
Scambio di un codice di autorizzazione per i gettoni di accesso
Quando hai parzialmente analizzato l'autorizzazione code , scambiala con gettoni per accedere alle risorse desiderate Roblox:
Richiedi un token di accesso e aggiorna il token inviando una richiesta POST al token exchange endpoint . La richiesta deve includere il codice di autorizzazione, l'ID del client e il valore del verificatore del codice (PKCE) o del segreto del client in x-www-form-urlencoded format.
Parola d'ordine: Parola d'ordine: Parola d'ordine: Parola d'ordine: Parola d'ordine: Parola d'ordine: Parola d'ordine: Parola d'ordine: Parola d'ordine: Parola d'ordine: Parola d'ordine: Parola d'ordine: Parola d'ordine: Parola d'ordine: Parola d'ordine: Parola d'ordine: Parola d'ordine: Parola d'ordine: Parola d'ordine: Parola d'ordine: Parola d'ordine: Parola d'ordine: Parola d'ordine: Parola d'ordine: Parola d'ordine: Parola d'ordine: Parola
Risposta del punto di interfaccia del token di esempio{"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"}
Fare un call a un metodo risorsa
Ora che hai il token di accesso richiesto, puoi usarlo per fare chiamate autenticate ai metodi delle risorse. Includi il token di accesso nell'header di tutte le richieste API per autorizzarlo.
Ad esempio, puoi testare se la tua app funziona correttamente facendo attraverso l'intero flusso di autorizzazione e quindi facendo una richiesta GET all'端口 utente con un access token. Assicurati di avere il openid o entrambi i 1> openid1> e 4>
Risposta dell'esempio di informazioni dell'utente
{
"sub": "12345678",
"name": "Jane Doe",
"nickname": "robloxjanedoe",
"preferred_username": "robloxjanedoe",
"created_at": 1607354232,
"profile": "https://www.roblox.com/utes/12345678/profile"
}