Autoryzacja za pomocą OAuth 2.0

*Ta zawartość została przetłumaczona przy użyciu narzędzi AI (w wersji beta) i może zawierać błędy. Aby wyświetlić tę stronę w języku angielskim, kliknij tutaj.

Ten dokument opisuje końcewety, które możesz wezwywać, aby zaimplementować kod autoryzacji OAuth 2.0, a także inne końcewety użyteczne do wdrożenia uwierzytelnienia w twoich aplikacjach.

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

Autoryzacja

GET v1/authorize

Zdobywa autoryzację od użytkownika, aby uwierzytelnić się za pomocą jego kontoRoblox. Oczekuje poprawny URL autoryzacji zbudowany z określonych parametrów. Ten interfejs wspiera uwierzytelnienie PKCE.

Parametry zapytania

Zgłaszaj prośbę

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

Odpowiedź

Po wezwaniu tego końca użytkownik jest przekierowany do określonego URL z kodem autoryzacji w code parametrem zapytania. Kod autoryzacji:

  • Ma czas życia jednej minuty.
  • Można go odebrać tylko raz.
  • Jest nieprawidłowy po jednym użyciu.

Wymiana Tokenów

Aby uzyskać tokeny do dostępu do API, wymień kod autoryzacji za zestaw poufnych tokenów. Wszystkie punkty końcowe tokenów wspierają dwa rodzaje uwierzytelnienia klienta:

  1. Protokół autoryzacji HTTP z nagłówkim autoryzacji: Authorization: Basic Base64 encoded(<client_id>:<client_secret>) .
  2. ID i sekret w ciele wniosku jako parametry.

Poniższa lista opisuje różne tokeny, które otrzymujesz z tego końca.

  • Token dostępu Reprezentuje autoryzację od twórcy lub użytkownika dla aplikacji stron trzecich, aby uzyskać dostęp do ich chronionych zasobów Roblox. Jest to struny określające specyficzny zakres, czas życia i inne cechy dostępu. Po wygłoszeniu przez węzł aplikacjaautoryzacji token dostępu:

    • Jest ważny przez 15 minut.
    • Można go używać wiele razy przed jego wygaśnięciem.
    • Można go anulować przed upływem czasu, jeśli użytkownik aplikacji cofnie autoryzację.
  • Token odświeżania - Odświeża sesjaautoryzacji. Aplikacja może użyć tokenu odświeżania, aby uzyskać nowy zestaw tokenów, w tym token dostępu, token odświeżania i token tożsamości. Token odświeżania:

    • Jest ważny przez 90 dni.
    • Można używać tylko raz przed wygasną, aby odświeżyć tokeny.
    • Można go anulować przed upływem czasu, jeśli użytkownik aplikacji cofnie autoryzację.
  • Token ID - Dostarcza dowód, że tożsamość użytkownika została uwierzytelniona. Jego treść zależy od wymagań wnioskowanych i może zawierać podstawowe informacje użytkownika, w tym imię użytkownika Roblox i nazwa użytkownika. Token ID jest tylko do celów uwierzytelniania tożsamości i nie dostarcza dostępu do żadnych zasobów Roblox.

POST v1/token

Zdobądź zestaw tokenów z kodem autoryzacji.

Zgłaszaj prośbę

(x-www-form-urlencoded)

| Klucz | Wartość | | Dziesiątki | | Kodeksy | | code | <authorization code> | | kode_verifier | <pkce code verifier value> | | grant_type | autoryzacja_kodeks | | | client_id | <client_id> | | client_secret |

Przykład wniosku o dostarczenie tokenu

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'

Odpowiedź

Przykład Otrzymania Odpowiedzi Token

{
"access_token": "...",
"refresh_token": "...",
"token_type": "Bearer",
"expires_in": 899,
"scope": "universe-messaging-service:publish"
}

POST v1/token

Zdobądź zestaw tokenów za pomocą tokenu odświeżania.

Zgłaszaj prośbę

(x-www-form-urlencoded)

| Klucz | Wartość | | -------------- | ----------------- | | grant_type | refresh_ token | | refresh_ token | <refresh_token> | | client_id | <client_id> | | client_secret | <client_secret> |

Prośba o aktualizację tokena

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'

Odpowiedź

Prośba o aktualizację tokena

