OAuth 2.0 Implémentation de l'application

*Ce contenu est traduit en utilisant l'IA (Beta) et peut contenir des erreurs. Pour consulter cette page en anglais, clique ici.

Open Cloud prend en charge le flux d'autorisation OAuth 2.0 avec et sans PKCE, en fonction de si vos clients sont confidentiels ou public/publique.

  • Les clients confidentiels sont des applications qui peuvent garder les codes confidentiels, tels qu'un site Web qui peut stocker et récupérer en toute sécurité les secrets sur son backend.
  • Les clients publics sont des applications qui ne peuvent pas garder de secrets, telles que les applications de navigateur mobile et Web.

Nous recommandons le flux de l'autorisation OAuth 2.0 avec PKCE pour tous les clients et exigez-le pour les clients publics.

Pour implémenter le flux de travail du code d'autorisation, votre application effectue les étapes suivantes :

  1. Générer un vérificateur de code et un défi de code (seulement PKCE). Cela vous permet d'inclure un défi dans vos demandes plutôt que le secret client, ce qui améliore la sécurité.
  2. Envoyez une demande GET à l'autorisation avec les paramètres appropriés.
  3. Gérez le rappel d'autorisation. Après avoir obtenu l'autorisation, utilisez le code d'autorisation de Roblox dans une demande de redirection vers l'URL que vous avez spécifiée pendant la créationsde l'application. Analisez le code d'autorisation pour une utilisation ultérieure.
  4. Envoyez une demande POST à l'autorisation du jeton avec le code d'autorisation. Si vous êtes réussi, vous recevez l'accès et rafraîchissez les jetons avec lesquels vous pouvez appeler des API.
  5. Appuyez sur n'importe quelle API Open Cloud qui prend en charge l'authentification OAuth 2.0 basée sur la documentation de référence pour les ressources que vous voulez accès.

Les sections suivantes décrivent chaque étape plus en détail.

Génération d'un défi de code (seulement pour PKCE)

Avant d'initier le processus d'autorisation, vous devez générer un défi de code à partir d'un vérificateur de code. Vous pouvez utiliser des bibliothèques ou des fonctions intégrées dans le langage de programmation de votre choix pour créer le vérificateur de code, calculer le hach et exécuter l'encodage Base64 pour générer le défi de code.

Lors de la création du code verificateur, ne utilisez que des caractères non réservés, y compris les lettres majuscules et minuscules (A-Z, a-z), les chiffres décimaux (0-9), les tirets (-), les points (.), les tirets bas (-), et le tiret (~), avec une longueur minimum de 43 caractères et une longueur maximale de 128 caractères.

L'exemple suivant montre comment utiliser Javascript pour créer un vérificateur de code et générer le défi de code en utilisant l'algorithme de hachage 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));

Pour PKCE, vous avez besoin à la fois du vérificateur de code et des valeurs de défi dans les étapes suivantes.

Construction de l'URL d'autorisation

Pour initialiser le processus d'autorisation de l'utilisateur, construisez une URL d'autorisation avec les paramètres requis :

  • client_id : l'ID client de votre application obtenu après enregistrement de votre application .
  • redirect_uri : votre réseau de redirection d'application, le point de redistribution de votre application.
  • scope : Les scopes demandés qui définissent les permissions d'accès dont votre application a besoin dans une liste séparée par des espaces.
  • response_type : Définissez-le sur code pour indiquer le flux de code d'autorisation. Nécessaire pour le PKCE uniquement
  • code_challenge : le défi de code généré par un vérificateur de code.
  • code_challenge_method : Définissez cette valeur de paramètre pour S256 pour indiquer que le défi de code a été transformé en utilisant l'algorithme SHA-256, le méthode de défi de code le plus largement supporté et le plus sûr.
  • state : une valeur de valeur aléatoire et sûre pour maintenir l'état entre la demande et le rappel. Nécessaire pour le non-PKCE uniquement
  • client_secret : Le client secret de votre application obtenu après enregistrement de votre application. Si vous utilisez l'authentification avec PKCE, omettez ce paramètre. Votre demande d'autorisation doit être bien formée, comme dans le cas suivant :
Exemple d'URL d'autorisation 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

Lorsque les utilisateurs visitent l'URL, ils sont redirigeés par le flux d'autorisation. Si vous êtes réussi, Roblox redirige l'utilisateur vers le redirect_uri spécifié.

Gestion des appels d'autorisation

Lorsqu'un flux d'autorisation est réussi, votre application reçoit une demande GET du serveur d'autorisation Roblox au redirect_uri que vous avez spécifié. Dans la demande, vous recevez code (le code d'autorisation) et 1> state1> (si vous avez précédemment fourni une valeur).

  • Le code paramètre contient un code d'autorisation que l'application peut échanger pour un jeton d'accès du serveur d'autorisation. La plupart des langues de serveur ont des méthodes standard pour accéder aux paramètres d'invocation comme des objets décomposés. Vous devrez obtenir le code paramètre et l'utiliser pour échanger pour des jetons d'accès.

  • Le paramètre state est une valeur opaque que vous avez initialement fournie dans la demande d'autorisation. Vous pouvez utiliser ce paramètre pour maintenir l'état ou le contexte du processus d'autorisation.

Par exemple, vous recevrez une demande GET avec l'URL suivante si vous avez spécifié votre redirection URL pour être https://example.com/redirect .

Exemple de redirection URL

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

Si l'autorisation échoue, votre application reçoit une demande GET à l'URL de redirection spécifiée avec le error , error_description et 1> state1> (le cas applicable) des paramètres.

  • Le error paramètre indique l'erreur OAuth 2.0 spécifique qui s'est produite pendant le processus d'autorisation.
  • Le error_description參數提供額外的錯誤細節。
  • Le paramètre state aide votre application à maintenir l'état dans le cas d'un échec.

Échange d'un code d'autorisation pour des jetons d'accès

Lorsque vous avez analysé l'autorisation code , échangez-la pour des jetons pour accéder aux ressources souhaitées Roblox :

  1. Demandez un jeton d'accès et rafraîchissez un jeton par le biais d'une demande POST à l'endroit d'échange de jetons Token Exchange Endpoint. La demande doit inclure le code d'autorisation, l'identifiant du client et la valeur du vérificateur de code (PKCE) ou du secret client (non-PKCE) dans x-www-form-urlencoded format.

  2. Analysez les jetons applicables à la réponse reçue. Le jeton d'accès est valable pendant 15 minutes. Stockez le jeton de mise à jour en toute sécurité, généralement sur le côté du serveur, afin que vous puissiez l'utiliser pour obtenir de nouveaux jetons dans le futur.

    Exemple de réponse de fin d'instance de jeton

    {
    "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"
    }

Faire un appel à une méthode de ressource

Maintenant que vous avez la clé d'accès requise, vous pouvez l'utiliser pour effectuer des appels authentifiés aux méthodes de ressources. Incluez la clé d'accès dans l'en-tête de toutes les demandes d'API pour les autoriser.

Par exemple, vous pouvez tester si votre application fonctionne correctement en passant à travers tout le flux d'autorisation et en effectuant une demande GET à l'endroit d'information de l'utilisateur avec un jeton d'accès. Assurez-vous que vous avez le openid ou les deux openid et 2>profile2>

Exemple de réponse d'information sur l'utilisateur

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