เอกสาร Steamworks
การยืนยันตัวตนและการเป็นเจ้าของของผู้ใช้

ภาพรวม

Steamworks จะเปิดให้ใช้กระบวนการยืนยันอัตลักษณ์ของผู้ใช้ Steam และการยืนยันการเป็นเจ้าของของแอปพลิเคชันหลากหลายรูปแบบ เอกสารดังต่อไปนี้จะลงรายละเอียดอธิบายกระบวนการยืนยันตัวตนต่าง ๆ ที่ใช้ในสถานการณ์ดังต่อไปนี้:

การระบุตัวตนของผู้ใช้ใน Steam

ผู้ใช้ Steam ทุกคนนั้น จะสามารถถูกระบุตัวตนกันได้อย่างไม่ซ้ำกันด้วยหมายเลขไอดีแบบ 64 บิต ที่เรียกว่า ไอดี Steam ใน Steamworks C++ API นั้น จะบรรจุ SteamID ของผู้ใช้เอาไว้ในออบเจ็กต์ CSteamID คุณสามารถเรียกรับ SteamID ของผู้ใช้ปัจจุบันได้ด้วยการเรียก ISteamUser::GetSteamID แล้วจากนั้นเรียกรับไอดี ประเภท 64 บิตได้ด้วยการเรียก CSteamID.ConvertToUint64() ลงไปบนค่าที่ได้รับคืนกลับมา

คุณจะสามารถใช้เมธอดการยืนยันตัวตนดังต่อไปนี้เพื่อยืนยันความถูกต้องของไอดี Steam ของผู้ใช้ได้

API ที่ได้รับการกล่าวถึงในเอกสารฉบับนี้

ตั๋วเซสชัน

ตั๋วเซสชันเป็นตั๋วที่ได้รับการลงนามที่สามารถนำไปใช้เพื่อตรวจสอบความถูกต้องของอัตลักษณ์ตัวตนของผู้ใช้ระหว่างไคลเอนต์เกมของผู้ใช้และไคลเอนต์เกมตัวอื่น ๆ ได้ (เช่น ในเซสชันผู้เล่นหลายคนแบบ peer-to-peer) หรือกับเซิร์ฟเวอร์เกมเฉพาะ (ด้วยการใช้ API ISteamGameServer) นอกจากนี้ยังสามารถใช้ตั๋วเหล่านี้เพื่อตรวจสอบความถูกต้องของสถานะการเป็นเจ้าของของเกมปัจจุบันและเนื้อหาดาวน์โหลดเสริมที่เกี่ยวข้องได้ รวมทั้งยังสามารถใช้เพื่อตรวจดูว่าผู้ใช้ได้ถูกแบนโดย VAC หรือไม่ (กรุณาอ่าน การแบนด้วยตัวป้องกันการโกงของ Valve (VAC) และเกมแบน)
และนอกจากนั้นยังสามารถใช้ตั๋วเซสชันเพื่อตรวจสอบความถูกต้องของอัตลักษณ์ของผู้ใช้ ระหว่างไคลเอนต์เกมและเซิร์ฟเวอร์ส่วนแบ็กเอนด์ที่ได้รับการดูแลความปลอดภัย ด้วยการใช้ Steamworks Web API Requires that the secure server can make HTTPS requests to partner.steam-api.com.

ตั๋วแอปพลิเคชันที่ได้รับการเข้ารหัส

