Questo documento descrive gli endpoint che è possibile chiamare per implementare il flusso di autorizzazione del codice OAuth 2.0, così come altri endpoint utili per implementare l'autenticazione nelle proprie app.
Base URLhttps://apis.roblox.com/oauth
EndpointsGET v1/authorizePOST v1/tokenPOST v1/token/introspectPOST v1/token/resourcesPOST v1/token/revokeGET v1/userinfoGET .well-known/openid-configuration
Autorizzazione
GET v1/authorize
Ottiene autorizzazione dall'utente per autenticarsi con il proprio account Roblox. Si aspetta un URL di autorizzazione valido costruito con i parametri specificati. Questo endpoint supporta l'autenticazione PKCE.
Parametri della query
| Nome | Descrizione | Richiesto | Esempio |
|---|---|---|---|
| client_id | L'ID client dell'app. | sì | 816547628409595165403873012 |
| redirect_uri | L'URL verso cui gli utenti vengono reindirizzati dopo il completamento del flusso di autorizzazione. | sì | `https://www.roblox.com/example-redirect`` |
| scope | Gli ambiti richiesti, delimitati da uno spazio. Usa l'ambito openid per ricevere un ID token. Usa gli ambiti openid e profile per ottenere ulteriori informazioni sull'utente. | sì | openid profile |
| response_type | Le credenziali che l'app desidera ricevere. Il valore predefinito è il tipo di grant del codice di autorizzazione. | sì | none, code |
| prompt | Specifica quali pagine di autenticazione e consenso vengono mostrate agli utenti. Alcuni schermi sono richiesti per le app di terze parti e non possono essere saltati. | no | none, login, consent, select_account |
| nonce | Il numero crittografico che lega il token con il client. | no | <random_value_1> |
| state | Un valore opaco che previene il furto di richieste tra siti, un tipo di attacco malevolo. Restituito all'app dopo l'autorizzazione. | no | <app-provided-opaque-value> |
| code_challenge | La stringa risultante dall'applicare il code_challenge_method al code_verifier. | no | Stringa codificata Base64-URL |
| code_challenge_method | La funzione applicata al code_verifier. | no | S256 |
Richiesta
Esempio di richiesta per indirizzarsi al flusso di autorizzazionehttps://apis.roblox.com/oauth/v1/authorize?client_id=816547628409595165403873012&redirect_uri=https://my-app.com/redirect&scope=openid&response_type=code&nonce=12345&state=6789
Risposta
Dopo aver chiamato questo endpoint, l'utente viene reindirizzato all'URL di reindirizzamento specificato con il codice di autorizzazione in un parametro di query code. Il codice di autorizzazione:
- Ha una durata di un minuto.
- Può essere riscattato solo una volta.
- È invalido dopo un uso.
Scambio di token
Per ottenere token per accedere alle API, scambia un codice di autorizzazione per un insieme di token riservati. Tutti gli endpoint per i token supportano due tipi di autenticazione client:
- Schema di Autenticazione HTTP Basic con un'intestazione di autorizzazione: Authorization: Basic Base64 encoded(<client_id>:<client_secret>).
- ID client e segreto nel corpo della richiesta come parametri.
La seguente lista descrive i vari token che ricevi da questo endpoint.
Token di accesso - Rappresenta l'autorizzazione di un creatore o utente per un'app di terze parti per accedere alle loro risorse protette di Roblox. È una stringa che denota uno specifico ambito, durata e altri attributi di accesso. Una volta che il server di autorizzazione di Roblox emette un token di accesso all'app, il token:
- È valido per 15 minuti.
- Può essere utilizzato più volte prima di scadere.
- Può essere invalidato prima della scadenza se un utente dell'app revoca l'autorizzazione.
Token di aggiornamento - Aggiorna una sessione di autorizzazione. Un'app può usare il token di aggiornamento per ottenere un nuovo insieme di token, che include un token di accesso, un token di aggiornamento e un ID token. Un token di aggiornamento:
- È valido per 90 giorni.
- Può essere utilizzato solo una volta prima di scadere per aggiornare i token.
- Può essere invalidato prima della scadenza se un utente dell'app revoca l'autorizzazione.
ID token - Fornisce prova che l'identità di un utente è stata autenticata. Il suo contenuto dipende dagli ambiti richiesti e può contenere informazioni di base sull'utente, inclusi il nome visualizzato e il nome utente di Roblox di un utente. L'ID token è solo per scopi di autenticazione dell'identità e non fornisce accesso a nessuna risorsa di Roblox.
POST v1/token
Ottieni un insieme di token con un codice di autorizzazione.
Richiesta
(x-www-form-urlencoded)
| Chiave | Valore |
|---|---|
| code | <codice di autorizzazione> |
| code_verifier | <valore del code verifier pkce> |
| grant_type | authorization_code |
| client_id | <client_id> |
| client_secret | <client_secret> |
Esempio di richiesta per ottenere il tokencurl --location --request POST 'https://apis.roblox.com/oauth/v1/token' \--header 'Content-Type: application/x-www-form-urlencoded' \--data-urlencode 'client_id=840974200211308101' \--data-urlencode 'client_secret=RBX-CR9...St12L' \--data-urlencode 'grant_type=authorization_code' \--data-urlencode 'code=yCnq4ofX1...XmGpdx'
Risposta
Esempio di risposta per ottenere il token
{
"access_token": "...",
"refresh_token": "...",
"token_type": "Bearer",
"expires_in": 899,
"scope": "universe-messaging-service:publish"
}
POST v1/token
Ottieni un insieme di token con un token di aggiornamento.
Richiesta
(x-www-form-urlencoded)
| Chiave | Valore |
|---|---|
| grant_type | refresh_token |
| refresh_token | <refresh_token> |
| client_id | <client_id> |
| client_secret | <client_secret> |
Esempio di richiesta di aggiornamento del tokencurl --location --request POST 'https://apis.roblox.com/oauth/v1/token' \--header 'Content-Type: application/x-www-form-urlencoded' \--data-urlencode 'grant_type=refresh_token' \--data-urlencode 'refresh_token=Ujfstayclfdlbm...BGydlsnU' \--data-urlencode 'client_id=840974200211308101' \--data-urlencode 'client_secret=RBX-CR9...St12L'
Risposta
Esempio di richiesta di aggiornamento del token
{
"access_token": "...",
"refresh_token": "...",
"token_type": "Bearer",
"expires_in": 899,
"scope": "universe-messaging-service:publish"
}
POST v1/token/introspect
Ricevi informazioni su un token. Verifica se il token è attualmente valido e non è ancora scaduto. Utile per la convalida senza stato. Usare solo se l'API a cui stai accedendo non richiede una risorsa, come l'API delle risorse, o se vuoi solo vedere specifici claims del token.
Richiesta
(x-www-form-urlencoded)
| Chiave | Valore |
|---|---|
| token | <access_token>, <refresh_token> o <id_token> |
| client_id | <client_id> |
| client_secret | <client_secret> |
Esempio di richiesta di introspezione del tokencurl --location --request POST 'https://apis.roblox.com/oauth/v1/token/introspect' \--header 'Content-Type: application/x-www-form-urlencoded' \--data-urlencode 'token=eyjlflabtfl...4gxqYBG' \--data-urlencode 'client_id=840974200211308101' \--data-urlencode 'client_secret=RBX-CR9...St12L'
Risposta
Esempio di risposta di introspezione del token
{
"active": true,
"jti": "RT.2GcjvTduKzk6QY9tjTfm",
"iss": "https://apis.roblox.com/oauth/",
"token_type": "Bearer",
"client_id": "840974200211308101",
"aud": "4239311013248676173",
"sub": "1516563360",
"scope": "universe-messaging-service:publish",
"exp": 1676394509,
"iat": 1660842510
}
POST v1/token/resources
Controlla se un token può accedere a una risorsa specifica ottenendo l'elenco delle risorse utente a cui l'utente ha dato accesso. Questo è utile per la convalida con stato.
Richiesta
(x-www-form-urlencoded)
| Chiave | Valore |
|---|---|
| token | <access_token> |
| client_id | <client_id> |
| client_secret | <client_secret> |
Esempio di richiesta per ottenere le risorse del tokencurl --location --request POST 'https://apis.roblox.com/oauth/v1/token/resources' \--header 'Content-Type: application/x-www-form-urlencoded' \--data-urlencode 'token=eyjlflabtfl...4gxqYBG' \--data-urlencode 'client_id=840974200211308101' \--data-urlencode 'client_secret=RBX-CR9...St12L'
Risposta
Il valore U in ids indica che un ambito ha concesso accesso a una risorsa posseduta dal proprietario autorizzato.
Esempio di risposta per ottenere le risorse del token
{
"resource_infos": [
{
"owner": {
"id": "1516563360",
"type": "User"
},
"resources": {
"universe": {
"ids": ["3828411582"]
},
"creator": {
"ids": ["U"]
}
}
}
]
}
POST v1/token/revoke
Revoca una sessione di autorizzazione utilizzando il token di aggiornamento fornito.
Richiesta
(x-www-form-urlencoded)
| Chiave | Valore |
|---|---|
| token | <refresh_token> |
| client_id | <client_id> |
| client_secret | <client_secret> |
Esempio di richiesta di revoca del tokencurl --location --request POST 'https://apis.roblox.com/oauth/v1/token/revoke' \--header 'Content-Type: application/x-www-form-urlencoded' \--data-urlencode 'token=Ujfstayclfdlbm...BGydlsnU' \--data-urlencode 'client_id=840974200211308101' \--data-urlencode 'client_secret=RBX-CR9...St12L'
Risposta
200 OK con una risposta vuota
Informazioni utente
GET /v1/userinfo
Ottiene l'ID utente di Roblox e altri metadati dell'utente.
Richiesta
Intestazione di autorizzazione: Authorization: Bearer <access_token>
Esempio di richiesta di informazioni utentecurl --location --request GET 'https://apis.roblox.com/oauth/v1/userinfo' \--header 'Authorization: Bearer eyjlflabtfl...4gxqYBG'
Risposta
Puoi utilizzare il valore sub per identificare univocamente l'utente. Gli utenti possono cambiare il proprio nome utente e nome visualizzato di Roblox, quindi non utilizzare questi come identificatori unici per riferirsi agli utenti sulla tua app.
| Claim | Descrizione |
|---|---|
| sub | ID utente di Roblox. |
| name | Nome visualizzato di Roblox. |
| nickname | Nome visualizzato di Roblox. |
| preferred_username | Nome utente di Roblox. |
| created_at | Data di creazione dell'account Roblox come timestamp Unix. |
| profile | URL del profilo dell'account Roblox. |
| picture | Immagine del ritratto dell'avatar Roblox. Può essere nullo se l'immagine del ritratto dell'avatar non è ancora stata generata o è stata moderata. |
Esempio di utente con ambito profilo
{
"sub": "1516563360",
"name": "exampleuser",
"nickname": "exampleuser",
"preferred_username": "exampleuser",
"created_at": 1584682495,
"profile": "https://www.roblox.com/users/1516563360/profile",
"picture": "https://tr.rbxcdn.com/03dc2a9abe7b1aacaaf93ea46d5c0646/150/150/AvatarHeadshot/Png"
}
Esempio di utente senza ambito profilo
{
"sub": "1516563360"
}
Rilevamento
Il Documento di scoperta OpenID Connect (OIDC) è un documento JSON che contiene metadati sui dettagli di configurazione di Open Cloud, inclusa un'elenco di ambiti e claims relativi all'identità supportati. Puoi usarlo per scoprire dinamicamente informazioni sugli endpoint e la configurazione OAuth 2.0 di Open Cloud, come l'endpoint di autorizzazione, l'endpoint di token e il set di chiavi pubbliche.
Dopo aver recuperato e recuperato il Documento di scoperta dall'URI del documento di scoperta, puoi ispezionare manualmente i campi nella risposta per verificare le informazioni, oppure puoi creare la tua libreria personalizzata per mappare i campi nello schema di risposta per automatizzare il tuo flusso di lavoro.
GET .well-known/openid-configuration
Risposta
Tutte le risposte del Documento di scoperta seguono lo stesso schema dell'esempio di risposta seguente.
Esempio di risposta del Documento di scoperta
{
"issuer": "https://apis.roblox.com/oauth/",
"authorization_endpoint": "https://apis.roblox.com/oauth/v1/authorize",
"token_endpoint": "https://apis.roblox.com/oauth/v1/token",
"introspection_endpoint": "https://apis.roblox.com/oauth/v1/token/introspect",
"revocation_endpoint": "https://apis.roblox.com/oauth/v1/token/revoke",
"resources_endpoint": "https://apis.roblox.com/oauth/v1/token/resources",
"userinfo_endpoint": "https://apis.roblox.com/oauth/v1/userinfo",
"jwks_uri": "https://apis.roblox.com/oauth/v1/certs",
"registration_endpoint": "https://create.roblox.com/dashboard/credentials",
"service_documentation": "https://create.roblox.com/docs/reference/cloud",
"scopes_supported": [
"openid",
"profile",
"email",
"verification",
"credentials",
"age",
"premium",
"roles"
],
"response_types_supported": ["none", "code"],
"subject_types_supported": ["public"],
"id_token_signing_alg_values_supported": ["ES256"],
"claims_supported": [
"sub",
"type",
"iss",
"aud",
"exp",
"iat",
"nonce",
"name",
"nickname",
"preferred_username",
"created_at",
"profile",
"email",
"email_verified",
"verified",
"age_bracket",
"premium",
"roles",
"internal_user"
],
"token_endpoint_auth_methods_supported": [
"client_secret_post",
"client_secret_basic"
]
}