Steamworks 문서
사용자 인증 및 소유권

개요

Steamworks는 Steam 사용자의 신원을 인증하고 애플리케이션 소유권을 확인하기 위한 여러 가지 수단을 제공합니다. 아래 문서는 다음과 같은 시나리오에서 사용되는 인증 수단에 대해 설명합니다.

Steam 내부의 사용자 식별

모든 Steam 사용자는 Steam ID에 해당하는 64비트 숫자 ID로 식별할 수 있습니다. Steamworks C++ API에서 사용자의 SteamID는 CSteamID 객체 안에 있습니다. ISteamUser::GetSteamID를 호출하여 현재 사용자의 SteamID를 가져올 수 있으며, 반환된 값에 CSteamID.ConvertToUint64()를 호출하면 64비트 ID를 가져올 수 있습니다.

다음 인증 수단을 사용하면 사용자의 SteamID를 안전하게 확인할 수 있습니다.

이 문서에서 다루는 API

세션 티켓

세션 티켓은 사용자의 게임 클라이언트와 다른 게임 클라이언트(P2P 멀티플레이어 세션 등) 또는 리슨/전용 게임 서버(ISteamGameServer API 사용) 사이에서 사용자의 신원을 확인하는 데 사용되는 서명된 티켓입니다. 이 티켓은 현재 게임과 관련하여 다운로드 가능한 콘텐츠의 소유권을 확인하고, 사용자가 VAC로 차단되었는지(VAC(Valve Anti-Cheat) 및 게임 차단 참조) 확인하는 데도 사용됩니다.
세션 티켓은 Steamworks 웹 API를 통해 게임 클라이언트와 보안 백엔드 서버 사이에서 사용자의 신원을 확인하는 데도 사용됩니다. Requires that the secure server can make HTTPS requests to partner.steam-api.com.

암호화된 애플리케이션 티켓

암호화된 애플리케이션 티켓을 통해 게임 클라이언트와 안전한 백엔드 서버 사이에서 사용자의 신원을 확인할 수 있습니다. 세션 티켓과 달리, 암호화된 애플리케이션 티켓을 확인할 때는 보안 서버가 HTTPS 요청을 보내지 않아도 됩니다. 그 대신 보안 서버가 C++ 라이브러리와 전용 대칭 키를 사용해 티켓을 확인합니다. 이 라이브러리는 Steamworks SDK의 public/steam/lib 디렉터리에 Windows용과 Lunux용, 32비트와 64비트 버전으로 포함되어 있습니다.
암호화된 애플리케이션 티켓을 사용하려면 먼저 각 타이틀의 전용 키를 생성해야 합니다. 귀하의 애플리케이션에서 Steamworks 설정 편집으로 이동한 후, ‘보안’ 드롭다운에서 ‘SDK 인증’을 선택합니다. 이 키는 타이틀의 AppID, 다운로드 가능한 해당 타이틀의 모든 콘텐츠와 연결됩니다.

주의: 이 키는 안전하게 보관해야 하며, 게임 애플리케이션과 함께 배포해서는 안 됩니다.

Steamworks 웹 API

Steam은 다양한 Steamworks 기능에 액세스하는 데 사용되는 HTTP 기반의 웹 API를 제공합니다. API는 게임 클라이언트 또는 서버와 같이 HTTP 요청이 가능한 모든 애플리케이션에서 액세스할 수 있는 공용 메서드를 담고 있습니다. API는 또한 인증이 필요한 보호된 메서드를 포함하며, 신뢰할 수 있는 백엔드 애플리케이션에 액세스할 수 있도록 고안되었습니다. 웹 API에 대한 더욱 자세한 내용은 여기에서 확인할 수 있습니다.

P2P 또는 게임 서버

세션 티켓

사용자 인증

다음은 세션 티켓을 사용해 사용자의 게임 클라이언트(클라이언트 A)와 다른 클라이언트 또는 게임 서버(클라이언트 B) 사이에서 사용자의 신원을 확인하는 과정입니다.

