Descripción general
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 encuentra dentro de un objeto
CSteamID. Puedes sacar el SteamID del usuario actual llamando a
ISteamUser::GetSteamID y sacar 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 con seguridad 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
Antitrampas de Valve (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 de API de Steamworks. Es necesario 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 versiones de 32 y 64 bits de esta biblioteca para Windows y Linux dentro del 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. Para acceder a esta sección de Steamworks, el usuario necesita el permiso "administrar firmas" en la aplicación pertinente.
NOTA: ¡Estas claves deben almacenarse de manera segura y no se deben distribuir bajo ningún concepto dentro de la aplicación!
Web de API de Steamworks
Steam tiene una Web de 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 de 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 función callback.
- Las condiciones de la red pueden impedir que el backend de Steam envíe la función callback 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 función callback, 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 de API de Steamworks
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 y un servidor seguro:
Verificación de propiedad
Una vez verificada la identidad del usuario, un servidor seguro puede usar el método de la Web de API
ISteamUser/CheckAppOwnership para verificar si el usuario tiene un id. de aplicación concreto o llamar a
ISteamUser/GetPublisherAppOwnership para obtener una lista con todos los id. de aplicación asociados a la
Clave de editor dada.
Tickets de aplicación cifrados
Autenticación de usuario
En los siguientes pasos se describe cómo usar los tickets de aplicación cifrados para verificar la identidad de un usuario entre su cliente de juego y un servidor seguro:
Se puede encontrar un ejemplo de implementación en el proyecto
Ejemplo de aplicación de la API de Steamworks (Spacewar!) del SDK. Específicamente a
CSpaceWarClient::RetrieveEncryptedAppTicket
y
CSpaceWarClient::OnRequestEncryptedAppTicket
.
Verificación de propiedad
Steam solo creará tickets de aplicación cifrados para los usuarios que posean el id. de aplicación para el que se creó el ticket. Tras descifrar un ticket de aplicación cifrado, el servidor seguro puede usar
SteamEncryptedAppTicket::BIsTicketForApp para verificar que el id. de aplicación del ticket se corresponde con el del título. También puede usar
SteamEncryptedAppTicket::BUserOwnsAppInTicket para determinar si el usuario posee una pieza especifica concreta de
Contenido descargable (DLC).
Autenticación basada en navegador con OpenID
Steam es un proveedor de
OpenID, tal como se describe en la especificación OpenID 2.0. Dentro de un navegador, el sitio web de un tercero puede usar OpenID para obtener el SteamID de un usuario, que se puede utilizar como credenciales de inicio de sesión en dicho sitio o vincular a una cuenta existente en él.
Al utilizar OpenID, el usuario comienza en un navegador en el sitio de un tercero. Cuando quiere iniciar sesión en el sitio o vincular su cuenta a él usando OpenID, el sitio lo envía a un formulario de inicio de sesión en el sitio web de la Comunidad Steam. Una vez que el usuario ha introducido sus credenciales de inicio de sesión en Steam, el navegador lo devuelve automáticamente al sitio del tercero, con datos OpenID adicionales anexados a la URL de regreso. La biblioteca OpenID del sitio puede usar estos datos para verificar y obtener el SteamID del usuario.
Steam facilita las siguientes imágenes a los sitios de terceros para que las usen en los enlaces a la página de inicio de sesión de Steam:
Autenticación de usuario
Se puede usar la implementación de OpenID 2.0 de Steam para vincular la cuenta de Steam de un usuario a su cuenta en el sitio del tercero.
Se puede encontrar una lista de bibliotecas de OpenID de código abierto en el
sitio web de OpenID. Para verificar la identidad de un usuario con OpenID:
- Configura tu biblioteca 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
Una vez verificada la identidad del usuario, un servidor seguro puede usar el método de la Web de API
ISteamUser/CheckAppOwnership para verificar si el usuario tiene un id. de aplicación concreto, o llamar a
ISteamUser/GetPublisherAppOwnership para obtener una lista con todos los id. de aplicación asociados a la
Web de API para editores dada.
¿Necesitas ayuda?
Vincular cuentas de terceros a cuentas de Steam
Se pueden vincular cuentas de terceros a cuentas de Steam asociando el SteamID de un usuario con su cuenta en un tercero.
Se puede recuperar de manera segura el SteamID de un usuario en el juego o a través de un navegador y, una vez completada la asociación inicial, se puede autorizar sin peligro el acceso a la cuenta de terceros con solo verificar el id. de Steam. De este modo, no hace falta que los usuarios de Steam inicien sesión en sistemas de cuentas de terceros. Además, si se pueden crear y vincular automáticamente nuevas cuentas de terceros al encontrarse con un nuevo SteamID, el usuario de Steam no tendrá ni que darse cuenta de que se está produciendo un proceso de autenticación secundario. En su lugar, la cuenta de Steam le permitirá acceder a todos sus juegos, lo que, además de brindarle una mejor experiencia de usuario, eliminará obstáculos potenciales a la hora de instalar y probar nuevos títulos.
Vinculación desde dentro de los juegos
Los tickets de sesión se pueden usar para verificar la identidad de un usuario entre un cliente de juego y un servidor backend seguro usando la Web de API de Steamworks:
Vinculación desde un navegador
Steam es compatible con la especificación OpenID 2.0, lo que permite a los usuarios iniciar sesión de manera segura en su cuenta de Steam desde otro sitio web y recuperar su SteamID. Hay información más detallada sobre el uso de OpenID con Steam en
Usando el OpenID.
Verificación de propiedad
Una vez verificada la identidad del usuario, un servidor seguro puede usar el método de la Web de API
ISteamUser/CheckAppOwnership para verificar si el usuario tiene un id. de aplicación concreto, o llamar a
ISteamUser/GetPublisherAppOwnership para obtener una lista con todos los id. de aplicación asociados a la
Web de API para editores dada.
Migración desde las claves de CD de terceros a los sistemas de verificación de propiedad de Steam
Steam ofrece diferentes maneras de autenticar a los usuarios desde un título, lo que elimina la necesidad de contar con claves de CD de terceros. Hemos recopilado una lista de situaciones habituales en las que se usan claves de CD y, para cada una de ellas, ofrecemos una forma de conseguir el mismo resultado de manera nativa a través de Steam:
Acceso a foros privados
El objetivo es que los usuarios inicien sesión directamente con su cuenta de Steam usando OpenID. OpenID devolverá el SteamID de 64 bits del usuario, que a continuación podrá usarse con
ISteamUser/CheckAppOwnership para verificar que dicho usuario posee realmente el id. de aplicación. Se pueden encontrar más detalles arriba, en
Vincular cuentas de terceros a cuentas de Steam.
Desbloquear una compilación de un juego sin DRM que no está en Steam
Usa OpenID y
ISteamUser/CheckAppOwnership (
documentado arriba) para desbloquear el contenido desde tu propio sitio. También puedes cargar la compilación sin DRM como DLC gratuito opcional.
El software se vende en mi propio sitio web y se desbloquea con una clave
El objetivo es que los usuarios inicien sesión directamente con su cuenta de Steam usando OpenID. OpenID devolverá el SteamID de 64 bits del usuario, que a continuación podrá usarse con
ISteamUser/CheckAppOwnership para verificar que dicho usuario posee realmente el id. de aplicación. Se puede encontrar más información en
Vincular cuentas de terceros a cuentas de Steam.
Regalar artículos de juego por registrar una clave de terceros
Si se usa el servicio de
inventario de Steam hay que asegurarse de que el ItemDef está debidamente configurado como artículo de promoción y llamar a la función
ISteamInventory::AddPromoItem desde el cliente.
Si se tiene un backend de artículos propio, se puede llamar a
ISteamUser::GetAuthSessionTicket desde el cliente de juego y usar
ISteamUserAuth/AuthenticateUserTicket con
ISteamUser/CheckAppOwnership para verificar la propiedad.
Para más información....
La clave determina qué versiones del software se desbloquean
Cada versión del juego debería tener su propio id. de aplicación. Desde el cliente de juego, se llama a
ISteamUser::GetAuthSessionTicket y luego se usa
ISteamUserAuth/AuthenticateUserTicket con
ISteamUser/CheckAppOwnership para verificar la propiedad.
Para más información....