เอกสารนี้อธิบายจุดสิ้นสุดที่คุณโทรเพื่อใช้การไหลของรหัสการอนุญาต OAuth 2.0 รวมถึงจุดสิ้นสุดอื่นๆ ที่มีประโยชน์สำหรับการใช้งานการตรวจสอบในแอปของคุณ
Base URL
https://apis.roblox.com/oauth
Endpoints
GET v1/authorizePOST v1/tokenPOST v1/token/introspectPOST v1/token/resourcesPOST v1/token/revokeGET v1/userinfoGET .well-known/openid-configuration
การอนุญาต
GET v1/authorize
ได้รับการอนุญาตจากผู้ใช้เพื่อตรวจสอบกับบัญชี Roblox ของพวกเขาคาดว่าจะมี URL การอนุญาตที่ถูกต้องที่สร้างขึ้นด้วยพารามิเตอร์ที่ระบุไว้จุดสิ้นสุดนี้สนับสนุนการอนุญาต PKCE
พารามิเตอร์คำถาม
ชื่อ | คําอธิบาย | จําเป็น | ตัวอย่าง |
---|---|---|---|
client_id | ID ลูกค้าของแอป | yes | 816547628409595165403873012 |
redirect_uri | URL ที่ผู้ใช้ถูกเปลี่ยนกลับหลังจากสิ้นสุดการไหลของการอนุญาต | yes | https://www.roblox.com/example-redirect |
ขอบเขตที่ร้องขอ | ขอบเขตที่ร้องขอ พร้อมด้วยช่องว่างใช้ขอบเขต openid เพื่อรับโทเค็นรหัสใช้ขอบเขต openid และ profile เพื่อรับข้อมูลผู้ใช้เพิ่มเติม | ใช่ | openid profile |
พิมพ์ | รหัสผ่านที่แอปต้องการส่งคืนค่าเริ่มต้นคือประเภทการอนุญาตรหัสผู้ใช้ | yes | none , code |
prompt | กำหนดหน้ายืนยันและยอมรับที่จะแสดงให้กับผู้ใช้บางหน้าจอจำเป็นสำหรับแอปพลิเคชันบุคคลที่สามและไม่สามารถข้ามได้ | no | none , login , consent , select_account |
nonce | หมายเลขการเข้ารหัสที่ผูกโทเค็นกับไคลเอนต์ | no | <random_value_1> |
สถานะ | ค่าที่ไม่โปร่งใสที่ป้องกันการฉ้อโกงคำขอระหว่างเว็บไซต์ ซึ่งเป็นประเภทของการโจมตีที่เลวร้ายส่งกลับไปยังแอปหลังจากได้รับการอนุญาต | no | <app-provided-opaque-value> |
code_challenge | สตริงที่ได้รับจากการใช้ code_challenge_method กับ code_verifier | no | สตริง Base64-URL-encoded |
code_challenge_method | ฟังก์ชันที่ใช้กับ code_verifier | ไม่ | S256 |
ร้องขอ
Example Request of Directing to Authorization Flow
https://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
การตอบสนอง
หลังจากเรียกจุดสิ้นสุดนี้แล้ว ผู้ใช้จะถูกเปลี่ยนเส้นทางไปยัง URL การเปลี่ยนเส้นทางที่กำหนดไว้พร้อมรหัสการอนุญาตในพารามิเตอร์คำถาม codeรหัสการอนุญาต:
- มีอายุการใช้งานหนึ่งนาที
- สามารถแลกได้เพียงครั้งเดียว
- ไม่ถูกต้องหลังจากใช้ครั้งเดียว
การแลกเปลี่ยน
เพื่อรับโทเค็นเพื่อเข้าถึง API แลกเปลี่ยนรหัสอนุญาต สําหรับชุดโทเค็นลับ สําหรับชุดโทเค็นที่เป็นความลับจุดสิ้นสุดของโทเค็นทั้งหมดสนับสนุนการตรวจสอบสิทธิ์ของไคลเอนต์สองประเภท:
- สเครื่องยืนยันการตรวจสอบพื้นฐานของ HTTP ด้วยหัวข้ออนุญาต: Authorization: Basic Base64 encoded(<client_id>:<client_secret>)
- รหัสลูกค้าและความลับในร่างคำขอเป็นพารามิเตอร์
รายการต่อไปนี้อธิบายโทเค็นต่างๆ ที่คุณได้รับจากจุดสิ้นสุดนี้
โทเค็นการเข้าถึง - แทนที่การอนุญาตจากผู้สร้างหรือผู้ใช้สำหรับแอปบุคคลที่สามเพื่อเข้าถึงทรัพยากร Roblox ที่ปกป้องไว้เป็นสตริงที่ระบุขอบเขตเฉพาะ อายุการใช้งาน และคุณลักษณะการเข้าถึงอื่นๆเมื่อเซิร์ฟเวอร์การอนุญาตของ Roblox ออกโทเค็นการเข้าถึงให้กับแอปแล้ว โทเค็น:
ถูกต้องสำหรับ 15 นาที
สามารถใช้หลายครั้งก่อนที่จะหมดอายุ
สามารถเพิกถอนได้ก่อนที่จะหมดอายุหากผู้ใช้แอปเพิกถอนการอนุญาต
รีเฟรชโทเคน - รีเฟรชเซสชันการอนุญาตแอปสามารถใช้โทเค็นการรีเฟรชเพื่อรับชุดโทเค็นใหม่ซึ่งรวมถึงโทเค็นการเข้าถึงโทเค็นการรีเฟรชและโทเค็นไอดีโทเค็นรีเฟรช:
ใช้ได้เป็นเวลา 90 วัน
สามารถใช้ได้เพียงครั้งเดียวก่อนที่หมดอายุเพื่อรีเฟรชโทเค็น
สามารถเพิกถอนได้ก่อนที่จะหมดอายุหากผู้ใช้แอปเพิกถอนการอนุญาต
โทเค็นไอดี - ให้หลักฐานว่าตัวตนของผู้ใช้ได้รับการยืนยันแล้วเนื้อหาของมันขึ้นอยู่กับขอบเขตที่ร้องขอและอาจมีข้อมูลผู้ใช้พื้นฐานรวมถึงชื่อแสดงผล Roblox และชื่อผู้ใช้โทเค็นรหัสประจำตัวมีจุดประสงค์เพื่อการตรวจสอบตัวตนเท่านั้นและไม่ให้การเข้าถึงทรัพยากร Roblox ใดๆ
POST v1/token
รับชุดโทเค็นพร้อมรหัสอนุญาต
ร้องขอ
(x-www-form-urlencoded)
คีย์ | ค่า |
---|---|
code | <authorization code> |
code_verifier | <pkce code verifier value> |
grant_type | authorization_code |
client_id | <client_id> |
client_secret | <client_secret> |
ตัวอย่างรับคำขอโทเค็น
curl --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'
การตอบสนอง
ตัวอย่างการรับคำตอบโทเค็น
{
"access_token": "...",
"refresh_token": "...",
"token_type": "Bearer",
"expires_in": 899,
"scope": "universe-messaging-service:publish"
}
POST v1/token
รับชุดโทเค็นด้วยโทเค็นรีเฟรช
ร้องขอ
(x-www-form-urlencoded)
คีย์ | ค่า |
---|---|
grant_type | refresh_token |
refresh_token | <refresh_token> |
client_id | <client_id> |
client_secret | <client_secret> |
ตัวอย่างคำขอรีเฟรชโทเค็น
curl --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'
การตอบสนอง
ตัวอย่างคำขอรีเฟรชโทเค็น
{
"access_token": "...",
"refresh_token": "...",
"token_type": "Bearer",
"expires_in": 899,
"scope": "universe-messaging-service:publish"
}
POST v1/token/introspect
รับข้อมูลเกี่ยวกับโทเค็นตรวจสอบว่าโทเค็นมีอยู่และยังไม่หมดอายุหรือไม่มีประโยชน์สำหรับการตรวจสอบไม่มีสถานะใช้เฉพาะถ้า API ที่คุณกำลังเข้าถึงไม่ต้องการทรัพยากร เช่น Assets API หรือถ้าคุณเพียงแค่ต้องการดูเรื่องราวเฉพาะของโทเค็น
ร้องขอ
(x-www-form-urlencoded)
คีย์ | ค่า |
---|---|
token | <access_token> , <refresh_token> หรือ <id_token> |
client_id | <client_id> |
client_secret | <client_secret> |
ตัวอย่างคำขอโทเค็นการสำรวจตนเอง
curl --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'
การตอบสนอง
ตอบสนองโทเค็นการตรวจสอบตัวอย่าง
{
"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
ตรวจสอบว่าโทเค็นสามารถเข้าถึงทรัพยากรเฉพาะได้โดยได้รับรายการทรัพยากรผู้ใช้ที่ผู้ใช้ให้สิทธิ์หรือไม่นี่มีประโยชน์สำหรับการตรวจสอบสถานะ
ร้องขอ
(x-www-form-urlencoded)
คีย์ | ค่า |
---|---|
token | <access_token> |
client_id | <client_id> |
client_secret | <client_secret> |
ตัวอย่างขอทรัพยากรโทเค็น
curl --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'
การตอบสนอง
ค่า U ใน ids บ่งบอกว่าสโคปได้ให้การเข้าถึงทรัพยากรที่เป็นเจ้าของโดยผู้อนุญาต owner
ตัวอย่างการตอบสนองทรัพยากรโทเค็น
{
"resource_infos": [
{
"owner": {
"id": "1516563360",
"type": "User"
},
"resources": {
"universe": {
"ids": ["3828411582"]
},
"creator": {
"ids": ["U"]
}
}
}
]
}
POST v1/token/revoke
ยกเลิกเซสชันการอนุญาตโดยใช้โทเค็นการรีเฟรชที่ให้ไว้
ร้องขอ
(x-www-form-urlencoded)
คีย์ | ค่า |
---|---|
token | <refresh_token> |
client_id | <client_id> |
client_secret | <client_secret> |
ตัวอย่างคำขอเพิกถอนโทเค็น
curl --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'
การตอบสนอง
200 OK ด้วยคำตอบว่างเปล่า
ข้อมูลผู้ใช้
GET /v1/userinfo
รับ ID ผู้ใช้ Roblox และข้อมูลผู้ใช้อื่นๆ
ร้องขอ
หัวข้อการอนุญาต : Authorization: Bearer <access_token>ตัวอย่างคำขอข้อมูลผู้ใช้
curl --location --request GET 'https://apis.roblox.com/oauth/v1/userinfo' \--header 'Authorization: Bearer eyjlflabtfl...4gxqYBG'
การตอบสนอง
คุณสามารถใช้ค่า sub เพื่อระบุผู้ใช้อย่างไม่ซ้ำกันผู้ใช้สามารถเปลี่ยนชื่อผู้ใช้และชื่อแสดงของ Roblox ได้ ดังนั้นอย่าใช้พวกเขาเป็นตัวระบุที่ไม่ซ้ำกันเพื่ออ้างถึงผู้ใช้บนแอปของคุณ
เรียกร้อง | คําอธิบาย |
---|---|
sub | ID ผู้ใช้ Roblox |
ชื่อ | ชื่อที่แสดงบน Roblox |
ชื่อเล่น | ชื่อแสดงบน Roblox |
preferred_username | ชื่อผู้ใช้ Roblox |
created_at | เวลาที่สร้างบัญชี Roblox เป็นเวลา Unix |
โปรไฟล์ | URL โปรไฟล์บัญชี Roblox |
รูปภาพ | รูปภาพหัวหน้าอวตาร Robloxสามารถเป็นโมฆะได้หากภาพยิงหัวของอวาตาร์ยังไม่ได้ถูกสร้างหรือถูกกรอง |
ตัวอย่างผู้ใช้ที่มีขอบเขตโปรไฟล์
{
"sub": "1516563360",
"name": "exampleuser",
"nickname": "exampleuser",
"preferred_username": "exampleuser",
"created_at": 1584682495,
"profile": "https://www.roblox.com/users/1516563360/โปรไฟล์",
"picture": "https://tr.rbxcdn.com/03dc2a9abe7b1aacaaf93ea46d5c0646/150/150/อวตารหัว/Png"
}
ตัวอย่างผู้ใช้โดยไม่มีขอบเขตโปรไฟล์
{
"sub": "1516563360"
}
การค้นพบ
เอกสารค้นพบ OpenID Connect (OIDC) เป็นเอกสาร JSON ที่มีข้อมูลเกี่ยวกับรายละเอียดการกำหนดค่าเมฆเปิดที่รวมถึงรายการของขอบเขตและการอ้างสิทธิ์ที่เกี่ยวข้องกับตัวตนที่สนับสนุนคุณสามารถใช้มันเพื่อค้นหาข้อมูลเกี่ยวกับจุดสิ้นสุดและการกำหนดค่าของ Open Cloud OAuth 2.0 ได้อย่างไดนามิก เช่น จุดสิ้นสุดการอนุญาต จุดสิ้นสุดโทเค็น ตั้งค่า
หลังจากดึงและรับเอกสารค้นพบจาก URI เอกสารค้นพบแล้ว คุณสามารถตรวจสอบฟิลด์ด้วยตนเองในคำตอบเพื่อตรวจสอบข้อมูล หรือคุณสามารถสร้างแผนที่ไลบรารีที่กําหนดเองของคุณเองไปยังฟิลด์ในคําตอบเพื่ออัตโนมัติ 化 การทํางานของคุณ
GET .well-known/openid-configuration
การตอบสนอง
คำตอบของเอกสารค้นพบทั้งหมดทำตามสคริปต์เดียวกับคำตอบตัวอย่างต่อไปนี้
ตอบสนองเอกสารค้นพบตัวอย่าง
{
"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/ashboard/credentials",
"service_documentation": "https://สร้าง.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"
]
}