OAuth 2.0 인증

*이 콘텐츠는 AI(베타)를 사용해 번역되었으며, 오류가 있을 수 있습니다. 이 페이지를 영어로 보려면 여기를 클릭하세요.

이 문서에서는 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

응답

이 엔드포인트를 호출한 후 사용자는 code 쿼리 매개 변수에 대한 권한 코드가 있는 지정된 리디렉션 URL로 리디렉션됩니다. 권한 코드:

  • 1분의 평생이 있습니다.
  • 단 한 번만 교환할 수 있습니다.
  • 한 번 사용 후 유효하지 않습니다.

토큰 교환

API에 액세스하려면 권한 코드를 교환하여 익명 토큰 집합을 교환하십시오. 모든 토큰 엔드포인트는 두 가지 유형의 클라이언트 인증을 지원합니다.

  1. 권한 부여 헤더가 있는 HTTP 기본 인증 메커니즘: Authorization: Basic Base64 encoded(<client_id>:<client_secret>) .
  2. 요청 본문에 있는 클라이언트 ID 및 비밀 인수로 구성 요소입니다.

이 엔드포인트에서 수신하는 다양한 토큰에 대한 설명입니다.

  • 액세스 토큰 - 제3자 앱이 보호된 Roblox 리소스에 액세스하려면 크리에이터 또는 사용자로부터 권한을 부여받는 것을 나타냅니다. 액세스 토큰은 특정 범위, 수명 및 기타 액세스 특성을 나타냅니다. Roblox 인증 서버가 액세스 토큰을 앱에 부여하면 액세스 토큰:

    • 15분 동안 유효합니다.
    • 만료되기 전에 여러 번 사용할 수 있습니다.
    • 앱 사용자가 권한을 취소하면 만료되기 전에 유효화할 수 없습니다.
  • 토큰 새로 고침 - 권한 세션을 새로 고칩니다. 앱은 토큰 새로 고침 토큰을 사용하여 새로운 세트의 토큰을 얻을 수 있습니다. 토큰 새로 고침:

    • 90일 동안 유효합니다.
    • 토큰을 새로 고칠 때까지 1번만 사용할 수 있습니다.
    • 앱 사용자가 권한을 취소하면 만료되기 전에 유효화할 수 없습니다.
  • ID 토큰 - 사용자의 신원이 확인된 증명을 제공합니다. 콘텐츠는 요청된 범위에 따라 달라 일부 사용자 정보를 포함할 수 있습니다. ID 토큰은 신원 확인 목적에만 사용되며 Roblox 리소스에 액세스하지 않습니다.

POST v1/token

인증 코드가 있는 세트의 토큰을 얻습니다.

요청

(x-www-form-urlencoded)

| 열쇠 | 값 | | -------------- | 더 | 코드 | <authorization code> | | code_verifier | <pkce code verifier value> | | grant_type | authorization_code | | client_id | <client_id> | | client_secret | 1> <common

토큰 요청 예시

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에 대해 리소스가 필요하지 않도록 사용하십시오. 토큰에 대한 특정 청구를 보려면 사용하지 마십시오.

요청

(x-www-form-urlencoded)

| 키 | 값 | | 종료 | | token | | <access_token> , <refresh_token> 또는 <id_token> | | client_id | 1> <client_id>1> |

예시 인트로스펙트 토큰 요청

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'

응답

토큰 자원 응답 예시

{
"resource_infos": [
{
"owner": {
"id": "1516563360",
"type": "User"
},
"resources": {
"universe": {
"ids": ["3828411582"]
}
}
}
]
}

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 사용자 이름 및 표시 이름을 변경할 수 있으므로 고유한 식별자로 사용하지 마십시오. 앱에 사용자를 참조하는 고유한 식별자를 참조하려면 사용하지 마십시오.

| 주장 | 설명 | | | 서브 | Roblox 사용자 ID. | | | 이름 | 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/아바타 헤드샷/Png"
}
프로필 범위가 없는 사용자 예시

{
"sub": "1516563360"
}

발견

OpenID Connect (OIDC) Discovery 문서는 Open Cloud 구성 세부 정보에 대한 메타데이터가 포함된 JSON 문서입니다. 이 문서에는 지원되는 식별자 관련 범위 및 지원되는 토큰 엔드포인트가 포함되어 있습니다. 이 문서를 사용하여 Open Cloud OAuth 2.0 엔드포인트 및 구성, 예를 들어 권한 엔드포인트, 설정

Discovery 문서 URL에서 발견 문서를 검색하고 가져온 후 필드를 수동으로 검사하여 정보를 확인하거나 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/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/dash/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"
]
}