Vista geral
O Steamworks expõe vários métodos para autenticar a identidade de um utilizador do Steam e confirmar a posse de uma aplicação. O presente documento descreve cada um destes métodos de autenticação utilizadores nos seguintes cenários:
Identificação de um utilizador no Steam
Cada utilizador do Steam pode ser identificado de forma distinta através de um ID numérico de 64 bits, conhecido como o
SteamID
do utilizador. Nas APIs do Steamworks em C++, o SteamID de um utilizador é contido num objeto
CSteamID. Pode obter o SteamID de 64 bits do utilizador atual ao chamar a função
ISteamUser::GetSteamID e, de seguida, ao chamar
CSteamID.ConvertToUint64()
no valor retornado.
Os seguintes métodos de autenticação podem ser usados para confirmar de forma segura o SteamID de um utilizador.
APIs abrangidas neste documento
Tickets de sessão
Tickets de sessão são tickets assinados que podem ser usados para confirmar a identidade de um utilizador entre o cliente do jogo do utilizador e quaisquer outros clientes (como numa sessão multijogador P2P) ou um servidor dedicado/não dedicado (ao usar a API
ISteamGameServer). Estes tickets também podem ser usados para confirmar a posse do jogo atual e DLC relacionado, assim como determinar se o utilizador foi banido pelo VAC (consulte
Sistema antibatota da Valve (VAC) e banimentos em jogos).
Tickets de sessão também podem ser usados para confirmar a identidade de um utilizador entre o cliente do jogo e um servidor back‑end seguro através da
Web API do Steamworks. Requer que o servidor seguro possa efetuar pedidos HTTPS a
partner.steam-api.com
.
Tickets de aplicação encriptados
Tickets de aplicação encriptados podem ser usados para confirmar a identidade de um utilizador entre o cliente do jogo do utilizador e um servidor back‑end seguro. Ao contrário do que acontece com tickets de sessão, confirmar tickets de aplicação encriptados
não requer que o servidor seguro possa efetuar pedidos HTTPS. Em vez disso, uma biblioteca C++ e uma chave simétrica privada são usadas pelo servidor seguro para confirmar 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 de aplicação encriptados, terá de gerar uma chave privada para cada jogo. Para tal, aceda à página "Editar definições do Steamworks" referente à sua aplicação e, no separador "Segurança", selecione "Autenticação do SDK". Esta chave será associada ao AppID do jogo e a todos os DLCs associados. Para poder aceder a esta secção do Steamworks, o utilizador precisa de ter a permissão para "Gerir assinaturas" relativamente à aplicação em questão.
ATENÇÃO: estas chaves devem ser guardadas num local seguro e não devem ser distribuídas na aplicação!
Web API do Steamworks
O Steam expõe uma Web API baseada em HTTP que pode ser usada para aceder a várias funcionalidades do Steamworks. A API contém métodos públicos aos quais é possível aceder a partir de qualquer aplicação capaz de efetuar pedidos HTTP, como um servidor ou um cliente de jogo. A API também contém métodos protegidos que requerem autenticação e aos quais devem ser acedidos a partir de aplicações de back‑end confiáveis. Mais informações sobre a Web API estão disponíveis
aqui.
P2P ou servidores de jogos
Tickets de sessão
Autenticação de utilizador
Os seguintes passos detalham como usar tickets de sessão para confirmar a identidade de um utilizador entre o cliente do jogo do utilizador (cliente A) e outro cliente ou servidor (cliente B):
- O cliente A deve obter um ticket de sessão através da função ISteamUser::GetAuthSessionTicket.
- O cliente A deve enviar o ticket de sessão para o cliente B.
- O cliente B deve passar o ticket do cliente A para a função ISteamUser::BeginAuthSession, que irá realizar uma verificação de validade rápida. Se o ticket for válido, ISteamUser::BeginAuthSession irá encaminhar o ticket para o back‑end do Steam para confirmar se o ticket não foi reutilizado e foi gerado pelo proprietário da conta do cliente. O resultado desta confirmação será retornado num callback ISteamUser::ValidateAuthTicketResponse_t.
- Quando a sessão multijogador for encerrada:
Notas importantes sobre tickets de sessão:
Confirmação de posse
Ao usar tickets de sessão, o Steam irá confirmar automaticamente a posse do AppID atual. Se o utilizador não possuir o AppID atual, o campo
m_eAuthSessionResponse
de
ISteamUser::ValidateAuthTicketResponse_t terá o valor de
k_EAuthSessionResponseNoLicenseOrExpired. Depois de receber um ticket de sessão de um utilizador e de o passar para a função
ISteamUser::BeginAuthSession, a função
ISteamUser::UserHasLicenseForApp pode ser usada para determinar se o utilizador possui um DLC específico.
Servidor back-end
Tickets de sessão e a Web API do Steamworks
Autenticação de utilizador
Os seguintes passos detalham como usar tickets de sessão para confirmar a identidade de um utilizador entre o cliente do jogo do utilizador e um servidor seguro:
Confirmação de posse
Assim que a identidade de um utilizador for confirmada, um servidor seguro pode usar o método
ISteamUser/CheckAppOwnership da Web API para verificar se o utilizador tem um AppID específico, ou chamar
ISteamUser/GetPublisherAppOwnership para obter uma lista de todos os AppIDs do utilizador associados à
chave de editora fornecida.
Tickets de aplicação encriptados
Autenticação de utilizador
Os seguintes passos detalham como usar tickets de aplicação encriptados para confirmar a identidade de um utilizador entre o cliente do jogo do utilizador e um servidor seguro:
Um exemplo de implementação está disponível no projeto
Aplicação de exemplo da API do Steamworks (Spacewar) incluído no SDK, especificamente
CSpaceWarClient::RetrieveEncryptedAppTicket
e
CSpaceWarClient::OnRequestEncryptedAppTicket
.
Confirmação de posse
O Steam só irá criar tickets de aplicação encriptados para utilizadores que tenham o AppID relacionado. Depois de desencriptar um ticket de aplicação encriptado, o servidor seguro pode usar
SteamEncryptedAppTicket::BIsTicketForApp para confirmar se o AppID do ticket corresponde ao AppID do título. O servidor também pode usar
SteamEncryptedAppTicket::BUserOwnsAppInTicket para determinar se o utilizador tem um
DLC (conteúdo transferível) específico.
Autenticação baseada em browser da web com OpenID
O Steam é um fornecedor
OpenID, como descrito na especificação OpenID 2.0. Num browser da web, um site de terceiros pode usar OpenID para obter o SteamID de um utilizador, que por sua vez pode ser usado como as credenciais de sessão para esse site ou associado a uma conta existente nesse site.
Ao usar OpenID, o utilizador começa no site de terceiros num browser da web. Quando o utilizador pretender iniciar sessão ou associar a respetiva conta ao site, via OpenID, o site encaminha o utilizador para um formulário de início de sessão no site da Comunidade Steam. Assim que o utilizador tiver introduzido as credenciais da conta Steam, o browser do utilizador será redirecionado automaticamente para o site de terceiros com dados específicos do OpenID anexados ao URL de regresso. De seguida, a biblioteca OpenID do site poderá usar estes dados para confirmar e obter o SteamID do utilizador.
O Steam disponibiliza as seguintes imagens para utilização por sites de terceiros como link para a página de início de sessão do Steam:
Autenticação de utilizador
A implementação do OpenID 2.0 pelo Steam pode ser usada para associar a conta Steam de um utilizador à respetiva conta no site de terceiros.
Uma lista de bibliotecas OpenID open-source está disponível no
site do OpenID. Para confirmar a identidade de um utilizador com o OpenID:
- Configure a sua biblioteca OpenID para usar o seguinte URL de endpoint de fornecedor OpenID do Steam:
https://steamcommunity.com/openid/
- Assim que um utilizador for autenticado, o "Claimed ID" do utilizador irá conter o respetivo SteamID. O formato do "Claimed ID" é:
http://steamcommunity.com/openid/id/<SteamID>
.
Confirmação de posse
Assim que a identidade de um utilizador for confirmada, um servidor seguro pode usar o método
ISteamUser/CheckAppOwnership da Web API para verificar se o utilizador tem um AppID específico, ou chamar
ISteamUser/GetPublisherAppOwnership para obter uma lista de todos os AppIDs do utilizador associados à
chave da Web API de editora fornecida.
Exemplos
Associação de contas de serviços de terceiros a contas Steam
Contas de serviços de terceiros podem ser associadas a contas Steam ao associar o SteamID de um utilizador à conta do serviço de terceiros.
O SteamID de um utilizador pode ser obtido de forma segura dentro do jogo ou via browser da web. Assim que a associação inicial tiver ocorrido, poderá permitir acesso seguro à conta do serviço de terceiros ao confirmar o SteamID do utilizador. Isto evita que utilizadores do Steam precisem de iniciar sessão com uma conta diferente em sistemas de terceiros. Além disso, se novas contas do serviço de terceiros puderem ser criadas e associadas automaticamente quando um novo SteamID é encontrado, o utilizador do Steam nuncá chegará sequer a saber que uma autenticação secundária existe. Em vez disso, a conta Steam pode conceder acesso a todos os jogos do utilizador, simplificando a experiência e removendo barreiras possíveis na instalação e experimentação de jogos novos.
Associação a partir do jogo
Tickets de sessão podem ser usados para confirmar a identidade de um utilizador entre o cliente do jogo do utilizador e um servidor back‑end seguro ao usar a Web API do Steamworks:
Associação a partir de um browser da web
O Steam é compatível com a especificação OpenID 2.0 para que os utilizadores possam iniciar sessão, de forma segura, com uma conta Steam no seu site. Para detalhes sobre como usar o OpenID com o Steam, consulte a secção
Autenticação baseada em browser da web com OpenID.
Confirmação de posse
Assim que a identidade de um utilizador for confirmada, um servidor seguro pode usar o método
ISteamUser/CheckAppOwnership da Web API para verificar se o utilizador tem um AppID específico, ou chamar
ISteamUser/GetPublisherAppOwnership para obter uma lista de todos os AppIDs do utilizador associados à
chave da Web API de editora fornecida.
Migração de códigos de produto de serviços de terceiros para verificações de posse nativas do Steam
O Steam em si oferece vários métodos pelos quais um jogo pode autenticar um utilizador, removendo a necessidade de um código de produto de um serviço de terceiros. Compilámos uma lista de casos de uso comum para códigos de produto e exemplos de como poderá implementar cada caso de forma nativa no Steam:
Acesso a fóruns privados
Faça com que os utilizadores iniciem sessão diretamente com a respetiva conta Steam via OpenID. O OpenID irá retornar o SteamID de 64 bits do utilizador, que poderá ser usado com o método
ISteamUser/CheckAppOwnership para confirmar se o utilizador tem o AppID do seu jogo. Mais detalhes podem ser encontrados na secção
Associação de contas de serviços de terceiros a contas Steam.
Acesso a uma versão não-Steam e sem DRM de um jogo
Utilize o OpenID e o método
ISteamUser/CheckAppOwnership (
documentado acima) para conceder acesso ao conteúdo no seu próprio site. Também pode enviar a versão sem DRM como um DLC opcional e gratuito.
Software vendido no site do developer e é disponibilizado através de um código
Faça com que os utilizadores iniciem sessão diretamente com a respetiva conta Steam via OpenID. O OpenID irá retornar o SteamID de 64 bits do utilizador, que poderá ser usado com o método
ISteamUser/CheckAppOwnership para confirmar se o utilizador tiver o AppID do seu jogo. Mais detalhes podem ser encontrados na secção
Associação de contas de serviços de terceiros a contas Steam acima.
Distribuição de itens no jogo por ativação de código de produto de um serviço de terceiros
Caso esteja a usar o
Serviço de Inventário Steam, assegure-se de que a definição do item (itemdef) está configurada corretamente como um item promocional e chame
ISteamInventory::AddPromoItem a partir do jogo.
Se tiver o seu próprio servidor de itens, pode chamar
ISteamUser::GetAuthSessionTicket a partir do jogo e depois usar
ISteamUserAuth/AuthenticateUserTicket com
ISteamUser/CheckAppOwnership para confirmar a posse.
Mais informações...O código controla qual a versão do software disponibilizada
Cada versão do seu jogo deve ter um AppID distinto. A partir do jogo, chame
ISteamUser::GetAuthSessionTicket e use
ISteamUserAuth/AuthenticateUserTicket com
ISteamUser/CheckAppOwnership para confirmar a posse.
Mais informações...