Documentação do Steamworks
Autenticação de usuário e titularidade

Visão geral

O Steamworks expõe várias formas de autenticar a identidade de um usuário Steam e verificar a titularidade de um aplicativo. O documento a seguir descreve cada uma dessas formas de autenticação usadas nos seguintes cenários:

Identificação de um usuário no Steam

Cada usuário do Steam pode ser identificado unicamente por meio de um ID numérico de 64 bits, conhecido como o ID Steam do usuário. Nas APIs Steamworks em C++, o ID Steam de um usuário é armazenado em um objeto CSteamID. É possível recuperar o objeto SteamID do usuário atual ao chamar a função ISteamUser::GetSteamID e então recuperar o ID 64 bits ao chamar a função CSteamID.ConvertToUint64() do valor retornado.

As formas de autenticação a seguir podem ser usadas para verificar o ID Steam de um usuário de forma segura.

APIs cobertas neste documento

Tickets de sessão

Tickets de sessão são tickets assinados que podem ser usados para verificar a identidade de um usuário entre o cliente do jogo do usuário e quaisquer outros clientes (como em uma sessão multijogadora P2P) ou um servidor, dedicado ou não (usando a API ISteamGameServer). Estes tickets também podem ser usados para verificar a titularidade do jogo atual e conteúdos adicionais relacionados, assim como determinar se o usuário foi banido por VAC (Consulte Valve Antitrapaça (VAC) e banimentos de jogos).
Tickets de sessão também podem ser usados para verificar a identidade do usuário entre o cliente do jogo e um servidor de backend seguro por meio da Web API do Steamworks. Requer que o servidor seguro tenha como realizar requisições HTTPS a partner.steam-api.com.

Tickets criptografados de aplicativo

Tickets criptografados de aplicativo podem ser usados para verificar a identidade de um usuário entre o cliente do jogo e um servidor de backend seguro. Diferentemente de tickets de sessão, a verificação de tickets criptografados de aplicativo não exige que o servidor seguro tenha como realizar requisições HTTPS. Em vez disto, uma biblioteca C++ e uma chave simétrica privada são usadas pelo servidor seguro para verificar o ticket. O SDK do Steamworks inclui versões de 32 bits e de 64 bits da biblioteca para Windows e Linux no diretório public/steam/lib.

Antes de usar tickets criptografados de aplicativo, você deverá gerar uma chave privada para cada título. Para tal, acesse a página "Editar configurações do Steamworks" do aplicativo e selecione "Autenticação do SDK" no seletor "Segurança". Essa chave será associada ao AppID e a todos os conteúdos adicionais do título. Para acessar essa seção do Steamworks, o usuário deve ter a permissão para "Gerenciar assinaturas" para o aplicativo selecionado.
AVISO: essas chaves devem ser armazenadas em local seguro e não devem ser distribuídas no aplicativo de forma alguma!

Web API do Steamworks

O Steam expõe uma Web API baseada em HTTP que pode ser usada para acessar vários recursos do Steamworks. A API contém métodos públicos que podem ser acessados a partir de qualquer aplicativo capaz de realizar requisições HTTP, como um cliente ou servidor do jogo. A API também contém métodos protegidos que exigem autenticação e devem ser acessados a partir de aplicativos de backend confiáveis. Mais detalhes sobre a Web API estão disponíveis aqui.

P2P ou servidores

Tickets de sessão

Autenticação de usuário

Os passos a seguir detalham como usar tickets de sessão para verificar a identidade de um usuário entre o cliente do jogo do usuário (cliente A) e outro cliente ou servidor (cliente B):

Algumas observações importantes sobre tickets de sessão:

Verificação de titularidade

