Open Cloud mendukung aliran otorisasi OAuth 2.0 tanpa dan dengan PKCE, tergantung pada apakah klien Anda rahasia atau publik.
- Klien rahasia adalah aplikasi yang mampu menjaga kredensial rahasia, seperti situs web yang dapat menyimpan dan memulihkan rahasia dengan aman di backendnya.
- Klien publik adalah aplikasi yang tidak dapat menyimpan rahasia, seperti aplikasi browser seluler dan web.
Kami merekomendasikan aliran kode otorisasi OAuth 2.0 dengan PKCE untuk semua klien dan memerlukannya untuk klien publik.
Untuk menerapkan aliran kode otorisasi, aplikasi Anda melakukan langkah berikut:
- Hasilkan pemeriksa kode dan tantangan kode (hanya PKCE).Ini memungkinkan Anda menyertakan tantangan dalam permintaan Anda daripada rahasia klien, yang meningkatkan keamanan.
- Kirim permintaan GET ke titik otorisasi dengan parameter yang sesuai.
- Tangani panggilan otorisasi.Setelah mendapatkan otorisasi, gunakan kode otorisasi dari Roblox dalam permintaan redirect ke URL yang Anda spesifikasikan selama kreasiaplikasi.Analisis kode otorisasi untuk digunakan nanti.
- Kirim permintaan POST ke akhir token dengan kode otorisasi.Jika berhasil, Anda menerima akses dan token penyegaran untuk membuat panggilan API.
- Hubungi API Cloud Terbuka mana pun yang mendukung autentikasi OAuth 2.0 berdasarkan dokumentasi referensi untuk sumber daya yang ingin Anda akses.
Bagian berikut menjelaskan setiap langkah dengan lebih rinci.
Hasilkan tantangan kode (hanya untuk PKCE)
Sebelum memulai proses otorisasi, Anda perlu menghasilkan tantangan kode dari pemeriksa kode.Anda dapat menggunakan perpustakaan atau fungsi bawaan di bahasa pemrograman pilihan Anda untuk membuat pemeriksa kode, menghitung hash, dan melakukan enkode Base64 untuk menghasilkan tantangan kode.
Saat membuat verifikator kode, hanya gunakan karakter yang tidak difungsikan, termasuk huruf besar dan kecil (A-Z, a-z), angka desimal (0-9), tanda kurung (-), periode (.), garis bawah (_), dan tilde (~), dengan panjang minimum 43 karakter dan panjang maksimum 128 karakter.
Contoh berikut menunjukkan cara menggunakan Javascript untuk membuat pemeriksa kode dan menghasilkan tantangan kode menggunakan algoritma penyelesaian 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));
Untuk PKCE, Anda membutuhkan verifikator kode dan nilai tantangan di langkah selanjutnya.
Membangun URL otorisasi
Untuk memulai proses otorisasi pengguna, buat URL otorisasi dengan parameter yang diperlukan:
- client_id : ID klien aplikasi Anda diperoleh setelah mendaftarkan aplikasi Anda .
- redirect_uri : URI redirect aplikasi Anda, titik masuk kembali aplikasi Anda.
- scope : Lingkup yang diminta yang mendefinisikan izin akses yang dibutuhkan aplikasi Anda di daftar terpisah ruang.
- response_type : Atur ke code untuk menunjukkan aliran kode otorisasi. Diperlukan hanya untuk PKCE
- code_challenge : Tantangan kode yang dihasilkan dari pemeriksa kode.
- code_challenge_method : Tetapkan nilai parameter ini ke S256 untuk menunjukkan bahwa tantangan kode diubah menggunakan algoritma SHA-256, metode tantangan kode paling luas dan aman.
- state : Nilai acak yang tidak transparan dan aman untuk mempertahankan status antara permintaan dan panggil balas. Diperlukan untuk non-PKCE hanya
- client_secret : Rahasia klien aplikasi Anda diperoleh setelah mendaftarkan aplikasi Anda .Jika Anda menggunakan autentikasi dengan PKCE, hilangkan parameter ini.URL permintaan otorisasi Anda harus terbentuk dengan baik, seperti dalam contoh berikut:
Contoh URL Otorisasi 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
Ketika pengguna mengunjungi URL, mereka dibawa melalui aliran otorisasi. Jika berhasil, Roblox mengarahkan pengguna ke redirect_uri yang ditentukan.
Tangani panggilan otorisasi penulis
Ketika aliran otorisasi berhasil, aplikasi Anda menerima permintaan GET dari server otorisasi Roblox yang Anda spesifikasikan pada redirect_uri.Dalam permintaan, Anda menerima code (kode otorisasi) dan state (jika Anda memberikan nilai sebelumnya) parameter.
Parameter code berisi kode otorisasi yang dapat ditukar oleh aplikasi untuk token akses dari server otorisasi.Sebagian besar bahasa server backend memiliki cara standar untuk mengakses parameter query sebagai objek yang didekode.Anda perlu mendapatkan parameter code dan menggunakannya untuk ditukar dengan token akses.
Parameter state adalah nilai opak yang awalnya Anda berikan dalam permintaan otorisasi.Anda dapat menggunakan parameter ini untuk mempertahankan status atau konteks proses otorisasi.
Sebagai contoh, Anda mungkin menerima permintaan GET dengan URL berikut jika Anda menypesifikasi URI redirect Anda menjadi https://example.com/redirect.
Contoh URL Redirectasi
https://example.com/redirect?code=10c45PNuquKnFJ6pUcy5-fHkghEM6lSegm-7hj9mVEprub1dSDuStuKK_EAUXY7AHTD63xcnmvxSLthp-C8g3jzIGZVzuXSd20Y2dEYI9hx0LZmPg95ME4z2K03UheiZbroyXUjYyB3ReoMqobzDVPzyx6IS8kj2Uu-11Xq_0JiTYxtDatuqXRNIAmJT8gMJmbSyOLOP_vnDvbeMUiBsqCRrkTGVbWSwYSc8sTVVE-535kYdqQOgNjH1ffCoZLGl8YYxLnpb2CXJlRQPrcjkA&state=6789
Jika otorisasi gagal, aplikasi Anda menerima permintaan GET ke URL redirect yang ditentukan dengan error , error_description , dan state (jika berlaku) parameter.
- Parameter error menunjukkan kesalahan OAuth 2.0 khusus yang terjadi selama proses otorisasi.
- Paraметir error_description memberikan rincian tambahan tentang kesalahan.
- Parameter state membantu aplikasi Anda mempertahankan status dalam kasus kegagalan.
Tukarkan kode otorisasi untuk token akses
Ketika Anda telah memecahkan otorisasi code, tukar untuk token untuk mengakses sumber daya Roblox yang diinginkan:
Minta token akses dan perbarui token dengan mengirim permintaan ke endpoint pertukaran token .Permintaan harus mencakup kode otorisasi, ID klien, dan nilai verifikasi kode (PKCE) atau rahasia klien (non-PKCE) dalam format x-www-form-urlencoded.
Parse token yang berlaku dari respons yang diterima.Token akses valid untuk 15 menit.Simpan token penyegaran secara aman, biasanya di sisi server, sehingga Anda dapat menggunakannya untuk mendapatkan token baru di masa depan.
Contoh Respon Akhir Token{"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"}
Buat panggilan ke metode sumber daya
Sekarang Anda memiliki token akses yang diperlukan, Anda dapat menggunakannya untuk membuat panggilan berautentikasi ke metode sumber daya.Sertakan token akses dalam judul semua permintaan API untuk mengotorisasinya.
Sebagai contoh, Anda dapat menguji apakah fungsi aplikasi Anda benar dengan melalui seluruh alur otorisasi dan kemudian membuat permintaan GET ke titik informasi pengguna dengan token akses.Pastikan Anda memiliki openid atau kedua skop openid dan profile sebelum memanggil endpoint ini.Jika berhasil, respons dari titik akhir itu terlihat seperti ini:
Contoh Tanggapan Informasi Pengguna Contoh
{
"sub": "12345678",
"name": "Jane Doe",
"nickname": "robloxjanedoe",
"preferred_username": "robloxjanedoe",
"created_at": 1607354232,
"profile": "https://www.roblox.com/pengguna/12345678/profil"
}