Autoryzacja 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ńcówki, do których dzwonisz, aby wdrożyć przepływ autoryzacji kodu OAuth 2.0, a także inne końcówki przydatne do wdrożenia uwierzytelnienia w swoich 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

Uzyskuje autoryzację od użytkownika, aby uwierzyć się z jego kontoRoblox.Oczekuje ważnego URL autoryzacji zbudowanego z określonymi parametrami.Ten punkt końcowy wspiera autoryzację PKCE.

Parametry zapytania

NazwaOpisWymaganePrzykład
client_idID klienta aplikacji.tak816547628409595165403873012
redirect_uriURL, do którego użytkownicy są przekierowywani po zakończeniu przepływu autoryzacji.takhttps://www.roblox.com/example-redirect
zakresŻądane zakresy, oddzielone spacją.Użyj zakresu openid, aby otrzymać token ID.Użyj zakresów openid i profile, aby uzyskać więcej informacji o użytkowniku.takopenid profile
rodzaj odpowiedziCredentiali, które aplikacja chce zwrócić.Domyślnym wpisywaćjest rodzaj autoryzacji kodu grantu.taknone , code
promptOkreśla, jakie strony uwierzytelnienia i zgody są wyświetlane użytkownikom.Niektóre ekrany są wymagane dla aplikacji stron trzecich i nie można ich pominąć.nonone , login , consent , select_account
nonceNumer kryptograficzny, który wiąże token z klientem.nie<random_value_1>
stanNiewidoczna wartość, która zapobiega sfałszowaniu żądań międzystronnych, rodzajowi ataku złośliwego.Przekazane z powrotem do aplikacji po autoryzacji.nie<app-provided-opaque-value>
code_challengeWynikująca strona stosowania code_challenge_method do code_verifier.nieBase64-URL-kodowany ciąg
code_challenge_methodFunkcja, która jest stosowana do code_verifier .nieS256

Żądanie

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 wywołaniu tego punktu końcowego użytkownik zostaje przekierowany na określoną URL przekierowania z kodem autoryzacji w parametrze zapytania code.Kod autoryzacji:

  • Ma czas trwania jednej minuty.
  • Można go odebrać tylko raz.
  • Nie jest ważny po jednym użyciu.

wymianatokenów

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

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

Następująca 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 aplikacji strony trzeciej, aby uzyskać dostęp do chronionych zasobów Roblox.Jest to ciąg oznaczający określony zakres, czas trwania i inne atrybuty dostępu.Gdy serwer autoryzacji Roblox wyda token dostępu do aplikacja, token:

    • Jest ważny przez 15 minut.
    • Można go używać wielokrotnie przed wygaśnięciem.
    • Można ją unieważnić przed wygaśnięciem, jeśli użytkownik aplikacji cofnie autoryzację.
  • Odśwież token - odświeża sesję sesja.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.Żeton odświeżający:

    • Jest ważny przez 90 dni.
    • Można go używać tylko raz, zanim wygaśnie, aby odświeżyć tokeny.
    • Można ją unieważnić przed wygaśnięciem, jeśli użytkownik aplikacji cofnie autoryzację.
  • Token ID - Dostarcza dowód, że tożsamość użytkownika została uwierzytelniona.Jego zawartość zależy od zakresów żądanych i może zawierać podstawowe informacje użytkownika, w tym nazwę wyświetlania Roblox użytkownika i nazwa użytkownika.Token ID służy wyłącznie do celów autentyfikacji tożsamości i nie zapewnia dostępu do żadnych zasobów Roblox.

POST v1/token

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

Żądanie

(x-www-form-urlencoded)

KluczWartość
kod<authorization code>
kod_weryfikator<pkce code verifier value>
grant_typeautorizacja_kod
klient_id<client_id>
klient_sekret<client_secret>
Przykład prośby o uzyskanie żetonu

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 uzyskania odpowiedzi na token

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

POST v1/token

Zdobądź zestaw tokenów z tokenem odświeżającym.

Żądanie

(x-www-form-urlencoded)

KluczWartość
grant_typerefresh_token
refresh_token<refresh_token>
klient_id<client_id>
klient_secret<client_secret>
Przykład prośby o odświeżenie tokenu

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ź