สามารถใช้ตั๋วแอปพลิเคชันที่ได้รับการเข้ารหัสเพื่อตรวจสอบความถูกต้องของอัตลักษณ์ของผู้ใช้ ระหว่างไคลเอนต์เกมและเซิร์ฟเวอร์ส่วนแบ็กเอนด์ที่ได้รับการดูแลความปลอดภัยได้ ตั๋วแอปพลิเคชันที่ได้รับการเข้ารหัสจะต่างจากตั๋วเซสชันตรงที่ การตรวจสอบความถูกต้องของตั๋วแอปพลิเคชันที่ได้รับการเข้ารหัสนั้น จะ ไม่ต้องใช้เซิร์ฟเวอร์ที่ได้รับการดูแลความปลอดภัยที่สามารถดำเนินการร้องขอประเภท HTTPS ได้ โดยจะใช้ คลัง C++ และคีย์ Symmetric ส่วนตัวที่ใช้งานโดยเซิร์ฟเวอร์ที่ได้รับการดูแลความปลอดภัยมาตรวจสอบความถูกต้องของตั๋วแทน ซึ่ง Steamworks SDK จะบรรจุไลบรารีเอาไว้ทั้งเวอร์ชัน 32 บิต และ 64 บิต ให้แก่ทั้ง Windows และ Linux โดยจะอยู่ในไดเรกทอรี public/steam/lib
ก่อนที่จะใช้ตั๋วแอปพลิเคชันที่ได้รับการเข้ารหัส คุณจะต้องสร้างคีย์ส่วนตัวให้กับแอปพลิเคชันแต่ละรายการของคุณ คุณสามารถดำเนินการดังกล่าวนี้ได้ด้วยการไปยังการแก้ไขการตั้งค่า Steamworks ของแอปพลิเคชันของคุณและเลือก \การยืนยันตัวตน SDK\ จากเมนูเลื่อนลง \การรักษาความปลอดภัย\ โดยคีย์ดังกล่าวจะถูกเชื่อมโยงกับไอดีแอปของผลิตภัณฑ์ของคุณและเนื้อหาดาวน์โหลดใด ๆ สำหรับผลิตภัณฑ์นั้น

หมายเหตุ: จะต้องจัดเก็บคีย์เหล่านี้ให้มีความปลอดภัย และจะต้องไม่แจกจ่ายไปในแอปพลิเคชันของคุณไม่ว่าจะทางใดก็ตาม!

Steamworks Web API

Steam เปิดให้ใช้งาน Web API แบบ HTTP ที่สามารถใช้เข้าถึงคุณสมบัติมากมายของ Steamworks โดย API จะมีเมธอดแบบสาธารณะที่สามารถเข้าถึงด้วยแอปพลิเคชันอะไรก็ได้ที่มีความสามารถในการเรียกร้องขอคำสั่งทาง HTTP เช่น ไคลเอนต์เกม หรือเซิร์ฟเวอร์เกม เป็นต้น นอกจากนี้ API ยังมีเมธอดที่ได้รับการปกป้องซึ่งจำเป็นต้องผ่านกระบวนการยืนยันตัวตน และมีไว้ให้เข้าถึงจากแอปพลิเคชันแบ็กเอนด์ที่เชื่อถือได้เท่านั้น คุณสามารถดูรายละเอียดเพิ่มเติมเกี่ยวกับ Web API ได้ ที่นี่

เซิร์ฟเวอร์ P2P หรือเซิร์ฟเวอร์เกม

ตั๋วเซสชัน

การยืนยันตัวตนผู้ใช้

ขั้นตอนดังต่อไปนี้จะแจ้งให้ทราบถึงรายละเอียดวิธีการใช้ตั๋วเซสชันในการตรวจสอบอัตลักษณ์ตัวตนของผู้ใช้ระหว่างไคลเอนต์เกมของผู้ใช้ (ไคลเอนต์ A) กับไคลเอนต์ตัวอื่นหรือเซิร์ฟเวอร์เกม (ไคลเอนต์ B):
  • ไคลเอนต์ A จะต้องเรียกรับตั๋วเซสชันด้วยการเรียก ISteamUser::GetAuthSessionTicket
  • ไคลเอนต์ A จะต้องส่งตั๋วเซสชันของตัวเองไปให้ไคลเอนต์ B
  • ไคลเอนต์ B จะต้องส่งผ่านตั๋วของไคลเอนต์ A ไปยัง ISteamUser::BeginAuthSession ซึ่งจะทำการตรวจสอบความถูกต้องอย่างรวดเร็ว หากตั๋วมีความถูกต้อง เช่นนั้นแล้ว ISteamUser::BeginAuthSession ก็จะนำส่งตั๋วไปยังส่วนแบ็กเอนด์ของ Steam เพื่อตรวจสอบว่าตั๋วดังกล่าวไม่ได้เป็นตั๋วที่ถูกใช้ซ้ำ และออกมาโดยเจ้าของบัญชีของไคลเอนต์ A แล้วก็จะส่งผลการยืนยันนี้กลับไปให้ในการคอลแบ็ก ISteamUser::ValidateAuthTicketResponse_t
  • เมื่อเซสชันการเล่นกับผู้เล่นหลายคนสิ้นสุดลง:

หมายเหตุสำคัญบางประการเกี่ยวกับตั๋วเซสชัน:
  • ตั๋วเซสชันต้องใช้เพียงครั้งเดียวเท่านั้น จะต้องเรียก ISteamUser::GetAuthSessionTicket ให้แก่ทุกไคลเอนต์ที่อยู่ในเซสชันผู้เล่นหลายคนที่เป็นผู้ร้องขอตั๋ว
  • เมื่อใช้งานตั๋วเซสชันในการยืนยันความถูกต้องของผู้เล่นที่อยู่ในเซสชันผู้เล่นหลายคนแบบ peer-to-peer นั้น ไคลเอนต์เกมแต่ละตัวจะต้องยืนยันอัตลักษณ์ของไคลเอนต์เกมตัวอื่น ๆ ทุกตัวที่อยู่ในเซสชันผู้เล่นหลายคน
  • เมื่อใช้งานตั๋วเซสชันเสร็จแล้ว ก็จะต้องเรียก ISteamUser::CancelAuthTicket ให้แก่ตัวจัดการทุกตัวที่ถูกคืนค่ามาโดย ISteamUser::GetAuthSessionTicket
  • เมื่อไคลเอนต์ A เรียก ISteamUser::CancelAuthTicket ไคลเอนต์ B ก็จะได้รับคอลแบ็ก ISteamUser::ValidateAuthTicketResponse_t แจ้งว่าจะไม่สามารถใช้ตั๋วของไคลเอนต์ A ได้อีกต่อไป
  • เมื่อไคลเอนต์ A ออกจากเกมไปพร้อมกับไคลเอนต์ B หากว่าการเรียก ISteamUser::CancelAuthTicket ของไคลเอนต์ A นั้นได้รับการประมวลผลก่อนการเรียก ISteamUser::EndAuthSession ของไคลเอนต์ B เช่นนั้นแล้วไคลเอนต์ B ก็อาจจะได้รับคอลแบ็กISteamUser::ValidateAuthTicketResponse_t แจ้งว่าได้มีการยกเลิกตั๋วไปแล้ว นั่นก็เพราะว่ามีการตกลงร่วมกันว่าไคลเอนต์ A กำลังจะออกทำให้สามารถละเว้นคอลแบ็กนี้ได้
  • สภาพทางเครือข่ายอาจจะปิดกั้นไม่ให้ส่วนแบ็กเอนด์ของ Steam ส่งคอลแบ็กไปยังผู้เรียก ISteamUser::BeginAuthSession ซึ่งอาจกินเวลาไปเรื่อย ๆ ไม่จำกัด ผู้เรียก ISteamUser::BeginAuthSession (ไคลเอนต์ B) นั้นไม่ควรอนุมานว่าตนเองรู้จักอัตลักษณ์ที่แท้จริงของไคลเอนต์ A จนกว่าจะได้รับการคอลแบ็กนี้ แต่ว่าควรจะอนุญาตให้เซสชันผู้เล่นหลายคนดำเนินการต่อไปได้
  • หากว่าผู้เรียก ISteamUser::BeginAuthSession ได้รับคอลแบ็ก ISteamUser::ValidateAuthTicketResponse_t แจ้งว่าตั๋วสำหรับไคลเอนต์ A นั้นไม่มีความถูกต้อง ผู้เรียกจะต้องปฏิเสธไม่ดำเนินเซสชันผู้เล่นหลายคนกับไคลเอนต์ A ต่อ และหากว่า Peer อื่น ๆ ที่อยู่ในเกมไม่ยอมปฏิเสธที่จะเล่นกับไคลเอนต์ A ผู้เรียกก็ควรจะออกจากเซสชันผู้เล่นหลายคนดังกล่าว
  • ISteamGameServer จะเผยให้เข้าถึงเมธอดตั๋วเซสชันต่าง ๆ เพื่อดำเนินการยืนยันตัวตนระหว่างไคลเอนต์เกมและเซิร์ฟเวอร์เกมได้

การยืนยันการเป็นเจ้าของ

เมื่อใช้ตั๋วเซสชัน Steam จะยืนยันการเป็นเจ้าของไอดีแอปปัจจุบันโดยอัตโนมัติ หากผู้ใช้ไม่ได้เป็นเจ้าของไอดีแอปปัจจุบัน เช่นนั้นแล้วช่องข้อมูล m_eAuthSessionResponseของ ISteamUser::ValidateAuthTicketResponse_t ก็จะถูกตั้งค่าให้เป็น k_EAuthSessionResponseNoLicenseOrExpired หลังจากได้รับตั๋วเซสชันของผู้ใช้และได้ส่งผ่านตั๋วดังกล่าวไปยัง ISteamUser::BeginAuthSession แล้ว ก็จะสามารถใช้ ISteamUser::UserHasLicenseForApp เพื่อตัดสินได้ว่าผู้ใช้ได้เป็นเจ้าของชิ้นส่วนของเนื้อหาเสริมสำหรับดาวน์โหลดที่ระบุไว้หรือไม่

