이 문서에서는 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 범위를 사용하여 ID 토큰을 받으세요.openid 및 profile 범위를 사용하여 더 많은 사용자 정보를 얻습니다. | yes | openid profile |
response_type | 앱이 반환하길 원하는 자격 증명.기본값은 승인 코드 부여 입력. | yes | none , code |
prompt | 사용자에게 표시할 인증 및 동의 페이지를 지정합니다.일부 화면은 타사 앱에 필요하며 건너뛸 수 없습니다. | no | none , login , consent , select_account |
nonce | 클라이언트와 토큰을 바인딩하는 암호화 번호. | no | <random_value_1> |
state | 사이트 간 요청 위조를 방지하는 불투명한 값, 악성 공격의 한 유형승인 후 앱으로 다시 전달됩니다. | no | <app-provided-opaque-value> |
code_challenge | 결과 문자열은 다음과 같이 code_challenge_method 를 code_verifier 에 적용합니다. | no | Base64-URL-인코딩된 문자열 |
code_challenge_method | code_verifier 에 적용되는 함수. | no | 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
응답
이 끝점을 호출한 후, 사용자는 code 쿼리 매개변수에서 권한 코드를 사용하여 지정된 리디렉션 URL로 리디렉션됩니다.승인 코드:
- 1분의 수명이 있습니다.
- 한 번만 사용할 수 있습니다.
- 한 번 사용한 후 무효화됩니다.
토큰 교환
API에 액세스하기 위한 토큰을 얻으려면 기밀 토큰 집합에 대해 권한 코드 를 교환하십시오.모든 토큰 끝점은 두 가지 유형의 클라이언트 인증을 지원합니다:
- 권한 헤더가 있는 HTTP 기본 인증 스키마: Authorization: Basic Base64 encoded(<client_id>:<client_secret>) .
- 요청 본문의 클라이언트 ID와 비밀은 매개 변수로 사용됩니다.
다음 목록에서는 이 끝점에서 받는 다양한 토큰을 설명합니다.
액세스 토큰 - 제작자나 사용자가 타사 앱에 보호된 Roblox 리소스에 액세스할 수 있는 권한을 나타냅니다.특정 범위, 수명 및 기타 액세스 특성을 나타내는 문자열입니다.Roblox 인증 서버가 앱에 액세스 토큰을 발행하면 토큰:
- 15분 동안 유효합니다.
- 만료되기 전에 여러 번 사용할 수 있습니다.
- 앱 사용자가 승인을 취소하면 만료 전에 무효화될 수 있습니다.
토큰 새로 고침 - 권한 세션을 새로 고칩니다.앱은 새로 고침 토큰을 사용하여 액세스 토큰, 새로 고침 토큰 및 ID 토큰이 포함된 새로운 토큰 세트를 얻을 수 있습니다.새로 고침 토큰:
- 90일 동안 유효합니다.
- 토큰을 새로 고칠 때까지 만료되기 전에 한 번만 사용할 수 있습니다.
- 앱 사용자가 승인을 취소하면 만료 전에 무효화될 수 있습니다.
ID 토큰 - 사용자의 정체성이 인증되었음을 증명합니다.콘텐츠는 요청된 범위에 따라 달라지며 사용자의 Roblox 표시 이름과 사용자 이름을 포함할 수 있습니다.ID 토큰은 식별 목적으로만 사용되며 Roblox 리소스에 액세스하지 않습니다.
POST v1/token
승인 코드로 토큰 세트 받기.
요청
(x-www-form-urlencoded)
키 | 값 |
---|---|
코드 | <authorization code> |
code_verifier | <pkce code verifier value> |
grant_type | 권한_코드 |
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가 리소스를 필요로 하지 않거나, 자산 API와 같이 리소스가 필요하지 않은 경우에만 사용하십시오. 또는 토큰의 특정 주장을 보고 싶은 경우.
요청
(x-www-form-urlencoded)
키 | 값 |
---|---|
토큰 | <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
Roblox 사용자 ID 및 기타 사용자 메타데이터를 가져옵니다.
요청
권한 헤더 : Authorization: Bearer <access_token>사용자 정보 요청 예시
curl --location --request GET 'https://apis.roblox.com/oauth/v1/userinfo' \--header 'Authorization: Bearer eyjlflabtfl...4gxqYBG'
응답
sub사용자는 Roblox 사용자 이름과 표시 이름을 변경할 수 있으므로 앱에서 사용자를 참조하기 위한 고유 식별자로 사용하지 마십시오.
클레임 | 설명 |
---|---|
sub | Roblox 사용자 ID. |
이름 | Roblox 디스플레이 이름. |
닉네임 | Roblox 표시 이름. |
preferred_username | Roblox 사용자 이름. |
created_at | Roblox 계정의 생성 시간을 Unix 시간으로 표시합니다. |
프로필 | Roblox 계정 프로필 URL. |
picture | 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 연결(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/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"
]
}