Documentación de Steamworks
Autenticación de usuario y propiedad

Introducción

Steamworks ofrece varios métodos para autenticar la identidad de un usuario de Steam y verificar la propiedad de una aplicación. El siguiente documento describe cada uno de los métodos de autenticación usados en las siguientes situaciones:

Identificación de un usuario dentro de Steam

Cada usuario de Steam puede identificarse de forma única mediante un id. numérico de 64 bits conocido como id. de Steam. En las API C++ de Steamworks, el SteamID de un usuario se contiene dentro de un objeto CSteamID. Se puede recuperar el SteamID del usuario actual llamando a ISteamUser::GetSteamID y recuperando después el id. de 64 bits mediante una llamada a CSteamID.ConvertToUint64() con el valor devuelto.

Los siguientes métodos de autenticación sirven para verificar de forma segura el id. de Steam de un usuario.

API cubiertas en este documento

Tickets de sesión

Los tickets de sesión son tickets firmados que pueden utilizarse para verificar la identidad de un usuario entre el cliente de juego del usuario y otros clientes de juego (por ejemplo, en una sesión multijugador P2P) o un servidor de juego de escucha/dedicado (mediante la API ISteamGameServer). Estos tickets también pueden utilizarse para verificar la propiedad del juego actual y el contenido descargable relacionado, y para determinar si el usuario está sujeto a un bloqueo por VAC (véase Valve Anti-Cheat (VAC) y bloqueos de juego).
Los tickets de sesión se pueden emplear también para verificar la identidad de un usuario entre un cliente de juego y un servidor backend seguro usando la Web API de Steamworks. Requiere que el servidor seguro pueda hacer solicitudes HTTPS a partner.steam-api.com.

Tickets de aplicación cifrados

Los tickets de aplicación cifrados se pueden usar para verificar la identidad de un usuario entre un cliente de juego y un servidor backend seguro. A diferencia de lo que sucede con los tickets de sesión, para verificar tickets de aplicación cifrados no hace falta que el servidor seguro pueda hacer solicitudes HTTPS. En su lugar, el servidor seguro usa una biblioteca de C++ y una clave simétrica privada para verificar el ticket. El SDK de Steamworks incluye las versiones de 32 y 64 bits de esta librería para Windows y Linux en el directorio public/steam/lib.
Antes de usar tickets de aplicación cifrados, hay que generar una clave privada para cada título. Esto se puede hacer yendo a Editar ajustes de Steamworks para la aplicación en cuestión y seleccionando Autenticación de SDK desde el menú desplegable Seguridad. Esta clave quedará asociada al id. de aplicación del juego y a cualquier contenido descargable para él.

NOTA: ¡Estas claves deben almacenarse de manera segura y no se deben distribuir bajo ningún concepto dentro de la aplicación!

Web API de Steamworks

Steam tiene una Web API basada en HTTP que se puede usar para acceder a muchas características de Steamworks. La API contiene métodos públicos a los que se puede acceder desde cualquier aplicación capaz de realizar una solicitud HTTP, como un cliente de juego o un servidor. También contiene métodos protegidos que requieren autenticación y que están pensados para que accedan a ellos aplicaciones del backend. Se pueden encontrar más detalles sobre la Web API aquí.

Servidores de juego o P2P

Tickets de sesión

Autenticación de usuario

En los siguientes pasos se describe cómo usar los tickets de sesión para verificar la identidad de un usuario entre su cliente de juego (cliente A) y otro cliente o servidor de juego (cliente B):

