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 승인을 지원합니다.

쿼리 매개 변수

이름설명필수예제
client_id앱의 클라이언트 ID.yes816547628409595165403873012
redirect_uri사용자가 승인 흐름이 완료된 후 다시 리디렉션되는 URL.yeshttps://www.roblox.com/example-redirect
범위요청된 범위, 공백으로 구분됨.openid 범위를 사용하여 ID 토큰을 받으세요.openidprofile 범위를 사용하여 더 많은 사용자 정보를 얻습니다.yesopenid profile
response_type앱이 반환하길 원하는 자격 증명.기본값은 승인 코드 부여 입력.yesnone , code
prompt사용자에게 표시할 인증 및 동의 페이지를 지정합니다.일부 화면은 타사 앱에 필요하며 건너뛸 수 없습니다.nonone , login , consent , select_account
nonce클라이언트와 토큰을 바인딩하는 암호화 번호.no<random_value_1>
state사이트 간 요청 위조를 방지하는 불투명한 값, 악성 공격의 한 유형승인 후 앱으로 다시 전달됩니다.no<app-provided-opaque-value>
code_challenge결과 문자열은 다음과 같이 code_challenge_methodcode_verifier 에 적용합니다.noBase64-URL-인코딩된 문자열
code_challenge_methodcode_verifier 에 적용되는 함수.noS256

요청

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와 비밀은 매개 변수로 사용됩니다.

다음 목록에서는 이 끝점에서 받는 다양한 토큰을 설명합니다.

  • 액세스 토큰 - 제작자나 사용자가 타사 앱에 보호된 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_typerefresh_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 사용자 이름과 표시 이름을 변경할 수 있으므로 앱에서 사용자를 참조하기 위한 고유 식별자로 사용하지 마십시오.

클레임설명
subRoblox 사용자 ID.
이름Roblox 디스플레이 이름.
닉네임Roblox 표시 이름.
preferred_usernameRoblox 사용자 이름.
created_atRoblox 계정의 생성 시간을 Unix 시간으로 표시합니다.
프로필Roblox 계정 프로필 URL.
pictureRoblox 아바타 헤드샷 이미지.아바타 헤드샷 이미지가 아직 생성되지 않았거나 조정되지 않았다면 무효일 수 있습니다.
프로필 범위를 가진 예시 사용자

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