Open Cloud unterstützt den OAuth 2.0-Authentisierungsfluss mit und ohne PKCE , abhängig davon, ob Ihre Clients privat oder öffentlich sind.
- Konfigurierte Clients sind Apps, die Credentials vertraulich halten können, wie z. B. eine Website, die Credentials sicher auf ihrem Backend speichern und abrufen kann.
- Öffentliche Clients sind Apps, die keine Geheimnisse aufbewahren können, wie z. B. Mobilgerät- und Web-Client-Apps.
Wir empfehlen den OAuth 2.0-Autorisierungscode mit PKCE für alle Clients und benötigen ihn für öffentliche Clients.
Um den Autorisierungscode-Fluss zu implementieren, führt deine App die folgenden Schritte aus:
- Generieren Sie einen Code-Verifier und eine Code-Herausforderung (nur PKCE). Dies ermöglicht es Ihnen, eine Herausforderung in Ihren Anfragen zu enthalten, anstatt des Client-Geheimnisses, was die Sicherheit verbessert.
- Senden Sie eine GET Anfrage an den Autorisierungspunkt mit den entsprechenden Parametern.
- Behandeln Sie die Autorisierungs-Callback. Nach dem Erhalten der Berechtigung verwenden Sie den Autorisierungscode von Roblox in einer Umleitungsanfrage an die URL, die Sie während der Schöpfungangegeben haben. Parallelieren Sie den Autorisierungscode für spätere Verwendung.
- Senden Sie eine POST-Anfrage an den Token-Endpunkt mit dem Codes. Wenn Sie erfolgreich sind, erhalten Sie Zugriff auf die Token und aktualisieren Sie, mit denen Sie API-Anrufe vornehmen können.
- Rufen Sie eine Open Cloud-API auf, die OAuth 2.0-Authentisierung basierend auf der Referenzdokumentation für die Ressourcen, auf die Sie Zugriffmöchten, unterstützt.
Die folgenden Abschnitte beschreiben jeden Schritt in größerer Tiefe.
Eine Code-Herausforderung generieren (nur für PKCE)
Bevor du den Autorisierungsprozess startest, musst du einen Code-Herausforderungswerkzeug von einem Code-Validierer generieren. Du kannst Bibliotheken oder integrierte Funktionen in der Programmiersprache deiner Wahl verwenden, um den Code-Herausforderungswerkzeug zu erstellen, den Hasch zu berechnen und Base64-Verschlüsselung auszuführen, um die Code-Herausforderung zu erstellen.
Wenn du den Code-Validierer erstellst, verwende nur nicht reservierte Zeichen, einschließlich Groß- und Kleinschreibung (A-Z, a-z), Zeichen mit Zeilengrößen (0-9), Hyphen (-), Perioden (.) und Unterstrichen (_), mit einer Mindestlänge von 43 Zeichen und einer maximalen Länge von 128 Zeichen.
Das folgende Beispiel zeigt, wie man Javascript verwendet, um einen Code-Validierer zu erstellen und die Code-Herausforderung mit dem SHA-256-Hashing-Algorithmus zu generieren:
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));
Für PKCE benötigen Sie sowohl den Code-Validierer als auch die Challenge- Werte in späteren Schritten.
Die Autorisations-URL erstellen
Um den Autorisierungsprozess des Benutzers zu starten, erstellen Sie eine Autorisierungs-URL mit den erforderlichen Parametern:
- client_id : Die Client-ID Ihrer App wird nach dem Registrieren Ihrer App erhalten.
- redirect_uri : Die Richtungs-URL deiner App, der Re-Entry-Punkt deiner App.
- scope : Die angefordertenen Scopes, die die Zugriffsberechtigungen deiner App in einer getrennten Liste definieren.
- response_type : Setzen Sie es auf code, um den Autorisierungscode-Fluss anzuzeigen. Nur für PKCE erforderlich
- code_challenge : Die Code-Herausforderung, die von einem Code-Validierer erzeuget wird.
- code_challenge_method : Setzen Sie diesen Parametereinsatz auf S256, um anzuzeigen, dass die Code-Herausforderung mit dem SHA-256-Algorithmus transformiert wurde, dem am weitesten verbreiteten und sichersten Code-Herausforderungs-Methode.
- state : Ein opake, sicherer zufälliger Wert, der den Zustand zwischen der Anfrage und dem Callbackbeibehalten muss. Benötigt für nicht-PKCE-Only
- client_secret : Der Client-Secret deiner App wird nach dem Registering deiner App erhalten. Wenn du Authentisierung mit PKCE verwendest, omit this參數. Deine Autorisierungsanfrage-URL muss gut formatiert sein, wie in dem folgenden Beispiel:
Beispiel-PKCE-Autorisierungs-URL
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
Wenn Benutzer die URL besuchen, werden sie durch den Autorisierungs-Flow geführt. Wenn erfolgreich, leitet Roblox den Benutzer zum angegebenen redirect_uri um.
Behandlung Autorisierungs-Callbacks
Wenn ein Autorisierungsfluss erfolgreich ist, sendet deine App eine GET Anfrage vom Roblox-Autorisierungsserver an den redirect_uri , den du angegeben hast. Im Anfragebereich erhältst du code (Codes) und 2> state2> (wenn du zuvor einen Wert angegeben hast).
Der code -Parameter enthält einen Autorisierungscode, den die App für einen Zugriffstoken vom Autorisierungsserver austauschen kann. Die meisten Backend-Server-Sprachen haben standardmäßige Wege, um auf Anfrage參數 als dekomponierte Objekte zuzugreifen. Sie müssen den code -Parameter erhalten und ihn für den Zugriffstoken verwenden.
Der state-Parameter ist ein opake Wert, den du ursprünglich in der Anfrageangegeben hast. Du kannst diesen Parameter verwenden, um den Zustand oder Kontext des Autorisierungsprozesses zu erhalten.
Zum Beispiel, Sie erhalten eine GET Anfrage mit der folgenden URL, wenn Sie Ihre Redirektions-URL spezifiziert haben, um https://example.com/redirect zu sein.
Beispiel-Rückleitungs-URL
https://example.com/redirect?code=10c45PNuquKnFJ6pUcy5-fHkghEM6lSegm-7hj9mVEprub1dSDuStuKK_EAUXY7AHTD63xcnmvxSLthp-C8g3jzIGZVzuXSd20Y2dEYI9hx0LZmPg95ME4z2K03UheiZbroyXUjYyB3ReoMqobzDVPzyx6IS8kj2Uu-11Xq_0JiTYxtDatuqXRNIAmJT8gMJmbSyOLOP_vnDvbeMUiBsqCRrkTGVbWSwYSc8sTVVE-535kYdqQOgNjH1ffCoZLGl8YYxLnpb2CXJlRQPrcjkA&state=6789
Wenn die Berechtigung fehlschlägt, erhält deine App eine GET Anfrage an die angegebene Redirektions-URL mit dem error , error_description und 2> state2> (falls geltend) Parametern.
- Der error -Parameter zeigt den spezifischen OAuth 2.0-Fehler an, der während des Autorisierungsprozesses aufgetreten ist.
- Der error_description -Parameter liefert zusätzliche Details des Fehlers.
- Der state-Parameter hilft Ihrer App, im Falle eines Fehlers den Zustand zu erhalten.
Autorisierungscode für ZugangsmToken austauschen
Wenn Sie die Autorisierung code parsen, tauschen Sie sie gegen Token, um auf gewünschte Roblox-Ressourcen zuzugreifen:
Fordern Sie einen Zugriffs-Token an und aktualisieren Sie einen Token, indem Sie eine POST-Anfrage an den token-Exchange-Endpunkt senden. Die Anfrage muss den Codes, die Client-ID und den Code-Verifizierungs-Wert (PKCE) oder Client-geheimen (nicht-PKCE) enthalten. Die Anfrage muss in x-www-form-urlencoded-Form式 eingeben.
Parse die anwendbaren Token aus der Antwort, die du erhalten hast. Das Zugangstoken ist 15 Minuten gültig. Speichere den Aktualisierungstoken sicher, typischerweise auf der Serverseite, damit du ihn verwenden kannst, um in der Zukunft neue Token zu erhalten.
Beispiel-Token-Endpunkt-Antwort{"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"}
Eine Ruf zu einer Ressourcen-Methode aufrufen
Nun, da du den erforderlichen Zugang-Token hast, kannst du ihn verwenden, um authentifizierte Anrufe zu Ressourcen- Methoden vorzunehmen. Inkludiere den Zugang-Token imHeader aller API-Anfragen, um sie zu autorisieren.
Zum Beispiel können Sie testen, ob Ihre App richtig funktioniert, indem Sie den gesamten Autorisierungsprozess durchgehen und dann eine GET-Anfrage an den user-Informationen-Einkaufs-端口 mit einem Zugangsschlüssel durchführen. Stellen Sie sicher, dass Sie den openid oder beide den 2>openid
Beispiel Benutzer-Information-Antwort
{
"sub": "12345678",
"name": "Jane Doe",
"nickname": "robloxjanedoe",
"preferred_username": "robloxjanedoe",
"created_at": 1607354232,
"profile": "https://www.roblox.com/users/12345678/profile"
}