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 disso, 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ção
ISteamUser::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:
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...