การใช้งาน OAuth 2.0

*เนื้อหานี้แปลโดยใช้ AI (เวอร์ชัน Beta) และอาจมีข้อผิดพลาด หากต้องการดูหน้านี้เป็นภาษาอังกฤษ ให้คลิกที่นี่

Open Cloud รองรับการประมาณเวลาการอนุญาตของ OAuth 2.0 ด้วยและโดยไม่ต้องใช้ PKCE ไม่ว่าลูกค้าของคุณจะเป็นลูกค้าส่วนตัวหรือสาธารณะ

  • ลูกค้าลับ เป็นแอปที่สามารถเก็บรหัสผ่านได้อย่างลับ เช่นเว็บไซต์ที่สามารถเก็บรหัสผ่านได้อย่างปลอดภัยและดึงกลับมาในระบบของเรา
  • ลูกค้าสาธารณะ เป็นแอปที่ไม่สามารถเก็บความลับได้ เช่น แอปสำหรับมือถือและเว็บเบราว์เตอร์

เราแนะนำการไหลเวียนรหัสอẩีย์ OAuth 2.0 กับ PKCE สำหรับลูกค้าทั้งหมดและต้องการสำหรับลูกค้าสาธารณะ

เพื่อให้เป็นไปตามรหัสอẩีย์การอนุญาต แอปของคุณดำเนินการด้านต่อไปนี้:

  1. สร้างตัวตรวจสอบรหัสและความท้าทายของรหัส (เฉพาะ PKCE เท่านั้น) นี่จะช่วยให้คุณรวมความท้าทายในคำขอของคุณแทนที่จะเป็นความลับของลูกค้าซึ่งปรับปรุงความปลอดภัย
  2. ส่งคำขอ GET ไปยังจุดสิ้นสุดการอนุญาตด้วยพารามิเตอร์ที่เหมาะสม
  3. จัดการคืนค่าอẩานเขียวของผู้ใช้ หลังจากได้รับการอนุญาตให้ใช้งานแล้วให้ใช้รหัสอนุญาตจาก Roblox ในคำขอเปลี่ยนทิศทางไปยัง URL การสร้างสรรค์
  4. ส่งคำขอ POST ไปยังโทเค็นเอนด์ทรี่ด้วยรหัสอนุญาต หากประสบความสำเร็จคุณจะได้รับการเข้าถึงและรีเฟรชโทเค็นเพื่อให้สามารถทำการเรียกใช้ API ได้
  5. เรียก API เมฆเปิดที่สนับสนุนการตรวจสอบตัวตนด้วย OAuth 2.0 ตามคู่มือการประกอบการสำหรับทรัพยากรที่คุณต้องการเข้าถึง

ต่อไปนี้คือคำอธิบายส่วนตัวของแต่ละขั้นตอน

การสร้างความท้าทายของรหัส (สำหรับ PKCE เท่านั้น)

ก่อนเริ่มกระบวนการอนุญาต คุณต้องสร้างความท้าทายของโค้ดจากผู้ตรวจสอบโค้ด คุณสามารถใช้ห้องสมุดหรือการใช้งานติดตั้งในภาษาประมวลผลของตัวเลือกของคุณเพื่อสร้างความท้าทายของโค้ด

เมื่อสร้างตัวตรวจสอบรหัสให้ใช้ตัวอักษรที่ไม่ได้จองก่อนหน้าและตัวอักษรลงต้นของตัวอักษร (A-Z, a-z), ตัวเลขทศนะ (0-9), จุลภาค (-), จุลภาค (.) และจุลภาค (~) โดยมีความยาวอย

ตัวอย่างต่อไปนี้แสดงให้เห็นวิธีการใช้ Javascript เพื่อสร้างตัวตรวจสอบรหัสและสร้างความท้าทายของรหัสโดยใช้วิธีการแก้ไขขั้นต้นของ 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));

สำหรับ PKCE คุณต้องใช้ทั้งตัวตรวจสอบรหัสและค่าท้าทายในขั้นตอนต่อไป

การสร้าง URL อẩีญา

เพื่อเริ่มกระบวนการอนุญาตผู้ใช้ สร้าง URL อนุญาตด้วยพารามิเตอร์ที่ต้องการ:

  • client_id : รหัสลูกค้าของแอปของคุณจะได้รับหลังจากการลงทะเบียนแอปของคุณ
  • redirect_uri : รหัสรีเข้าของแอปของคุณ จุดเริ่มต้นการเข้าใหม่ของแอปของคุณ
  • scope : สเก็บของขนาดของตัวอุปกรณ์ที่ต้องการในรายการที่แยกออกเป็นพื้นที่
  • response_type : ตั้งค่าให้เป็น code เพื่อแสดงการไหลของรหัสอนุญาต ต้องการสำหรับ PKCE เท่านั้น
  • code_challenge : โค้ดชาเลนจ์ที่สร้างจากเครื่องมือตรวจสอบโค้ด
  • code_challenge_method : ตั้งค่าค่าตัวตัวอักษรนี้ให้เป็น S256 เพื่อแสดงว่าวิธีท้าทายรหัสถูกแปลงโดยใช้วิธีการท้าทายรหัสที่พổ biếnที่สุดและปลอดภัยที่สุดในการท้าทายรหัส
  • state : ค่าตัวแปรสุ่มที่มีประสิทธิภาพในการให้สถานะระหว่างการร้องขอและการโทรกลับ ต้องการสำหรับผู้ที่ไม่ใช่ PKCE เท่านั้น
  • client_secret : รหัสลูกค้าของแอปของคุณจะได้รับหลังจากการลงทะเบียนแอปของคุณ หากคุณกำลังใช้งานการรับการอนุญาตด้วย PKCE โปรดอ้างอิงค่านี้ รหัสร้องขอการอนุญาตของคุณจะต้องเป็นรูปแ
