เอกสารนี้อธิบายถึง API ที่คุณเรียกใช้เพื่อดำเนินการตามกระบวนการอนุญาต OAuth 2.0 รวมถึง API อื่น ๆ ที่มีประโยชน์สำหรับการดำเนินการตรวจสอบสิทธิ์ในแอปของคุณ
Base URLhttps://apis.roblox.com/oauth
EndpointsGET 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
พารามิเตอร์ Query
| ชื่อ | คำอธิบาย | จำเป็น | ตัวอย่าง |
|---|---|---|---|
| client_id | รหัสประจำตัวของแอป | ใช่ | 816547628409595165403873012 |
| redirect_uri | URL ที่ผู้ใช้ถูกเปลี่ยนเส้นทางกลับไปหลังจากเสร็จสิ้นกระบวนการอนุญาต | ใช่ | `https://www.roblox.com/example-redirect`` |
| scope | สโคปที่ร้องขอ แบ่งด้วยช่องว่าง ใช้สโคป openid เพื่อรับ ID token ใช้สโคป openid และ profile เพื่อขอข้อมูลผู้ใช้เพิ่มเติม | ใช่ | openid profile |
| response_type | ข้อมูลรับรองที่แอปต้องการให้ส่งกลับ ค่าปกติคือประเภทการให้สิทธิ์โค้ด | ใช่ | none, code |
| prompt | ระบุหน้าการตรวจสอบสิทธิ์และการเห็นชอบที่แสดงให้ผู้ใช้ สกรีนบางหน้าจำเป็นสำหรับแอปของบุคคลที่สามและไม่สามารถข้ามได้ | ไม่จำเป็น | none, login, consent, select_account |
| nonce | หมายเลขเข้ารหัสที่เชื่อมโยงโทเค็นกับไคลเอนต์ | ไม่จำเป็น | <random_value_1> |
| state | ค่าที่ไม่โปร่งใสซึ่งป้องกันการโจมตีข้ามไซต์ ค่าประเภทหนึ่งของการโจมตีที่เป็นอันตราย ส่งกลับไปยังแอปหลังจากการอนุญาต | ไม่จำเป็น | <app-provided-opaque-value> |
| code_challenge | สตริงที่เกิดขึ้นจากการใช้ code_challenge_method กับ code_verifier | ไม่จำเป็น | สตริงเข้ารหัสในรูปแบบ Base64-URL |
| code_challenge_method | ฟังก์ชันที่ถูกนำไปใช้กับ code_verifier | ไม่จำเป็น | S256 |
คำขอ
ตัวอย่างคำขอในการเปลี่ยนเส้นทางไปยังกระบวนการอนุญาต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
การตอบสนอง
หลังจากเรียก API นี้ ผู้ใช้จะถูกเปลี่ยนเส้นทางไปยัง URL ที่ระบุโดยมีรหัสการอนุญาตอยู่ในพารามิเตอร์ query code รหัสการอนุญาต:
- มีอายุใช้งานหนึ่งนาที
- สามารถนำไปใช้ได้เพียงครั้งเดียว
- จะใช้ไม่ได้หลังจากใช้ครั้งหนึ่ง
การแลกเปลี่ยนโทเค็น
เพื่อขอรับโทเค็นเพื่อเข้าถึง API แลกรหัส การอนุญาต สำหรับชุดโทเค็นที่เป็นความลับ โดย API ทุกตัวจะสนับสนุนการตรวจสอบสิทธิ์ของไคลเอนต์สองประเภท:
- วิธีการตรวจสอบสิทธิ์แบบ HTTP Basic กับ header การอนุญาต: Authorization: Basic Base64 encoded(<client_id>:<client_secret>).
- รหัสประจำตัวของผู้ใช้และรหัสลับในตารางคำขอในฐานะพารามิเตอร์
รายชื่อต่อไปนี้อธิบายถึงโทเค็นที่คุณจะได้รับจาก API นี้
Access token - แสดงถึงการอนุญาตจากผู้สร้างหรือผู้ใช้สำหรับ แอปของบุคคลที่สามในการเข้าถึงแหล่งข้อมูลที่ได้รับการคุ้มครองของ Roblox เป็นสตริงที่ระบุถึงสโคปเฉพาะ อายุการใช้งานและคุณลักษณะการเข้าถึงอื่น ๆ เมื่อเซิร์ฟเวอร์การอนุญาต Roblox ออกโทเค็นการเข้าถึงให้กับแอป โทเค็น:
- ถูกต้องเป็นเวลา 15 นาที
- สามารถใช้หลายครั้งก่อนที่จะหมดอายุ
- สามารถถูกเพิกถอนก่อนหมดอายุได้หากผู้ใช้แอปทำการเพิกถอนการอนุญาต
Refresh token - รีเฟรชเซสชันการอนุญาต แอปสามารถใช้ refresh token เพื่อขอชุดใหม่ของโทเค็น ซึ่งรวมถึง access token, refresh token และ ID token refresh token:
- ถูกต้องเป็นเวลา 90 วัน
- สามารถใช้ได้เพียงครั้งเดียวก่อนจะหมดอายุเพื่อทำให้โทเค็นใหม่
- สามารถถูกเพิกถอนก่อนที่จะหมดอายุได้หากผู้ใช้แอปทำการเพิกถอนการอนุญาต
ID token - ให้หลักฐานว่าตัวตนของผู้ใช้ได้รับการตรวจสอบแล้ว เนื้อหาของมันขึ้นอยู่กับสโคปที่ร้องขอและสามารถมีข้อมูลพื้นฐานเกี่ยวกับผู้ใช้รวมถึงชื่อแสดงและชื่อผู้ใช้ Roblox ID token ใช้เพื่อวัตถุประสงค์ในการตรวจสอบตัวตนเท่านั้นและไม่ให้การเข้าถึงแหล่งข้อมูล 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
รับชุดโทเค็นด้วย refresh 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'
การตอบสนอง
ค่าที่อยู่ใน ids ซึ่งระบุว่ามีสโคปที่ได้รับการอนุญาตให้เข้าถึงทรัพยากรที่เจ้าของการอนุญาต
ตัวอย่างการตอบสนองเพื่อรับทรัพยากรของโทเค็น
{
"resource_infos": [
{
"owner": {
"id": "1516563360",
"type": "User"
},
"resources": {
"universe": {
"ids": ["3828411582"]
},
"creator": {
"ids": ["U"]
}
}
}
]
}
POST v1/token/revoke
เพิกถอนเซสชันการอนุญาตโดยใช้ refresh token ที่ให้มา
คำขอ
(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 header: Authorization: Bearer <access_token>
ตัวอย่างคำขอเพื่อรับข้อมูลผู้ใช้curl --location --request GET 'https://apis.roblox.com/oauth/v1/userinfo' \--header 'Authorization: Bearer eyjlflabtfl...4gxqYBG'
การตอบสนอง
คุณสามารถใช้ค่า sub เพื่อระบุผู้ใช้โดยเฉพาะ ผู้ใช้สามารถเปลี่ยนชื่อผู้ใช้และชื่อแสดงของ Roblox ของพวกเขาได้ดังนั้นจึงอย่าใช้พวกเขาเป็นตัวระบุเฉพาะในการอ้างถึงผู้ใช้ในแอปของคุณ
| Claim | คำอธิบาย |
|---|---|
| sub | ID ผู้ใช้ Roblox |
| name | ชื่อแสดงของ Roblox |
| nickname | ชื่อแสดงของ Roblox |
| preferred_username | ชื่อผู้ใช้ Roblox |
| created_at | เวลาที่สร้างบัญชี Roblox ในรูปแบบ timestamp Unix |
| profile | URL โปรไฟล์บัญชี Roblox |
| picture | รูปภาพโพรไฟล์หัวของ Roblox สามารถเป็นค่า null ได้ถ้ารูปภาพโพรไฟล์หัวไม่ถูกสร้างขึ้นหรือถูกปรับแต่งแล้ว |
ตัวอย่างผู้ใช้ที่มีการใช้สโคปโปรไฟล์
{
"sub": "1516563360",
"name": "exampleuser",
"nickname": "exampleuser",
"preferred_username": "exampleuser",
"created_at": 1584682495,
"profile": "https://www.roblox.com/users/1516563360/profile",
"picture": "https://tr.rbxcdn.com/03dc2a9abe7b1aacaaf93ea46d5c0646/150/150/AvatarHeadshot/Png"
}
ตัวอย่างผู้ใช้ที่ไม่มีการใช้สโคปโปรไฟล์
{
"sub": "1516563360"
}
การค้นพบ
เอกสารการค้นพบ OpenID Connect (OIDC) เป็นเอกสาร JSON ที่ มีข้อมูลเมตาเกี่ยวกับรายละเอียดการกำหนดค่าของ Open Cloud รวมถึงรายการ สโคปและคำเรียกร้องที่เกี่ยวข้องกับการระบุตนตนที่ได้รับการสนับสนุน คุณสามารถใช้มันเพื่อค้นพบข้อมูลอย่าง ไดนามิกเกี่ยวกับ API ของ Open Cloud OAuth 2.0 และ การกำหนดค่า เช่น จุดเชื่อมต่อการอนุญาต จุดเชื่อมต่อโทเค็น และชุดกุญแจสาธารณะ
หลังจากเรียกข้อมูลเอกสารการค้นพบจาก URI ของเอกสารการค้นพบแล้ว คุณสามารถตรวจสอบฟิลด์ในการตอบสนองเพื่อยืนยันข้อมูล หรือคุณสามารถสร้างไลบรารีแบบกำหนดเองของคุณที่แมพฟิลด์ใน schema การตอบสนองเพื่อทำให้การทำงานอัตโนมัติ
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/dashboard/credentials",
"service_documentation": "https://create.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"
]
}