Unas notas importantes sobre los tickets de sesión:
  • Los tickets de sesión solo se deben usar una vez. ISteamUser::GetAuthSessionTicket se llamará a la función para cada cliente en la sesión multijugador que solicite un ticket.
  • Cuando se usa para autenticar jugadores en una sesión multijugador P2P, cada cliente de juego debe verificar la identidad de cada uno de los demás en la sesión.
  • Al terminar con un ticket de sesión, hay que llamar a ISteamUser::CancelAuthTicket por cada identificador o handle devuelto por ISteamUser::GetAuthSessionTicket.
  • Cuando el cliente A llama a ISteamUser::CancelAuthTicket, el cliente B recibirá una devolución de ISteamUser::ValidateAuthTicketResponse_t y una llamada que dirá que el ticket del cliente A ya no es válido.
  • Cuando el cliente A deja una partida con el cliente B, si la llamada de A en ISteamUser::CancelAuthTicket se procesa antes que la llamada a B de ISteamUser::EndAuthSession, puede que este último reciba una devolución ISteamUser::ValidateAuthTicketResponse_t de llamada que dirá que el ticket se ha cancelado. Como existe el acuerdo mutuo de que el cliente A se marcha, se puede ignorar esta devolución de llamada.
  • Las condiciones de la red pueden impedir que el backend de Steam envíe la devolución de llamada a ISteamUser::BeginAuthSession quien llamó durante un periodo indefinido. Quien llamó a ISteamUser::BeginAuthSession (el cliente B) no debe asumir que conoce la auténtica identidad del cliente A hasta haber recibido esta devolución de llamada, pero sí permitir que continúe la sesión multijugador.
  • Si quien llamó a ISteamUser::BeginAuthSession recibe una devolución de ISteamUser::ValidateAuthTicketResponse_t llamada en la que se dice que el ticket del cliente A no es válido, deberá negarse a continuar la sesión con el cliente A. Si los demás participantes no se niegan tampoco a jugar con el cliente A, quien realizó la llamada deberá abandonar la sesión multijugador.
  • ISteamGameServer expone los mismos métodos del ticket de la sesión para realizar la autenticación entre un cliente de juego y un servidor de juego.

Verificación de propiedad

Al usar tickets de sesión, Steam verificará automáticamente la propiedad del id. de aplicación actual. Si el usuario no posee el id. de aplicación actual, de m_eAuthSessionResponse el campo de ISteamUser::ValidateAuthTicketResponse_t se ajustará a k_EAuthSessionResponseNoLicenseOrExpired. Tras recibir el ticket de sesión y pasarlo a ISteamUser::BeginAuthSession y ISteamUser::UserHasLicenseForApp se puede usar para determinar si el usuario posee un contenido descargable concreto.

Servidor backend

Tickets de sesión y la Web API de Steamworks

Autenticación de usuario

The following steps detail how to use Session Tickets to verify a user's identity between the user's game client and a secure server:

Verificación de propiedad

Once a user's identity has been verified, a secure server can use the ISteamUser/CheckAppOwnership Web API method to check if the user owns a particular AppID, or call ISteamUser/GetPublisherAppOwnership to retrieve a list of all user owned AppIDs that are associated with the provided Publisher Key.

Tickets de aplicación cifrados

Autenticación de usuario

The following steps detail how to use Encrypted Application Tickets to verify a user's identity between the user's game client and a secure server:

An example implementation can be found in the Ejemplo de aplicación de la API de Steamworks (Spacewar!) project in the SDK. Specifically CSpaceWarClient::RetrieveEncryptedAppTicket and CSpaceWarClient::OnRequestEncryptedAppTicket.

Verificación de propiedad

Steam will only create Encrypted Application Tickets for users who own the AppID for which the ticket was created. After decrypting an Encrypted Application Ticket, the secure server can use SteamEncryptedAppTicket::BIsTicketForApp to verify the AppID of the ticket matches the title's AppID. The server can also use SteamEncryptedAppTicket::BUserOwnsAppInTicket to determine if the user owns a specific piece of Contenido descargable (DLC).

Autenticación basada en navegador web con OpenID

Steam is an OpenID Provider, as described in the OpenID 2.0 specification. Inside a web browser, a third-party website can use OpenID to obtain a user's SteamID which can be used as the login credentials for the 3rd party website, or linked to an existing account on that website.

When using OpenID, the user begins in a web browser at the third-party website. When the user wishes to login/link their account to that website, using OpenID, the site directs the user to a login form on the Steam Community website. Once the user has entered their Steam login credentials, the user's web browser is automatically redirected back to the 3rd party website with some additional OpenID specific data appended to the return URL. The site's OpenID library can then use this data to verify and obtain the user's SteamID.

