Dokument ten opisuje punkty końcowe, które należy wywołać w celu wdrożenia przepływu kodu autoryzacji OAuth 2.0 oraz inne punkty końcowe przydatne do wdrażania uwierzytelnienia w aplikacjach.
Podstawowy URLhttps://apis.roblox.com/oauth
Punkty końcoweGET v1/authorizePOST v1/tokenPOST v1/token/introspectPOST v1/token/resourcesPOST v1/token/revokeGET v1/userinfoGET .well-known/openid-configuration
Autoryzacja
GET v1/authorize
Uzyskuje autoryzację od użytkownika do uwierzytelnienia się za pomocą ich konta Roblox. Oczekuje ważnego adresu URL autoryzacji skonstruowanego z określonymi parametrami. Ten punkt końcowy obsługuje autoryzację PKCE.
Parametry zapytania
| Nazwa | Opis | Wymagane | Przykład |
|---|---|---|---|
| client_id | Identyfikator klienta aplikacji. | tak | 816547628409595165403873012 |
| redirect_uri | Adres URL, na który użytkownicy są przekierowywani po zakończeniu przepływu autoryzacji. | tak | `https://www.roblox.com/example-redirect`` |
| scope | Żądane zakresy, oddzielone spacjami. Użyj zakresu openid, aby otrzymać token ID. Użyj zakresów openid oraz profile, aby uzyskać więcej informacji o użytkowniku. | tak | openid profile |
| response_type | Poświadczenia, które aplikacja chce otrzymać z powrotem. Domyślnym typem jest typ przyznania kodu autoryzacyjnego. | tak | none, code |
| prompt | Określa, jakie strony uwierzytelniania i zgody są wyświetlane użytkownikom. Niektóre ekrany są wymagane dla aplikacji zewnętrznych i nie mogą być pomijane. | nie | none, login, consent, select_account |
| nonce | Kryptograficzna liczba, która wiąże token z klientem. | nie | <random_value_1> |
| state | Nieprzejrzysty parametr, który zapobiega fałszywemu uwierzytelnieniu, typowi malwersacji. Przekazywany z powrotem do aplikacji po autoryzacji. | nie | <app-provided-opaque-value> |
| code_challenge | Powstały ciąg po zastosowaniu code_challenge_method do code_verifier. | nie | Ciąg zakodowany w Base64-URL |
| code_challenge_method | Funkcja, która jest stosowana do code_verifier. | nie | S256 |
Zapytanie
Przykładowe zapytanie kierujące do przepływu autoryzacjihttps://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 wywołaniu tego punktu końcowego użytkownik jest przekierowywany na określony adres URL przekierowania z kodem autoryzacyjnym w parametrze zapytania code. Kod autoryzacyjny:
- Ma czas życia wynoszący jedną minutę.
- Można go zrealizować tylko raz.
- Jest nieważny po pierwszym użyciu.
Wymiana tokenów
Aby uzyskać tokeny do uzyskiwania dostępu do API, wymień kod autoryzacyjny na zestaw poufnych tokenów. Wszystkie punkty końcowe tokenów obsługują dwa rodzaje uwierzytelnienia klienta:
- Schemat uwierzytelniania HTTP Basic z nagłówkiem autoryzacji: Authorization: Basic Base64 encoded(<client_id>:<client_secret>).
- Identyfikator klienta i tajny klucz w ciele zapytania jako parametry.
Poniższa lista opisuje różne tokeny, które otrzymujesz z tego punktu końcowego.
Token dostępu - Reprezentuje autoryzację od twórcy lub użytkownika dla zewnętrznej aplikacji, aby uzyskać dostęp do ich chronionych zasobów Roblox. Jest to ciąg oznaczający określony zakres, czas życia i inne atrybuty dostępu. Po wydaniu tokenu dostępu przez serwer autoryzacji Roblox, token:
- Jest ważny przez 15 minut.
- Może być używany wielokrotnie przed jego wygaśnięciem.
- Może zostać unieważniony przed wygaśnięciem, jeśli użytkownik aplikacji revokuje autoryzację.
Token odświeżający - Odświeża sesję autoryzacji. Aplikacja może używać tokenu odświeżającego, aby uzyskać nowy zestaw tokenów, który obejmuje token dostępu, token odświeżający i token ID. Token odświeżający:
- Jest ważny przez 90 dni.
- Może być używany tylko raz przed jego wygaśnięciem w celu odświeżenia tokenów.
- Może być unieważniony przed wygaśnięciem, jeśli użytkownik aplikacji revokuje autoryzację.
Token ID - Dostarcza dowód na to, że tożsamość użytkownika została uwierzytelniona. Jego zawartość zależy od żądanych zakresów i może zawierać podstawowe informacje o użytkowniku, w tym nazwę wyświetlaną Roblox i nazwę użytkownika. Token ID jest przeznaczony wyłącznie do celów uwierzytelniania tożsamości i nie zapewnia dostępu do żadnych zasobów Roblox.
POST v1/token
Uzyskaj zestaw tokenów za pomocą kodu autoryzacyjnego.
Zapytanie
(x-www-form-urlencoded)
| Klucz | Wartość |
|---|---|
| code | <kod autoryzacyjny> |
| code_verifier | <wartość weryfikatora pkce> |
| grant_type | authorization_code |
| client_id | <client_id> |
| client_secret | <client_secret> |
Przykładowe zapytanie uzyskania tokenucurl --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ładowa odpowiedź uzyskania tokenu
{
"access_token": "...",
"refresh_token": "...",
"token_type": "Bearer",
"expires_in": 899,
"scope": "universe-messaging-service:publish"
}
POST v1/token
Uzyskaj zestaw tokenów za pomocą tokenu odświeżającego.
Zapytanie
(x-www-form-urlencoded)
| Klucz | Wartość |
|---|---|
| grant_type | refresh_token |
| refresh_token | <refresh_token> |
| client_id | <client_id> |
| client_secret | <client_secret> |
Przykładowe zapytanie odświeżenia tokenucurl --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ź
Przykładowa odpowiedź odświeżenia tokenu
{
"access_token": "...",
"refresh_token": "...",
"token_type": "Bearer",
"expires_in": 899,
"scope": "universe-messaging-service:publish"
}
POST v1/token/introspect
Odbierz informacje o tokenie. Weryfikuje, czy token jest obecnie ważny i nie wygasł. Przydatne do walidacji bezstanowej. Użyj tylko, jeśli API, do którego uzyskujesz dostęp, nie wymaga zasobów, takich jak API zasobów, lub jeśli chcesz po prostu zobaczyć konkretne roszczenia tokenu.
Zapytanie
(x-www-form-urlencoded)
| Klucz | Wartość |
|---|---|
| token | <access_token>, <refresh_token> lub <id_token> |
| client_id | <client_id> |
| client_secret | <client_secret> |
Przykładowe zapytanie weryfikacji tokenucurl --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ź
Przykładowa odpowiedź weryfikacji tokenu
{
"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 konkretnego zasobu, uzyskując listę zasobów użytkownika, do których użytkownik przyznał pozwolenie. Jest to przydatne do walidacji stanowej.
Zapytanie
(x-www-form-urlencoded)
| Klucz | Wartość |
|---|---|
| token | <access_token> |
| client_id | <client_id> |
| client_secret | <client_secret> |
Przykładowe zapytanie uzyskania zasobów tokenucurl --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 zakres przyznał dostęp do zasobu należącego do upoważnionego owner.
Przykładowa odpowiedź uzyskania zasobów tokenu
{
"resource_infos": [
{
"owner": {
"id": "1516563360",
"type": "User"
},
"resources": {
"universe": {
"ids": ["3828411582"]
},
"creator": {
"ids": ["U"]
}
}
}
]
}
POST v1/token/revoke
Cofnij sesję autoryzacji przy użyciu podanego tokenu odświeżającego.
Zapytanie
(x-www-form-urlencoded)
| Klucz | Wartość |
|---|---|
| token | <refresh_token> |
| client_id | <client_id> |
| client_secret | <client_secret> |
Przykładowe zapytanie unieważnienia tokenucurl --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
Uzyskuje identyfikator użytkownika Roblox i inne metadane użytkownika.
Zapytanie
Nagłówek autoryzacji: Authorization: Bearer <access_token>
Przykładowe zapytanie o informacje o użytkownikucurl --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ą zmieniać swoją nazwę użytkownika Roblox i nazwę wyświetlaną, więc nie używaj ich jako unikalnych identyfikatorów do odniesienia do użytkowników w swojej aplikacji.
| Roszczenie | Opis |
|---|---|
| sub | Identyfikator użytkownika Roblox. |
| name | Nazwa wyświetlana Roblox. |
| nickname | Nazwa wyświetlana Roblox. |
| preferred_username | Nazwa użytkownika Roblox. |
| created_at | Czas utworzenia konta Roblox w formie znaku czasowego Unix. |
| profile | URL profilu konta Roblox. |
| picture | Zdjęcie awatara Roblox. Może być null, jeśli zdjęcie awatara jeszcze nie zostało wygenerowane lub zostało moderowane. |
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ładowy użytkownik bez zakresu profilu
{
"sub": "1516563360"
}
Odkrywanie
Dokument odkrywania OpenID Connect (OIDC) to dokument JSON, który zawiera metadane dotyczące szczegółów konfiguracji Open Cloud, w tym listę zakresów i roszczeń związanych z tożsamością, które są obsługiwane. Możesz go używać do dynamicznego odkrywania informacji na temat punktów końcowych i konfiguracji OAuth 2.0 Open Cloud, takich jak punkt końcowy autoryzacji, punkt końcowy tokenów i publiczny zestaw kluczy.
Po pobraniu i pozyskaniu dokumentu odkrywania z URI dokumentu odkrywania, możesz albo ręcznie sprawdzić pola w odpowiedzi, aby zweryfikować informacje, albo możesz stworzyć własną własną bibliotekę mapującą pola w schemacie odpowiedzi, aby zautomatyzować swój proces pracy.
GET .well-known/openid-configuration
Odpowiedź
Wszystkie odpowiedzi dokumentu odkrywania mają tę samą strukturę, co poniższy przykład odpowiedzi.
Przykładowa odpowiedź dokumentu odkrywania
{
"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"
]
}