세션 티켓에 관한 몇 가지 중요한 정보:
  • 세션 티켓은 한 번만 사용할 수 있습니다. 멀티플레이어 세션에서는 티켓을 요청하는 모든 클라이언트가 ISteamUser::GetAuthSessionTicket을 호출해야 합니다.
  • P2P 멀티플레이어 세션에서 플레이어를 인증할 때는, 각 게임 클라이언트가 멀티플레이어 세션 안에 있는 다른 모든 게임 클라이언트의 신원을 확인해야 합니다.
  • 세션 티켓 사용을 마치면, ISteamUser::CancelAuthTicketISteamUser::GetAuthSessionTicket이 반환한 모든 핸들에 대해 호출해야 합니다.
  • 클라이언트 A가 ISteamUser::CancelAuthTicket을 호출하면, 클라이언트 B는 클라이언트 A의 티켓이 이제 유효하지 않다는 ISteamUser::ValidateAuthTicketResponse_t 콜백을 받습니다.
  • 클라이언트 A가 게임에서 나갈 때, 클라이언트 A의 ISteamUser::CancelAuthTicket 호출이 클라이언트 B가 ISteamUser::EndAuthSession을 호출하기 전에 처리되면, 클라이언트 B는 티켓이 취소되었다는 ISteamUser::ValidateAuthTicketResponse_t 콜백을 받을 수도 있습니다. 클라이언트 A가 나간다는 상호 합의가 있으므로 이 콜백은 무시할 수 있습니다.
  • 네트워크 상태에 따라 Steam 백엔드에서 ISteamUser::BeginAuthSession의 호출자에게 불특정 시간 동안 콜백을 제공하지 못할 수도 있습니다. ISteamUser::BeginAuthSession의 호출자(클라이언트 B)는 이 콜백을 받기 전까지 클라이언트 A의 신원을 모르는 것으로 간주해야 하지만, 멀티플레이어 세션은 계속 유지해야 합니다.
  • 만일 ISteamUser::BeginAuthSession의 호출자가 클라이언트 A의 티켓이 유효하지 않다는 ISteamUser::ValidateAuthTicketResponse_t 콜백을 받으면, 호출자는 클라이언트 A와의 멀티플레이어 세션 유지를 거부해야 합니다. 이때 게임 내 다른 피어들도 클라이언트 A와의 게임 플레이하기를 거부하지 않으면, 호출자가 멀티플레이어 세션에서 나가야 합니다.
  • ISteamGameServer는 동일한 세션 티켓 메서드를 사용하여 게임 클라이언트와 게임 서버 사이의 인증을 처리합니다.

소유권 확인

세션 티켓을 사용할 때 Steam은 자동으로 현재 AppID의 소유권을 확인합니다. 사용자가 현재 AppID를 소유하지 않은 경우에는, ISteamUser::ValidateAuthTicketResponse_tm_eAuthSessionResponse필드가 k_EAuthSessionResponseNoLicenseOrExpired로 설정됩니다. 사용자의 세션 티켓을 받아 ISteamUser::BeginAuthSession에 전달한 후, ISteamUser::UserHasLicenseForApp 메서드를 사용하여 사용자가 특정 다운로드 콘텐츠를 소유하고 있는지 확인할 수 있습니다.

백엔드 서버

세션 티켓과 Steamworks 웹 API

사용자 인증

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:
  • 클라이언트는 ISteamUser::GetAuthSessionTicket을 호출하여 세션 티켓을 가져와야 합니다.
  • 티켓의 유효성을 확인하기 위해 클라이언트는 ISteamUser::GetAuthSessionTicketResponse_t 콜백을 기다려야 합니다.
  • 클라이언트는 세션 티켓을 보안 서버에 보내야 합니다.
  • The secure server must make an HTTPS request to partner.steam-api.com and call the ISteamUserAuth/AuthenticateUserTicket web method, passing the user's session ticket as a hex encoded UTF-8 string. 이 방법을 사용하면 제공된 티켓의 AppID와 관련된 Steam 웹 API 키 또는 웹 API 게시자 키를 전달할 수 있습니다. 이 API의 향후 업데이트에서는 웹 API 게시자 키가 제공되면 호출자에게 더 많은 정보를 반환할 수 있습니다.
  • 사용자의 티켓이 유효하면 ISteamUserAuth/AuthenticateUserTicket이 사용자의 64비트 SteamID를 반환합니다.

소유권 확인

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.

암호화된 애플리케이션 티켓

사용자 인증

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 Steamworks API Example Application (SpaceWar) project in the SDK. Specifically CSpaceWarClient::RetrieveEncryptedAppTicket and CSpaceWarClient::OnRequestEncryptedAppTicket.

소유권 확인

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 다운로드 가능한 콘텐츠(DLC).

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

사용자 인증

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:
  • https://steamcommunity.com/openid/를 Steam의 OP 엔드포인트 URL로 사용하도록 OpenID 라이브러리를 구성합니다.
  • 사용자 인증을 거치면 사용자의 잠정 ID에 사용자의 SteamID가 포함됩니다. Steam 잠정 ID의 형식은 다음과 같습니다. http://steamcommunity.com/openid/id/<steamid>.

소유권 확인

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.

예시

타사 계정과 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.

게임 내에서 연결

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:

웹 브라우저에서 연결

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

소유권 확인

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.

타사 CD 키에서 기본 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:

비공개 포럼 접속

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.

비 Steam 게임의 'DRM-free' 빌드 잠금 해제하기

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.

소프트웨어가 자신의 웹사이트에서 판매되고 키를 사용하여 액세스하는 경우

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 타사 계정과 Steam 계정 연동 above.

타사 키 등록을 위하여 인-게임 아이템을 드롭하는 경우

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...

키가 잠금 해제된 소프트웨어의 버전을 제어하는 경우

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...