เซิร์ฟเวอร์ส่วนแบ็กเอนด์

ตั๋วเซสชัน และ Steamworks Web 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. Please note that this method allows either a Steam Web API Key or a Web API Publisher Key that is associated with the AppID for the provided ticket to be passed in. A future update to this API may return more information to the caller when a Web API Publisher key is supplied.
  • หากตั๋วของผู้ใช้มีความถูกต้อง เช่นนั้นแล้ว ISteamUserAuth/AuthenticateUserTicket ก็จะคืนค่าไอดี Steam แบบ 64 บิต

การยืนยันการเป็นเจ้าของ

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:
  • ไคลเอนต์จะต้องเรียก ISteamUser::RequestEncryptedAppTicket และรอผลลัพธ์การเรียก ISteamUser::EncryptedAppTicketResponse_t
  • จากนั้นไคลเอนต์จะต้องเรียก ISteamUser::GetEncryptedAppTicket เพื่อเรียกรับตั๋วที่ได้รับการเข้ารหัสของผู้ใช้ และส่งตั๋วดังกล่าวนั้นไปยังเซิร์ฟเวอร์ที่ได้รับการดูแลความปลอดภัย
  • เมื่อใช้คลังของตั๋วแอปพลิเคชันที่ได้รับการเข้ารหัสนั้น เซิร์ฟเวอร์ที่ได้รับการดูแลความปลอดภัยจะต้อง:

An example implementation can be found in the แอปพลิเคชันตัวอย่างของ Steamworks API (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:
  • กำหนดค่าคลังของ OpenID ให้ใช้งาน URL ดังต่อไปนี้เป็น OP Endpoint URL ของ Steam: https://steamcommunity.com/openid/
  • หลังจากที่ผู้ใช้ได้รับการยืนยันตัวตนแล้ว Claimed ID ของผู้ใช้ก็จะบรรจุไปด้วยไอดี Steam ของผู้ใช้ Steam Claimed 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:
  • ไคลเอนต์จะต้องเรียกรับตั๋วเซสชันด้วยการเรียก ISteamUser::GetAuthSessionTicket
  • ในการรับประกันความถูกต้องของตั๋วนั้น ไคลเอนต์จะต้องรอคอลแบ็ก ISteamUser::GetAuthSessionTicketResponse_t
  • ไคลเอนต์จะต้องส่งตั๋วเซสชันของตัวเองไปให้เซิร์ฟเวอร์ที่ได้รับการดูแลความปลอดภัย
  • เซิร์ฟเวอร์ที่ได้รับการดูแลความปลอดภัยดังกล่าวก็จะต้องดำเนินการร้องขอประเภท HTTPS ไปยัง api.steampowered.com และเรียกเว็บเมธอด ISteamUserAuth/AuthenticateUserTicket เพื่อส่งผ่านตั๋วเซสชันของผู้ใช้เป็นสตริง UTF-8 ที่ได้รับการเข้ารหัสเป็นเลขฐาน 16 โปรดทราบว่าเมธอดนี้จะต้องใช้ รหัส Web API สำหรับผู้จัดจำหน่าย ที่มีความเกี่ยวข้องกับไอดีแอปสำหรับตั๋วที่ให้มา
  • หากตั๋วของผู้ใช้มีความถูกต้อง เช่นนั้นแล้ว ISteamUserAuth/AuthenticateUserTicket ก็จะคืนค่าไอดี Steam แบบ 64 บิต

การเชื่อมโยงจากเว็บเบราว์เซอร์

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.

การย้ายการใช้งานจากรหัสผลิตภัณฑ์ของผู้พัฒนาภายนอกมาสู่ระบบตรวจสอบการเป็นเจ้าของ 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.

การปลดล็อคเกมที่ไม่มี DRM ที่ไม่ใช่ของ 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.

ซอฟต์แวร์ได้รับการจัดจำหน่ายอยู่บนเว็บไซต์ของฉันเองและจะต้องปลดล็อคด้วยรหัส

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