Ao usar tickets de sessão, o Steam verificará a titularidade do AppID atual automaticamente. Se o usuário não possuir o AppID atual, então o campo m_eAuthSessionResponse do retorno de chamada ISteamUser::ValidateAuthTicketResponse_t conterá o valor k_EAuthSessionResponseNoLicenseOrExpired. Depois de receber o ticket de sessão de um usuário e passá-lo à função ISteamUser::BeginAuthSession, a funçãoISteamUser::UserHasLicenseForApp pode ser usada para determinar se o usuário possui um conteúdo adicional específico.

Servidor de backend

Tickets de sessão e a Web API do Steamworks

Autenticação de usuário

Os passos a seguir detalham como usar tickets de sessão para verificar a identidade de um usuário entre o cliente do jogo do usuário e um servidor seguro:

Verificação de titularidade

Assim que a identidade de um usuário for verificada, o servidor seguro pode usar o método ISteamUser/CheckAppOwnership da Web API para verificar se o usuário possui um AppID específico, ou chamar o método ISteamUser/GetPublisherAppOwnership para recuperar uma lista de todos os AppIDs de titularidade do usuário associados à chave de distribuidora informada.

Tickets criptografados de aplicativo

Autenticação de usuário

Os passos a seguir detalham como usar tickets criptografados de aplicativo para verificar a identidade de um usuário entre o cliente do jogo do usuário e um servidor seguro:

Um exemplo de implementação está disponível no projeto Aplicativo de exemplo da API do Steamworks (SpaceWar) incluído no SDK; especificamente CSpaceWarClient::RetrieveEncryptedAppTicket e CSpaceWarClient::OnRequestEncryptedAppTicket.

Verificação de titularidade

O Steam só gerará tickets criptografados de aplicativo para usuários que possuírem o AppID relacionado. Depois de descriptografar o ticket criptografado de aplicativo, o servidor pode usar a função SteamEncryptedAppTicket::BIsTicketForApp para verificar se o AppID do ticket é igual ao AppID do título. O servidor também pode usar a função SteamEncryptedAppTicket::BUserOwnsAppInTicket para determinar se o usuário possui um Conteúdo adicional (DLC) específico.

Autenticação baseada em navegador web com OpenID

O Steam é um provedor OpenID (em inglês), como descrito na especificação OpenID 2.0. Em um navegador, um site externo pode usar OpenID para recuperar o ID Steam de um usuário, que pode ser usado como credenciais de sessão para o site ou vinculado a uma conta existente no site.

Ao usar OpenID, o usuário começa em um navegador com o site externo aberto. Quando o usuário deseja iniciar a sessão/vincular a conta com o site, por meio do OpenID, o site direciona o usuário a um formulário de início de sessão no site da Comunidade Steam. Depois de o usuário informar as credenciais do Steam, o navegador do usuário será redirecionado automaticamente ao site externo com dados específicos do OpenID anexados ao URL de retorno. A biblioteca OpenID do site então poderá usar esses dados para verificar e recuperar o ID Steam do usuário.

O Steam oferece as seguintes imagens para uso por sites externos como um link para a página de início de sessão do Steam:
sits_large_border.png

sits_large_noborder.png

sits_small.png

Autenticação de usuário

A implementação do OpenID 2.0 pelo Steam pode ser usada para vincular a conta Steam de um usuário à respectiva conta no site externo.
Uma lista de bibliotecas OpenID de código aberto está disponível no site do OpenID (em inglês). Para usar o OpenID para verificar a identidade de um usuário:
  • Configure a biblioteca OpenID para usar o seguinte URL de endpoint: https://steamcommunity.com/openid/;
  • Depois do usuário ser autenticado, o Claimed ID do usuário conterá o ID Steam do usuário. O formato do Claimed ID do Steam é: http://steamcommunity.com/openid/id/<steamid>.

Verificação de titularidade

Assim que a identidade de um usuário for verificada, o servidor seguro pode usar o método ISteamUser/CheckAppOwnership da Web API para verificar se o usuário possui um AppID específico ou chamar o método ISteamUser/GetPublisherAppOwnership para recuperar uma lista de todos os AppIDs de titularidade do usuário associados à chave de distribuidora da Web API informada.

