개요
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를 통해 게임 클라이언트와 보안 백엔드 서버 사이에서 사용자의 신원을 확인하는 데도 사용됩니다. 보안 서버는
partner.steam-api.com
에 HTTPS 요청을 보낼 수 있어야 합니다.
암호화된 애플리케이션 티켓
암호화된 애플리케이션 티켓을 통해 게임 클라이언트와 안전한 백엔드 서버 사이에서 사용자의 신원을 확인할 수 있습니다. 세션 티켓과 달리, 암호화된 애플리케이션 티켓을 확인할 때는 보안 서버가 HTTPS 요청을 보내지
않아도 됩니다. 그 대신 보안 서버가 C++ 라이브러리와 전용 대칭 키를 사용해 티켓을 확인합니다. 이 라이브러리는 Steamworks SDK의
public/steam/lib
디렉터리에 Windows용과 Lunux용, 32비트와 64비트 버전으로 포함되어 있습니다.
암호화된 애플리케이션 티켓을 사용하기 전에 각 타이틀을 위한 개인 키를 생성해야 합니다. 귀하의 애플리케이션에서 Steamworks 설정 편집으로 이동한 후, ‘보안’ 드롭다운에서 ‘SDK 인증’을 선택합니다. 이 키는 타이틀의 AppID, 다운로드 가능한 해당 타이틀의 모든 콘텐츠와 연결됩니다. Steamworks에서 해당 섹션에 접근하려면 관련 애플리케이션에 대한 "관리 서명" 권한이 있어야 합니다.
주의: 이 키는 안전하게 보관해야 하며, 게임 애플리케이션과 함께 배포해서는 안 됩니다.
Steamworks 웹 API
Steam은 다양한 Steamworks 기능에 액세스하는 데 사용되는 HTTP 기반의 웹 API를 제공합니다. API는 게임 클라이언트 또는 서버와 같이 HTTP 요청이 가능한 모든 애플리케이션에서 액세스할 수 있는 공용 메서드를 담고 있습니다. API는 또한 인증이 필요한 보호된 메서드를 포함하며, 신뢰할 수 있는 백엔드 애플리케이션에 액세스할 수 있도록 고안되었습니다. 웹 API에 대한 더욱 자세한 내용은
여기에서 확인할 수 있습니다.
P2P 또는 게임 서버
세션 티켓
사용자 인증
다음은 세션 티켓을 사용해 사용자의 게임 클라이언트(클라이언트 A)와 다른 클라이언트 또는 게임 서버(클라이언트 B) 사이에서 사용자의 신원을 확인하는 과정입니다.
세션 티켓에 관한 몇 가지 중요한 정보:
소유권 확인
세션 티켓을 사용할 때 Steam은 자동으로 현재 AppID의 소유권을 확인합니다. 사용자가 현재 AppID를 소유하지 않은 경우에는,
ISteamUser::ValidateAuthTicketResponse_t의
m_eAuthSessionResponse
필드가
k_EAuthSessionResponseNoLicenseOrExpired로 설정됩니다. 사용자의 세션 티켓을 받아
ISteamUser::BeginAuthSession에 전달한 후,
ISteamUser::UserHasLicenseForApp 메서드를 사용하여 사용자가 특정 다운로드 콘텐츠를 소유하고 있는지 확인할 수 있습니다.
백엔드 서버
세션 티켓과 Steamworks 웹 API
사용자 인증
다음은 세션 티켓을 사용해 사용자의 게임 클라이언트와 보안 서버 사이에서 사용자의 신원을 확인하는 과정입니다.
소유권 확인
사용자의 신원이 확인되면 보안 서버는
ISteamUser/CheckAppOwnership 웹 API 메서드를 사용하여 사용자가 특정 AppID를 소유하고 있는지 확인하거나,
ISteamUser/GetPublisherAppOwnership을 호출하여 해당
게시자 키와 연관된, 사용자가 소유한 모든 AppID의 목록을 받습니다.
암호화된 애플리케이션 티켓
사용자 인증
다음은 암호화된 애플리케이션 티켓을 사용해 사용자의 게임 클라이언트와 보안 서버 사이에서 사용자의 신원을 확인하는 과정입니다.
구현 예시는 SDK의
Steamworks API Example Application (SpaceWar) 프로젝트에서 확인할 수 있습니다. 특히
CSpaceWarClient::RetrieveEncryptedAppTicket
과
CSpaceWarClient::OnRequestEncryptedAppTicket
을 확인하면 됩니다.
소유권 확인
Steam은 티켓 발급 목적에 맞는 앱ID를 소유한 사용자에게만 암호화된 애플리케이션 티켓을 발급합니다. 보안 서버는 암호화된 애플리케이션 티켓을 복호화한 후,
SteamEncryptedAppTicket::BIsTicketForApp 메서드를 사용해 해당 티켓의 AppID가 타이틀의 AppID와 일치하는지 확인합니다. 서버는
SteamEncryptedAppTicket::BUserOwnsAppInTicket 메서드를 사용해 사용자가 특정
다운로드 가능한 콘텐츠(DLC)를 소유하고 있는지 확인할 수도 있습니다.
OpenID를 통한 웹 브라우저 기반 인증
Steam은 Open ID 2.0 사양서에 명시된 바와 같이
OpenID 제공자입니다. 웹 브라우저에서 타사 웹사이트는 OpenID를 사용해 사용자의 SteamID를 확인할 수 있으며, SteamID는 타사 웹사이트에 로그인하거나 해당 웹사이트의 기존 계정과 연결하는 데 사용할 수 있습니다.
OpenID 이용 시 사용자는 웹 브라우저로 타사 웹사이트에 접속한 상태로 시작합니다. 사용자가 OpenID로 해당 웹사이트에 로그인하거나 계정과 연결하고자 하면, 해당 사이트는 사용자를 Steam 커뮤니티 웹사이트의 로그인 양식으로 이동시킵니다. 사용자가 Steam 로그인 정보를 입력하면 사용자의 웹 브라우저는 타사 웹사이트로 되돌아가며, URL에는 몇 가지 OpenID 전용 데이터가 추가됩니다. 그러면 사이트의 OpenID 라이브러리는 이 데이터로 사용자의 SteamID를 확인하고 SteamID를 가져옵니다.
Steam은 다음과 같이 타사 웹사이트에서 Steam 로그인 페이지로 연결될 때 사용 가능한 이미지를 제공합니다.
사용자 인증
Steam의 OpenID 2.0 기능은 사용자의 Steam 계정을 타사 웹사이트와 연결하는 데 사용할 수 있습니다.
OpenID 라이브러리의 목록은
OpenID 웹사이트에서 확인할 수 있습니다. OpenID로 사용자의 식원을 확인하는 방법은 다음과 같습니다.
-
https://steamcommunity.com/openid/
를 Steam의 OP 엔드포인트 URL로 사용하도록 OpenID 라이브러리를 구성합니다.
- 사용자 인증을 거치면 사용자의 잠정 ID에 사용자의 SteamID가 포함됩니다. Steam 잠정 ID의 형식은 다음과 같습니다.
http://steamcommunity.com/openid/id/<steamid>
.
소유권 확인
사용자의 신원이 확인되면 보안 서버는
ISteamUser/CheckAppOwnership 웹 API 메서드를 사용하여 사용자가 특정 AppID를 소유하고 있는지 확인하거나,
ISteamUser/GetPublisherAppOwnership을 호출하여 해당
Web API 게시자 키와 연관된, 사용자가 소유한 모든 AppID의 목록을 받습니다.
예시
타사 계정과 Steam 계정 연동
사용자의 SteamID를 타사 계정과 연결하면 타사 계정과 Steam 계정을 연동할 수 있습니다.
사용자의 SteamID는 게임 내에서 또는 웹 브라우저를 통해 안전하게 가져올 수 있으며, 최초 연결이 완료된 후에는 사용자의 SteamID를 확인하는 것만으로 타사 계정에 대한 안전한 액세스를 허용할 수 있습니다. 이 방법을 사용하면, Steam 사용자가 타사 계정 시스템에 2차로 로그인할 필요가 없게 됩니다. 또한 새로운 SteamID가 만들어질 때 새로운 제3자 계정이 자동으로 생성되어 연결되도록 하면, Steam 사용자는 2차 인증이 이루어진다는 사실을 전혀 알 필요가 없을 것입니다. 하나의 Steam 계정으로 모든 게임을 이용할 수 있으므로 사용자의 경험이 개선되고, 새로운 게임의 설치 및 플레이에 대한 진입 장벽이 해소됩니다.
게임 내에서 연결
세션 티켓은 Steamworks 웹 API를 통해 게임 클라이언트와 안전한 백엔드 서버 사이에서 사용자의 신원을 확인하는 데도 사용됩니다.
웹 브라우저에서 연결
Steam은 OpenID 2.0 사양을 지원하므로, 사용자는 귀하의 웹사이트에서 안전하게 Steam 계정에 로그인하고 SteamID를 가져올 수 있습니다. Steam과 함께 OpenID를 사용하는 방법은
OpenID 사용에서 확인하십시오.
소유권 확인
사용자의 신원이 확인되면 보안 서버는
ISteamUser/CheckAppOwnership 웹 API 메서드를 사용하여 사용자가 특정 AppID를 소유하고 있는지 확인하거나,
ISteamUser/GetPublisherAppOwnership을 호출하여 해당
Web API 게시자 키와 연관된, 사용자가 소유한 모든 AppID의 목록을 받습니다.
타사 CD 키에서 기본 Steam 소유권 확인으로 마이그레이션하기
Steam은 타이틀에서 사용자를 인증할 수 있는 몇 가지의 방법을 제공하기 때문에 제3자 CD 키를 이용할 필요가 없습니다. 당사는 CD 키의 일반적인 사용 사례와 각 사례를 Steam으로 구현하는 방법을 다음과 같이 목록으로 구성했습니다.
비공개 포럼 접속
사용자가 OpenID로 Steam 계정에 바로 로그인하도록 합니다. OpenID는 사용자의 64비트 SteamID를 반환하며
ISteamUser/CheckAppOwnership과 함께 사용하여 사용자가 귀하의 appid를 소유했는지 확인할 수 있습니다. 자세한 내용은 상단의
제3자 계정을 Steam 계정에 연결에서 확인하시기 바랍니다.
Steam 외부 게임의 'DRM-free' 빌드 잠금 해제하기
OpenID와
ISteamUser/CheckAppOwnership(
상단의 문서)으로 귀하의 사이트에 있는 콘텐츠를 잠금 해제합니다. 또는 DRM-free 빌드를 선택적 무료 DLC로 업로드할 수 있습니다.
소프트웨어가 자신의 웹사이트에서 판매되고 키를 사용하여 액세스하는 경우
사용자가 OpenID로 Steam 계정에 바로 로그인하도록 합니다. OpenID는 사용자의 64비트 SteamID를 반환하며
ISteamUser/CheckAppOwnership과 함께 사용하여 사용자가 귀하의 appid를 소유했는지 확인할 수 있습니다. 자세한 내용은 상단의
타사 계정과 Steam 계정 연동에서 확인할 수 있습니다.
타사 키 등록을 위하여 인-게임 아이템을 드롭하는 경우
Steam 보관함 서비스를 사용 중이라면 아이템의 itemdef가 홍보 아이템으로 구성됐는지 확인하고 클라이언트에서
ISteamInventory::AddPromoItem을 호출하세요.
자체 아이템 백엔드가 있는 경우, 게임 클라이언트에서
ISteamUser::GetAuthSessionTicket을 호출한 뒤 소유권 확인을 위해
ISteamUserAuth/AuthenticateUserTicket과
ISteamUser/CheckAppOwnership을 사용합니다.
추가 정보키가 잠금 해제된 소프트웨어의 버전을 제어하는 경우
게임의 각 버전에는 고유한 AppID가 있어야 합니다. 게임 클라이언트에서 소유권을 확인하려면
ISteamUser::GetAuthSessionTicket을 호출한 뒤
ISteamUserAuth/AuthenticateUserTicket과
ISteamUser/CheckAppOwnership을 사용합니다.
추가 정보