{
"access_token": "...",
"refresh_token": "...",
"token_type": "Bearer",
"expires_in": 899,
"scope": "universe-messaging-service:publish"
}

POST v1/token/introspect

Otrzymuj informacje o tokenie. Zweryfikuje, czy token jest obecnie ważny i nie wygasł jeszcze. Przydatny do statystycznej weryfikacji. Użyj tylko jeśli API, do której masz dostęp, nie wymaga zasobu, takiego jak Assets API, lub jeśli po prostu chcesz zobaczyć konkretne oświadczenia o tokenie.

Zgłaszaj prośbę

(x-www-form-urlencoded)

| Klucz | Wartość | | Działka | | Dokumentacja | | Token | | <access_token> , <refresh_ token>] lub <id_ token> | | Klient_id | | 1> <client_id>1> | | | Klient_secret | 4> <客戶_秘密>] |

Prośba o przykładowy 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'

Odpowiedź

Odpowiedź na przykład tokena 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

Sprawdź, czy token może uzyskać dostęp do określonego zasobu, uzyskując listę zasobów użytkownika, dla którego udzielono zgody. To jest użyteczne dla poprawnej weryfikacji stanu.

Zgłaszaj prośbę

(x-www-form-urlencoded)

| klucz | wartość | | | | | | | | | | | token | <access_token> | | klienck_id | <client_id> | | klienck_seкреt | <client_secret> |

Wniosek o zasoby tokenowe przykładu

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'

Odpowiedź

Wartość U w ids wskazuje, że kopia ma dostęp do zasobu należącego do autora owner.

Przykład Otrzymanie odpowiedzi zasobów tokenowych

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

POST v1/token/revoke

Odzuń sesję autoryzacji używając dostarczonego tokena odświeżania.

Zgłaszaj prośbę

(x-www-form-urlencoded)

| klucz | wartość | | -------------- | | token | <refresh_token> | | klient_id | <client_id> | | klient_secret | <client_secret> |

Prośba o usunięcie tokena 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'

Odpowiedź

200 OK z pustą odpowiedzią

Informacje o użytkowniku

GET /v1/userinfo

Otrzymuje ID użytkownika Roblox i inne metadane użytkownika.

Zgłaszaj prośbę

Autoryzacja nagłówka głowy : Authorization: Bearer <access_token>

Przykład Get User Info Request

curl --location --request GET 'https://apis.roblox.com/oauth/v1/userinfo' \
--header 'Authorization: Bearer eyjlflabtfl...4gxqYBG'

Odpowiedź

Możesz użyć wartości sub, aby unikalnie zidentyfikować użytkownika. Użytkownicy mogą zmienić swoje nazwa wyświetlanaużytkownika i nazwę wyświetlaną, więc nie używaj ich jako unikalnych identyfikatorów do odniesienia się do użytkowników na swojej aplikacja.

| Claim | Description | | ------------------ | | | sub | Roblox nazwa użytkownikaID.

Przykładowy użytkownik z zakresem profilu

{
"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"
}
Przykład użytkownika bez profilu

{
"sub": "1516563360"
}

Odkryj

Dokument Discovery OpenID Connect (OIDC) to JSONowy dokument zawierający metadane o szczegółach konfiguracji Open Cloud, w tym listę związanych z identyfikatorem zakresów i oświadczeń, które są wspierane. Możesz go używać do dynamicznego odkrywania informacji o Open Cloud OAuth 2.0 endpoints i konfiguracji, takich jak autoryzacja endpoint i token endpoint.

Po odzyskaniu i odczytaniu Dokumentu Odkrycia z Dokumentu URL Dokumentu, możesz ręcznie sprawdzić pola w odpowiedzi, aby zweryfikować informacje, lub możesz stworzyć własną mapę biblioteki do pola w odpowiedzi, aby automatyzować swoją pracę.

GET .well-known/openid-configuration

Odpowiedź

Wszystkie odpowiedzi na dokumenty odkrycia podążają za tym samym schematem, co następująca odpowiedź na przykład.

Odpowiedź na pytanie o dostępności dokumentu

{
"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/資源"
"userinfo_endpoint": "https://apis.roblox.com/oauth/v1/userinfo",
"jwks_uri": "https://apis.roblox.com/oauth/v1/certs",
"registration_endpoint": "https://create.roblox.com/дашборд/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"
]
}