Steam provides the following images which may be used by 3rd party sites when linking to the Steam sign in page:
sits_large_border.png

sits_large_noborder.png

sits_small.png

Autenticación de usuario

Steam's OpenID 2.0 implementation can be used to link a users Steam account to their account on the third-party website.
A list of open source OpenID libraries can be found at the OpenID website. To use OpenID to verify a user's identity:
  • Configura tu librería de OpenID para que use la siguiente dirección como URL del punto de conexión OP de Steam: https://steamcommunity.com/openid/
  • Una vez autenticado un usuario, el id. asociado contendrá su SteamID. El formato del id. asociado en Steam es: http://steamcommunity.com/openid/id/<steamid>.

Verificación de propiedad

Once a user's identity has been verified, a secure server can use the ISteamUser/CheckAppOwnership Web API method to check if the user owns a particular AppID, or call ISteamUser/GetPublisherAppOwnership to retrieve a list of all user owned AppIDs that are associated with the provided Web API Publisher Key.

Ejemplos

Vincular cuentas de terceros a cuentas de Steam

Third-party accounts can be linked to Steam accounts by associating a user's SteamID with the 3rd party account.

A user's SteamID can be securely retrieved either in-game or through a web browser and once the initial association has occurred, you can safely allow access to the 3rd party account by merely verifying a user's SteamID. This eliminates the need for Steam users to do any sort of secondary login to 3rd party account systems. Additionally, if new 3rd party accounts can be automatically created and linked when a new SteamID is encountered, the Steam user will never have to be aware that a secondary authentication is taking place at all. Instead, their single Steam account can grant access to all of their games, streamlining the user experience and removing potential barriers to installing and trying new games.

Vinculación desde dentro de los juegos

Session Tickets can be used to verify a user's identity between a game client and a secure, backend server using the Steamworks Web API:

Vinculación desde un navegador web

Steam supports the OpenID 2.0 specification so that you can allow users to securly log into their Steam accounts from your website and retrieve their SteamID. For details on how to use OpenID with Steam go to Using OpenID

Verificación de propiedad

Once a user's identity has been verified, a secure server can use the ISteamUser/CheckAppOwnership Web API method to check if the user owns a particular AppID, or call ISteamUser/GetPublisherAppOwnership to retrieve a list of all user owned AppIDs that are associated with the provided Web API Publisher Key.

Migración desde las claves de CD de terceros a los sistemas de verificación de propiedad de Steam

Steam itself has a number of ways a title can authenticate a user with, removing the need for a third-party CD key. We've compiled a list of common use cases for CD Keys and how you might implement each case natively with Steam:

Acceso a foros privados

You'll want to have users login directly with their Steam account using OpenID. OpenID will return the user's 64bit SteamID which can then be used with ISteamUser/CheckAppOwnership to verify the user owns your appid. More details can be found above at Linking 3rd party accounts to Steam accounts.

Desbloquear una compilación de un juego sin DRM que no está en Steam

Use OpenID and ISteamUser/CheckAppOwnership (documented above) to unlock the content on your own site. Alternatively, you could upload the DRM-free build as optional, free DLC.

El software se vende en mi propio sitio web y se desbloquea con una clave

You'll want to have users login directly with their Steam account using OpenID. OpenID will return the user's 64bit SteamID which can then be used with ISteamUser/CheckAppOwnership to verify the user owns your appid. More details can be found in Vincular cuentas de terceros a cuentas de Steam above.

Regalar artículos de juego por registrar una clave de terceros

If you are using the Steam Inventory Service, make sure the item's itemdef is configured correctly as a promo item and call ISteamInventory::AddPromoItem from the client.
If you have your own item backend, you can call ISteamUser::GetAuthSessionTicket from the game client and then use ISteamUserAuth/AuthenticateUserTicket with ISteamUser/CheckAppOwnership to verify ownership. More Information...

La clave determina qué versiones del software se desbloquean

Each version of your game should have its own AppID. From the game client, call ISteamUser::GetAuthSessionTicket and then use ISteamUserAuth/AuthenticateUserTicket with ISteamUser/CheckAppOwnership to verify ownership. More Information...