Exemplos

Vinculação de contas externas a contas Steam

Contas externas podem ser vinculadas a contas Steam associando o ID Steam de um usuário à conta.

O ID Steam de um usuário pode ser recuperado de forma segura pelo jogo ou por um navegador. Quando a associação inicial for realizada, é possível permitir acesso seguro à conta externa. Basta verificar o ID Steam de um usuário. Isso evita que usuários Steam precisem iniciar a sessão em sistemas de conta externa. Além disso, se novas contas externas podem ser criadas e vinculadas automaticamente quando um novo ID Steam é encontrado, o usuário Steam não precisará nem saber que existe uma autenticação secundária. No lugar, a conta Steam pode conceder acesso a todos os seus jogos, simplificando a experiência de usuário e removendo possíveis barreiras na instalação e experimentação de novos jogos.

Vinculação a partir do jogo

Tickets de sessão podem ser usados para verificar a identidade de um usuário entre o cliente do jogo e um servidor de backend seguro usando a Web API do Steamworks:

Vinculação a partir de um navegador web

O Steam é compatível com a especificação OpenID 2.0 para que usuários possam iniciar a sessão com uma conta Steam pelo seu site. Para detalhes sobre como usar OpenID com o Steam, acesse Como usar OpenID.

Verificação de titularidade

Assim que a identidade de um usuário for verificada, o servidor seguro pode usar o método ISteamUser/CheckAppOwnership da Web API para verificar se o usuário possui um AppID específico ou chamar o método ISteamUser/GetPublisherAppOwnership para recuperar uma lista de todos os AppIDs de titularidade do usuário associados à chave de distribuidora da Web API informada.

Migração de códigos de produto externos para verificações de titularidade nativas do Steam

O Steam oferece várias formas por meio das quais um título pode autenticar um usuário, removendo a necessidade de um código de produto externo. Compilamos uma lista de casos de uso comuns para códigos de produto e exemplos de como implementar cada caso nativamente com o Steam:

Acesso a fóruns privados

Faça com que os usuários iniciem a sessão diretamente com a conta Steam por meio de OpenID. O OpenID retornará o ID Steam de 64 bits do usuário, que então pode ser usado no método ISteamUser/CheckAppOwnership para verificar se o usuário possui o AppID. Mais detalhes podem ser encontrados na subseção Vinculação de contas externas a contas Steam acima.

Liberação de uma versão não Steam, livre de GDD/DRM, de um jogo

Use OpenID e o método ISteamUser/CheckAppOwnership (documentado acima) para liberar o conteúdo no seu site. Também é possível enviar a versão livre de GDD como um conteúdo adicional opcional e gratuito.

Programa vendido em site próprio e ativado com um código

Faça com que os usuários iniciem a sessão diretamente com a conta Steam por meio de OpenID. O OpenID retornará o ID Steam de 64 bits do usuário, que então pode ser usado no método ISteamUser/CheckAppOwnership para verificar se o usuário possui o AppID. Para mais detalhes, leia a subseção Vinculação de contas externas a contas Steam acima.

Distribuição de itens no jogo por ativação de código de produto externo

Se estiver usando o Serviço de Inventário Steam, confirme que a definição do item está configurada corretamente como promocional e chame a função ISteamInventory::AddPromoItem a partir do cliente.
Se usar um backend de itens próprio, chame a função ISteamUser::GetAuthSessionTicket a partir do cliente do jogo e use o método ISteamUserAuth/AuthenticateUserTicket em conjunto com ISteamUser/CheckAppOwnership para verificação de titularidade. Mais informações...

O código controla qual versão do programa é destravada

Cada versão do jogo deve possuir um AppID próprio. A partir do cliente, chame a função ISteamUser::GetAuthSessionTicket e então use o método ISteamUserAuth/AuthenticateUserTicket em conjunto com ISteamUser/CheckAppOwnership para verificação de titularidade. Mais informações...