Przykład prośby o odświeżenie tokenu

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

POST v1/token/introspect

Otrzymaj informacje o tokenie.Weryfikuje, czy token jest obecnie ważny i nie wygasł jeszcze.Przydatne do bezpaństwowej walidacji.Użyj tylko wtedy, gdy API, do którego masz dostęp, nie wymaga zasobu, takiego jak API Zasobów, lub jeśli po prostu chcesz zobaczyć konkretne roszczenia tokena.

Żądanie

(x-www-form-urlencoded)

KluczWartość
token<access_token> , <refresh_token> lub <id_token>
client_id<client_id>
client_secret<client_secret>
Przykład prośby o token introspekcji

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 token Introspect przykładu

{
"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, którym użytkownik dał zgodę.Jest to przydatne do weryfikacji stanowej.

Żądanie

(x-www-form-urlencoded)

KluczWartość
token<access_token>
client_id<client_id>
client_secret<client_secret>
Przykład żądania zasobów tokenowych

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 zakres przyznał dostęp do zasoby należącego do autoryzującego owner .

Przykład odpowiedzi na zdobycie zasobów tokenowych

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

POST v1/token/revoke

Odwołaj sesję autoryzacji za pomocą dostarczonego żetonu odświeżenia.

Żądanie

(x-www-form-urlencoded)

KluczWartość
token<refresh_token>
client_id<client_id>
client_secret<client_secret>
Przykład prośby o cofnięcie żetonu

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

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

Żądanie

nagłowie autoryzacji : Authorization: Bearer <access_token>

Przykład prośby o uzyskanie informacji o użytkowniku

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 jednoznacznie zidentyfikować użytkownika.Użytkownicy mogą zmienić swoją nazwa wyświetlanaużytkownika i nazwę wyświetlaną w Roblox, więc nie używaj ich jako unikalnych identyfikatorów odnoszących się do użytkowników w Twojej aplikacja.

ZgłośOpis
subID użytkownika Roblox.
nazwanazwa wyświetlanawyświetlania Roblox.
nicknameNazwa wyświetlania Roblox.
preferred_usernamenazwa wyświetlananazwa użytkownikaRoblox.
created_atCzas stworzenia konta Roblox jako czasopień Unix.
profilURL profilu konta Roblox.
zdjęcieZdjęcie głowy awatara Roblox.Może być null, jeśli obraz strzału w głowę awatara nie został jeszcze wygenerowany lub został zmoderowany.
Przykładowy użytkownik z zakresem profilu

{
"sub": "1516563360",
"name": "exampleuser",
"nickname": "exampleuser",
"preferred_username": "exampleuser",
"created_at": 1584682495,
"profile": "https://www.roblox.com/użytkownicy/1516563360/profil",
"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) jest dokumentem JSON zawierającym metadane o szczegółach konfiguracji chmury otwartej, w tym listę zakresów i roszczeń związanych z tożsamością, które są wspierane.Możesz go użyć do dynamicznego odkrywania informacji o końcówkach Open Cloud OAuth 2.0 i konfiguracji, takich jak punkt autoryzacji, punkt końcowy tokenów i ustawiaćkluczy publicznych.

Po odzyskaniu i pobraniu dokumentu odkrywania z adresu URI dokumentu odkrywania możesz ręcznie sprawdzić pola w odpowiedzi, aby zweryfikować informacje, lub możesz utworzyć własną niestandardową mapę biblioteki do pól w schemacie odpowiedzi, aby zautomatyzować przepływ pracy.

GET .well-known/openid-configuration

Odpowiedź

Wszystkie odpowiedzi dokumentu odkrywania podążają za tym samym schematem, jak odpowiedź przykładowa poniżej.

Odpowiedź dokumentu odkrywania przykładu

{
"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/odwołanie",
"resources_endpoint": "https://apis.roblox.com/oauth/v1/token/źródła",
"userinfo_endpoint": "https://apis.roblox.com/oauth/v1/userinfo",
"jwks_uri": "https://apis.roblox.com/oauth/v1/certyfikaty",
"registration_endpoint": "https://create.roblox.com/dashboard/credentials",
"service_documentation": "https://create.roblox.com/docs/referencje/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"
]
}