ตัวอย่าง URL อẩีเมนต์ 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

เมื่อผู้ใช้เข้าถึง URL พวกเขาจะผ่านการรับรอง หากประสบความสำเร็จ, Roblox จะเปลี่ยนผู้ใช้ไปที่ redirect_uri ที่กำหนด

การจัดการผู้ใช้อẩาน

เมื่อการไหลเวียนการอนุญาตประสบความสำเร็จ, การตรวจสอบของคุณได้รับคำขอ GET จากเซิร์ฟเวอร์อนุญาต Roblox ที่ redirect_uri ที่คุณระบุ ในคำขอ,

  • ตัวแปร code มีรหัสอẩานที่ app สามารถแลกเปลี่ยนเป็นตัวแทนจากเซิร์ฟเวอร์อนุญาต ส่วนใหญ่ของภาษาเว็บแบ็กเก็ตมีวิธีการเข้าถึงตัวแปรของคำสั่งเรียกด้วยวิธีที่แสน

  • พารามิเตอร์ state เป็นค่าที่เป็นอุปกรณ์ปิดบังที่คุณให้ในคำขออนุญาต คุณสามารถใช้พารามิเตอร์นี้เพื่อให้สถานะหรือบริบทของกระบวนการอนุญาต

เช่นคุณอาจได้รับคำขอ GET ด้วย URL ต่อไปนี้หากคุณระบุไว้ว่าคุณต้องการเปลี่ยนทิศทางไปยัง https://example.com/redirect

ตัวอย่าง URL เปลี่ยนทิศทาง

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

หากการอนุญาตล้มเหลว แอปของคุณได้รับคำขอ GET ไปยัง URL ที่กำหนดด้วย error และ error_description และ 1> state1> (ที่ใช้บังคับ) พารามิเตอร์

  • ตัวแปร error ระบุข้อผิดพลาด OAuth 2.0 ที่เกิดขึ้นในระหว่างกระบวนการอนุญาต
  • พารามิเตอร์ error_description ให้รายละเอียดเพิ่มเติมเกี่ยวกับข้อผิดพลาด
  • พารามิเตอร์ state ช่วยให้แอปของคุณเก็บสถานะไว้ในกรณีที่เกิดความล้มเหลว

แลกรหัสอẩีย์สิทธิ์เพื่อการเข้าถึงโทเค็น

เมื่อคุณได้รับการอนุญาต code แล้ว แลกเปลี่ยนมันเป็นโทเค็นเพื่อเข้าถึงทรัพยากร Roblox ที่ต้องการ:

  1. ขอตั๋วเข้าถึงและรีเฟรชตั๋วโดยการส่งคำขอ POST ไปยัง รหัสแลกเปลี่ยนโทเค็น รหัสตรวจสอบตัวตนผู้ใช้ และรหัสตรวจสอบตัวตนโทเค็น (PKCE) ในรูปแ

  2. วิเคราะห์โทเค็นที่เกี่ยวข้องจากการตอบกลับที่ได้รับ โทเค็นการเข้าถึงใช้ได้เป็นเวลา 15 นาที เก็บโทเค็นรีเฟรชไว้อย่างปลอดภัยโดยปกติบนด้านเซิร์ฟเวอร์จึงคุณสามารถใช้มันเพื่อรับโทเค็นใหม่ในอน

    ตัวอย่างการตอบสนองของด่านตรวจแห่งโทเค็น

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

การโทรไปยังวิธีการทรัพยากร

ตอนนี้คุณมีตั๋วเข้าถึงที่ต้องการแล้วคุณสามารถใช้มันเพื่อสร้างการโทรกรรมที่ได้รับการยืนยันไปยังวิธีการทรัพยากร รวมตั๋วเข้าถึงในส่วนหัวของคำขอทั้งหมดเพื่ออนุญาตพวกเขา

ตัวอย่างเช่น คุณสามารถทดสอบว่าแอปของคุณทำงานได้อย่างถูกต้องโดยการผ่านกระบวนการอนุญาตทั้งหมดแล้วจากนั้นสร้างคำขอ <

ตอบการใช้ข้อมูลผู้ใช้

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