Implementazione dell'app OAuth 2.0

*Questo contenuto è tradotto usando AI (Beta) e potrebbe contenere errori. Per visualizzare questa pagina in inglese, clicca qui.

Open Cloud supporta il flusso di autorizzazione OAuth 2.0 con e senza PKCE, a seconda se i tuoi client sono confidenziali o pubblici.

  • Clienti 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.
  • Clienti pubblici sono app che non possono mantenere segreti, come app per browser mobile e web.

Consigliamo il flusso di codice di autorizzazione OAuth 2.0 con PKCE per tutti i client e lo richiediamo per i client pubblici.

Per implementare il flusso di codice di autorizzazione, la tua app esegue i seguenti passaggi:

  1. Genera un verificatore di codice e una sfida di codice (solo PKCE).Questo ti consente di includere una sfida nelle tue richieste piuttosto che il segreto del client, che migliora la sicurezza.
  2. Invia una richiesta GET allaendpoint di autorizzazione con i parametri appropriati.
  3. Gestisci la Richiamadi autorizzazione.Dopo aver ottenuto l'autorizzazione, usa il codice di autorizzazione da Roblox in una richiesta di reindirizzamento all'URL che hai specificato durante la Creazionidell'app.Analizza il codice di autorizzazione per un uso successivo.
  4. Invia una richiesta POST alla fine del token con il codice di autorizzazione.Se riuscito, ricevi accesso e token di aggiornamento con cui effettuare chiamate API.
  5. Chiama qualsiasi Open Cloud API che supporti l'autenticazione OAuth 2.0 in base alla documentazione di riferimento per le risorse che vuoi Accesso.

Le seguenti sezioni descrivono ogni passo in maggiore dettaglio.

Genera una sfida di codice (solo per PKCE)

Prima di avviare il processo di autorizzazione, devi generare una sfida di codice da un verificatore di codice.Puoi utilizzare le librerie o le funzioni integrate nel linguaggio di programmazione di tua scelta per creare il verificatore di codice, calcolare l'hash e eseguire l' encoding Base64 per generare la sfida del codice.

Quando si crea il verificatore del codice, utilizzare solo caratteri non riservati, tra cui maiuscole e minuscole lettere (A-Z, a-z), cifre decimali (0-9), trattini (-), periodo (.), sottolineature (_) e tilde (~), 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 codice e generare la sfida del 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, hai bisogno sia del verificatore del codice che dei valori di sfida in passi successivi.

Costruisci l'URL di autorizzazione

Per avviare il processo di autorizzazione dell'utente, costruisci un URL di autorizzazione con i parametri richiesti:

  • client_id : L'ID cliente della tua applicazioneottenuto dopo aver registrato la tua app .
  • redirect_uri : L' URI di reindirizzamento della tua applicazione, il punto di rientro della tua applicazione.
  • scope : Gli scopi richiesti che definiscono i permessi di accesso di cui la tua app ha bisogno in una lista separata per spazio.
  • response_type : Impostalo su code per indicare il flusso del codice di autorizzazione. Richiesto solo per PKCE
  • code_challenge : La sfida del codice generata da un verificatore di codice.
  • code_challenge_method : Imposta questo valore del 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 opaco e sicuro per mantenere lo stato tra la richiesta e il Richiama. Richiesto solo per non-PKCE
  • client_secret : Il segreto del cliente della tua applicazioneottenuto dopo aver registrato la tua app .Se stai usando l'autenticazione con PKCE, ommetti questo parametro.L'URL della richiesta di autorizzazione deve essere ben formattato, come nel seguente esempio:
URL di autorizzazione PKCE di 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 guidati attraverso il flusso di autorizzazione. Se ha successo, Roblox reindirizza l'utente al redirect_uri specificato.

Rispondi alle richieste di autorizzazione

Quando un flusso di autorizzazione ha successo, la tua app riceve una richiesta GET da parte del server di autorizzazione Roblox al redirect_uri che hai specificato.Nella Richiesta, ricevi code (codice di autorizzazione) e state (se hai fornito un valore in precedenza) parametri.

  • 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 del server backend ha modi standard per accedere ai parametri di query come oggetti decodificati.Dovrai ottenere il parametro code e usarlo per scambiare per token 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 il tuo URI di reindirizzamento per essere https://example.com/redirect.

Esempio URL di reindirizzamento

https://example.com/redirect?code=10c45PNuquKnFJ6pUcy5-fHkghEM6lSegm-7hj9mVEprub1dSDuStuKK_EAUXY7AHTD63xcnmvxSLthp-C8g3jzIGZVzuXSd20Y2dEYI9hx0LZmPg95ME4z2K03UheiZbroyXUjYyB3ReoMqobzDVPzyx6IS8kj2Uu-11Xq_0JiTYxtDatuqXRNIAmJT8gMJmbSyOLOP_vnDvbeMUiBsqCRrkTGVbWSwYSc8sTVVE-535kYdqQOgNjH1ffCoZLGl8YYxLnpb2CXJlRQPrcjkA&state=6789

Se l'autorizzazione fallisce, la tua app riceve una richiesta GET di reindirizzamento specificata con i parametri error , error_description e state (se Applicabile).

  • 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 fallimento.

Scambia un codice di autorizzazione per token di accesso

Quando hai analizzato l'autorizzazione code, scambiala con i token per accedere alle risorse Roblox desiderate:

  1. Richiedi un token di accesso e un token di aggiornamento inviando una richiesta POST a il punto di scambio di token.La richiesta deve includere il codice di autorizzazione, l'ID del client e il valore del verificatore del codice (PKCE) o il segreto del client (non-PKCE) nel formato x-www-form-urlencoded.

  2. Analizza i token applicabili dalla risposta ricevuta.Il token di accesso è valido per 15 minuti.Conserva il token di aggiornamento in modo sicuro, tipicamente sul lato server, in modo da poterlo utilizzare per ottenere nuovi token in futuro.

    Risposta endpoint 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"
    }

Fai una chiamata a un metodo di risorsa

Ora che hai il token di accesso richiesto, puoi usarlo per effettuare chiamate autenticate ai metodi della risorsa.Includi il token di accesso nell'intestazione di tutte le richieste API per autorizzarle.

Ad esempio, puoi testare se la tua app funziona correttamente andando attraverso l'intero flusso di autorizzazione e quindi facendo una richiesta alla fine del punto di informazione dell'utente con un token di accesso.Assicurati di avere il openid o entrambi i openid e profile scope prima di chiamare questo endpoint.Se riuscito, la risposta da quel endpoint sembra questo:

Risposta alle informazioni utente di esempio

{
"sub": "12345678",
"name": "Jane Doe",
"nickname": "robloxjanedoe",
"preferred_username": "robloxjanedoe",
"created_at": 1607354232,
"profile": "https://www.roblox.com/utenti/12345678/profilo"
}