Autenticação OAuth 2.0

*Este conteúdo é traduzido por IA (Beta) e pode conter erros. Para ver a página em inglês, clique aqui.

Este documento descreve endpoints que você chama para implementar o fluxo de autorização OAuth 2.0, bem como outros endpoints úteis para implementar a autenticação em seus aplicativos.

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

Autorização

GET v1/authorize

Obtém autorização do usuário para autenticar com sua conta Roblox. Espera uma URL de autorização válida construída com os parâmetros especificados. Este ponto de terminação suporta autorização PKCE.

Parâmetros de consulta

Solicitar

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

Resposta

Depois de chamar este endpoint, o usuário é redirecionado para a URL de redirecionamento especificada com o código de autorização em uma code query參數. O código de autorização:

  • Tem uma vida útil de um minuto.
  • Só pode ser resgatado uma vez.
  • É inválido após um uso.

Troca de Tokens

Para obter tokens para acessar APIs, troque um código de autorização por um conjunto de tokens confidenciais. Todos os pontos de terminação de tokens suportam dois tipos de autenticação de cliente:

  1. Esquema de Autenticação HTTP Básico com um cabeçalho de autorização: Authorization: Basic Base64 encoded(<client_id>:<client_secret>) .
  2. ID do Cliente e secreto no corpo da solicitação como parâmetros.

A seguinte lista descreve os vários tokens que você recebe deste ponto de terminação.

  • Token de Acesso - Representa a autorização de um criador ou usuário para um aplicativo de terceiros para acessar seus recursos protegidos do Roblox. É uma string denoting um escopo, tempo de vida e outros atributos de acesso. Uma vez que o servidor de autorização do Roblox emite um token de acesso para um aplicativo, o token:

    • É válido por 15 minutos.
    • Pode ser usado várias vezes antes que expire.
    • Pode ser invalidado antes que expire se um usuário de aplicativo revogar a autorização.
  • Token de atualização de token - Atualiza uma sessão de autorização. Um aplicativo pode usar o token de atualização para obter um novo conjunto de tokens, que inclui um token de acesso, um token de atualização e um token de ID. Um token de atualização:

    • É válido por 90 dias.
    • Só pode ser usado uma vez antes que expire para atualizar tokens.
    • Pode ser invalidado antes que expire se um usuário de aplicativo revogar a autorização.
  • Token de ID - Fornece prova de que a identificação de um usuário foi autenticada. Seu conteúdo depende dos escopos solicitados e pode conter informações básicas do usuário, incluindo o nome de exibição e o nome de usuário de um usuário. O token de ID é apenas para fins de autenticação de identificação e não fornece acesso a nenhum recurso Roblox.

POST v1/token

Obtenha um conjunto de tokens com um código de autorização.

Solicitar

(x-www-form-urlencoded)

| Chave | Valor | | -------------- | | | code | <authorization code> | | code_verifier | <pkce code verifier value> | | grant_type | authorization_code | | client_id | <client_id> | | client_secret | 1> <client_secret></

Exemplo de solicitação de token de obtenção

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'

Resposta

Exemplo de Resposta de Token de Exemplo

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

POST v1/token

Obtenha um conjunto de tokens com um token de atualização.

Solicitar

(x-www-form-urlencoded)

| Key | Value | | -------------- | ----------------- | | grant_type | refresh_token | | refresh_token | <refresh_token> | | client_id | <client_id> | | client_secret | <client_secret> |

Exemplo de solicitação de token de atualização

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'

Resposta

Exemplo de solicitação de token de atualização

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

POST v1/token/introspect

Receba informações sobre um token. Verifica se o token está atualmente válido e não expirou ainda. Útil para validação estática. Use apenas se a API que você está acessando não requer um recurso, como a API (Interface de Programação para Aplicações)de Recursos, ou se você só quiser ver reivindicações específicas do token.

Solicitar

(x-www-form-urlencoded)

| Chave | Valor | | -------------- | | | token | | <access_token> , <refresh_ token>] ou <id_ token> | | client_id | 1> <client_id>1> | | client_secret |

Exemplo de Pedido de 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'

Resposta

Exemplo de Resposta de Token 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

Verifique se um token pode acessar um recurso específico obtendo a lista de recursos do usuário que o usuário deu permissão. Isso é útil para validação estática.

Solicitar

(x-www-form-urlencoded)

| Chave | Valor | | -------------- | | | token | <access_token> | | client_id | <client_id> | | client_secret | <client_secret> |

Exemplo de solicitação de recursos de token

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'

Resposta

Exemplo de Resposta de Obtenção de Recursos

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

POST v1/token/revoke

Revogue uma sessão de autorização usando o token de atualização fornecido.

Solicitar

(x-www-form-urlencoded)

| Chave | Valor | | -------------- | | | token | <refresh_token> | | client_id | <client_id> | | client_secret | <client_secret> |

Exemplo de Solicitação de Tokens de Revogação

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'

Resposta

200 OK com uma resposta vazia

Informação do Usuário

GET /v1/userinfo

Obtém o ID do usuário Roblox e outros metadados de usuário.

Solicitar

cabeçalho de autorização : Authorization: Bearer <access_token>

Exemplo de Solicitação de Informação do Usuário

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

Resposta

Você pode usar o valor sub para identificar exclusivamente o usuário. Os usuários podem alterar seu Nome de exibiçãode usuário Roblox e exibir nome de exibição, para que não usem-os como identificadores exclusivos para referir-se a usuários em seu aplicativo.

| Reivindicar | Descrição | | Claim | | Descrição | | | | | | | | | | | | | | | | | | | | | | | | | | |

Exemplo de Usuário com Escopo de Perfil

{
"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"
}
Exemplo de Usuário sem Escopo de Perfil

{
"sub": "1516563360"
}

Descoberta

O DiscoveryDocument OpenID (OIDC) é um documento JSON que contém metadados sobre os detalhes de configuração da Open Cloud, incluindo uma lista de escopos e reivindicações relacionadas à identificação que são suportados. Você pode usá-lo para descobrir dinamicamente informações sobre os pontos de terminação Open Cloud OAuth 2.0 e configuração, como o ponto de autorização, o ponto de token e o configurarde chave pública.

Depois de recuperar e obter o DiscoveryDocument da DiscoveryDocument URI, você pode verificar manualmente os campos na resposta para verificar a informação ou você pode criar sua própria biblioteca de mapeamento de campos na resposta schema para automatizar seu fluxo de trabalho.

GET .well-known/openid-configuration

Resposta

Todas as respostas de Discovery seguem o mesmo schema da resposta de exemplo a seguir.

Exemplo de Resposta de Discovery

{
"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 / recursos",
"userinfo_endpoint": "https://apis.roblox.com/oauth/v1/userinfo",
"jwks_uri": "https://apis.roblox.com/oauth/v1/certs",
"registration_endpoint": "https://criar.roblox.com/dash/credenciais",
"service_documentation": "https://criar.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"
]
}