การตรวจสอบตัวตนผ่าน OAuth 2.0

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

เอกสารนี้อธิบายตรงที่คุณเรียกเพื่อให้การประมวลผลรหัสอẩีย์แห่งอธิบายโดย OAuth 2.0 โดยเฉพาะ นอกจากนี้ยังอธิบายตรงที่อื่น ๆ ที่เป็นประโยชน์สำหรับการใช้งานการอนุญาตในแอปของคุณ

Base URL

https://apis.roblox.com/oauth
Endpoints

GET v1/authorize
POST v1/token
POST v1/token/introspect
POST v1/token/resources
POST v1/token/revoke
GET v1/userinfo
GET .well-known/openid-configuration

การรับอนุญาต

GET v1/authorize

รับการอนุญาตจากผู้ใช้เพื่อยืนยันตัวตนด้วยบัญชี Roblox ของพวกเขา คาดหวังว่าจะได้รับ URL การอนุญาตที่ถูกต้องที่สร้างขึ้นด้วยพารามิเตอร์ที่กำหนด รองรับการอนุญาตโดย PKCE

พารามิเตอร์การตรวจสอบ

ร้องขอ

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 แลกเปลี่ยน รหัสอẩานเข้าถึง สําหรับชุดของโทเค็นที่เป็นความลับ

  1. โครงการออกแบบการรักษาความปลอดภัย HTTP พื้นฐานด้วยหัวข้ออนุญาต: Authorization: Basic Base64 encoded(<client_id>:<client_secret>) .
  2. รหัสลูกค้าและรหัสลับในส่วนตัวของคำขอเป็นตัวแปร

รายการต่อไปนี้อธิบายเหรียญต่างๆ ที่คุณได้รับจากระดับนี้

  • ตัวอนุญาตการเข้าถึง - แทนที่ตัวอนุญาตจากผู้สร้างหรือผู้ใช้สำหรับแอปของบุคคลที่สามเพื่อเข้าถึงทรัพยากร Roblox ที่ปกป้องของพวกเขา มันเป็นสตริงที่ระบุขอบเขตเวลา

    • มีอายุการใช้งาน 15 นาที
    • สามารถใช้ได้หลายครั้งก่อนที่จะหมดอายุ
    • สามารถยกเลิกการอนุญาตได้ก่อนหมดอายุหากผู้ใช้แอปเรียกร้องสิทธิ์
  • รีเฟรชโทเค็น - รีเฟรชเซชัน เซสชัน หนึ่ง app สามารถใช้รีเฟรชโทเค็นเพื่อรับชุดโทเค็นใหม่ซึ่งรวมถึงตัวอนุญาต ตัวรีเฟรช และตัวรหัสโทเค็น รีเฟรชโทเค็น:

    • มี效ล 90 วัน
    • สามารถใช้ได้เเค่ครั้งเดียวก่อนหมดอายุเพื่อรีเฟรชโทเค็น
    • สามารถยกเลิกการอนุญาตได้ก่อนหมดอายุหากผู้ใช้แอปเรียกร้องสิทธิ์
  • ตัวระบุผู้ใช้ - ให้พิสูจน์ว่าไอดีของผู้ใช้ถูกยืนยัน เนื้อหาขึ้นอยู่กับสเก็ตที่ร้องขอและสามารถรวมถึงชื่อผู้ใช้ 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> | ลัคกี้เ

ตัวอย่างคำขอรับโทเค็น

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 ที่คุณเข้าถึงเท่านั้น โดยใช้เฉพาะ

แม้ว่าผู้ใช้จะเลิกอนุญาตการเข้าถึงที่เกี่ยวข้องกับตัวแทนอนุญาต เนื้อเรื่องก็ยังแสดงให้เห็นเป็น val: true เพราะมันตรวจสอบว่าตัวแทนอยู่ในชีวิตของมัน (โดยปกติ 15 นาที

ร้องขอ

(x-www-form-urlencoded)

| กุญแจ | มีค่า | | เส้นทาง | | เวลาใหม่ | หรือ | เหรียญโทเค็น | <access_token> หรือ <refresh_token> หรือ <id_token>

ตัวอย่างคำขอโทเค็น Introspect

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'

การตอบกลับ

ตอบกลับโทเค็น Introspect ตัวอย่าง

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

ตัวอย่างคำขอโทเค็น Revoke

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 ของพวกเขาและแสดงชื่อของพวกเขาได้ดังนั้นอย่าใช้พวกเขาเป็นตัวระบุเฉพาะเพื่ออ้างอิงถึง

| รับ | คำอธิบาย | | ชื่อที่แสดงRoblox | |

ตัวอย่างผู้ใช้ที่มีสเก็ตบอร์ด

{
"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 รวมถึงรายการของสโคปและเรื่องร้องขอที่สนับสนุน เช่น ตัวอนุญาต ตั้งค่าและชุ

หลังจากดึงและดึงข้อมูลสิ่งที่ค้นพบจาก Discovery โดยใช้ Discovery ข้อมูลไดรับ, คุณสามารถตรวจสอบข้อมูลในตอบสนองเพื่อยืนยันข้อมูลหรือคุณสามารถสร้างแผนที่ห้องสมุดของตัวเองให้กับฟิลด์ในตอบสนองเพื่ออั

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/โทเค็น",
"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/โทเค็น/ทรัพยากร",
"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/云"
"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"
]
}