ภาพรวม
Steamworks จะเปิดให้ใช้กระบวนการยืนยันอัตลักษณ์ของผู้ใช้ Steam และการยืนยันการเป็นเจ้าของของแอปพลิเคชันหลากหลายรูปแบบ เอกสารดังต่อไปนี้จะลงรายละเอียดอธิบายกระบวนการยืนยันตัวตนต่าง ๆ ที่ใช้ในสถานการณ์ดังต่อไปนี้:
- ระหว่างไคลเอนต์เกมและไคลเอนต์อื่น (P2P) หรือ เซิร์ฟเวอร์เกม ด้วยการใช้ ตั๋วเซสชัน
- ระหว่างไคลเอนต์เกมและเซิร์ฟเวอร์ส่วนแบ็กเอนด์ ด้วยการใช้:
- เมื่อผู้ใช้อยู่ในเว็บเบราว์เซอร์ ด้วยการใช้ OpenID and Steamworks Web API
การระบุตัวตนของผู้ใช้ใน 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 กำหนดว่า เซิร์ฟเวอร์ที่ปลอดภัยสามารถส่งคำขอ HTTPS ไปยัง
partner.steam-api.com
ได้
ตั๋วแอปพลิเคชันที่ได้รับการเข้ารหัส
สามารถใช้ตั๋วแอปพลิเคชันที่ได้รับการเข้ารหัสเพื่อตรวจสอบความถูกต้องของอัตลักษณ์ของผู้ใช้ ระหว่างไคลเอนต์เกมและเซิร์ฟเวอร์ส่วนแบ็กเอนด์ที่ได้รับการดูแลความปลอดภัยได้ ตั๋วแอปพลิเคชันที่ได้รับการเข้ารหัสจะต่างจากตั๋วเซสชันตรงที่ การตรวจสอบความถูกต้องของตั๋วแอปพลิเคชันที่ได้รับการเข้ารหัสนั้น
จะ ไม่ต้องใช้เซิร์ฟเวอร์ที่ได้รับการดูแลความปลอดภัยที่สามารถดำเนินการร้องขอประเภท HTTPS ได้ โดยจะใช้ คลัง C++ และคีย์ Symmetric ส่วนตัวที่ใช้งานโดยเซิร์ฟเวอร์ที่ได้รับการดูแลความปลอดภัยมาตรวจสอบความถูกต้องของตั๋วแทน Steamworks SDK มีคลังนี้ในเวอร์ชัน 32 บิตและ 64 บิตสำหรับ Windows และ Linux ภายใต้ไดเรกทอรี
public/steam/lib
ก่อนที่จะใช้ตั๋วแอปพลิเคชันที่ได้รับการเข้ารหัส คุณจะต้องสร้างคีย์ส่วนตัวให้กับแอปพลิเคชันแต่ละรายการของคุณ คุณสามารถดำเนินการดังกล่าวนี้ได้โดยไปที่ "แก้ไขการตั้งค่า Steamworks" ในแอปพลิเคชันของคุณและเลือก "SDK Auth" จากเมนูดรอปดาวน์ "การรักษาความปลอดภัย" คีย์ดังกล่าวนี้จะเชื่อมโยงกับไอดีแอปของเกมคุณและเนื้อหาดาวน์โหลดใด ๆ ของเกมนั้น ในการเข้าถึงส่วนนี้ของ Steamworks ผู้ใช้จะต้องมีสิทธิ์ "จัดการการลงนาม" สำหรับแอปพลิเคชันที่เกี่ยวข้อง
หมายเหตุ: จะต้องจัดเก็บคีย์เหล่านี้ให้มีความปลอดภัย และต้องไม่แจกจ่ายภายในแอปพลิเคชันของคุณไม่ว่าด้วยวิธีใด!
Steamworks Web API
Steam เปิดให้ใช้งาน Web API แบบ HTTP ที่สามารถใช้เข้าถึงคุณสมบัติมากมายของ Steamworks ได้ โดย API จะมีวิธีการแบบสาธารณะที่สามารถเข้าถึงจากแอปพลิเคชันใด ๆ ที่สามารถขอ HTTP ได้ เช่น ไคลเอนต์เกม หรือเซิร์ฟเวอร์เกม เป็นต้น นอกจากนี้ API ยังมีวิธีการที่ได้รับการปกป้องซึ่งจำเป็นต้องผ่านกระบวนการยืนยันตัวตน และมีไว้ให้เข้าถึงจากแอปพลิเคชันแบ็กเอนด์ที่เชื่อถือได้เท่านั้น รายละเอียดเพิ่มเติมเกี่ยวกับ Web API มีให้อ่านได้
ที่นี่เซิร์ฟเวอร์ P2P หรือเซิร์ฟเวอร์เกม
ตั๋วเซสชัน
การยืนยันตัวตนผู้ใช้
ขั้นตอนดังต่อไปนี้แสดงรายละเอียดเกี่ยวกับวิธีใช้ทิกเก็ตเซสชันเพื่อตรวจสอบตัวตนของผู้ใช้ระหว่างไคลเอนต์เกมของผู้ใช้ (ไคลเอนต์ A) กับไคลเอนต์ตัวอื่นหรือเซิร์ฟเวอร์เกม (ไคลเอนต์ B):
หมายเหตุสำคัญบางประการเกี่ยวกับตั๋วเซสชัน:
การยืนยันการเป็นเจ้าของ
เมื่อใช้ตั๋วเซสชัน Steam จะตรวจสอบสถานะความเป็นเจ้าของไอดีแอปปัจจุบันโดยอัตโนมัติ หากผู้ใช้ไม่ได้เป็นเจ้าของไอดีแอปปัจจุบัน ช่องข้อมูล
m_eAuthSessionResponse
ของ
ISteamUser::ValidateAuthTicketResponse_t ก็จะตั้งค่าไปเป็น
k_EAuthSessionResponseNoLicenseOrExpired หลังจากได้รับตั๋วเซสชันของผู้ใช้และส่งตั๋วดังกล่าวไปยัง
ISteamUser::BeginAuthSession แล้ว ก็จะสามารถใช้
ISteamUser::UserHasLicenseForApp เพื่อตัดสินว่าผู้ใช้รายนั้นเป็นเจ้าของเนื้อหาดาวน์โหลดส่วนใดส่วนหนึ่งโดยเฉพาะหรือไม่
เซิร์ฟเวอร์ส่วนแบ็กเอนด์
ตั๋วเซสชัน และ Steamworks Web API
การยืนยันตัวตนผู้ใช้
ขั้นตอนดังต่อไปนี้แสดงรายละเอียดเกี่ยวกับวิธีใช้ทิกเก็ตเซสชันเพื่อตรวจสอบตัวตนของผู้ใช้ระหว่างไคลเอนต์เกมของผู้ใช้กับเซิร์ฟเวอร์ที่มีความปลอดภัย:
การยืนยันการเป็นเจ้าของ
เมื่อได้ตรวจสอบตัวตนของผู้ใช้เรียบร้อยแล้ว เซิร์ฟเวอร์ที่มีความปลอดภัยจะสามารถใช้งานวิธีการ Web API
ISteamUser/CheckAppOwnership เพื่อตรวจสอบดูว่าผู้ใช้เป็นเจ้าของไอดีแอปที่เฉพาะเจาะจงหรือไม่ หรือจะเรียก
ISteamUser/GetPublisherAppOwnership เพื่อรับรายการไอดีแอปทั้งหมดที่ผู้ใช้เป็นเจ้าของ ซึ่งเกี่ยวข้องกับ
คีย์สำหรับผู้จัดจำหน่ายที่จัดไว้ให้
ตั๋วแอปพลิเคชันที่ได้รับการเข้ารหัส
การยืนยันตัวตนผู้ใช้
ขั้นตอนต่อไปนี้แสดงรายละเอียดเกี่ยวกับวิธีใช้ตั๋วแอปพลิเคชันที่ได้รับการเข้ารหัส เพื่อยืนยันตัวตนของผู้ใช้ระหว่างไคลเอนต์เกมของผู้ใช้กับเซิร์ฟเวอร์ที่มีความปลอดภัย:
คุณสามารถดูตัวอย่างการใช้งานได้ในโครงการ
แอปพลิเคชันตัวอย่างของ Steamworks API (SpaceWar) ที่อยู่ใน SDK โดยเฉพาะอย่างยิ่ง
CSpaceWarClient::RetrieveEncryptedAppTicket
และ
CSpaceWarClient::OnRequestEncryptedAppTicket
การยืนยันการเป็นเจ้าของ
Steam จะสร้างตั๋วแอปพลิเคชันที่ได้รับการเข้ารหัสให้แก่ผู้ใช้ซึ่งเป็นเจ้าของไอดีแอปที่ตั๋วนี้สร้างให้เท่านั้น หลังจากถอดรหัสตั๋วแอปพลิเคชันที่ได้รับการเข้ารหัสแล้ว เซิร์ฟเวอร์ที่มีความปลอดภัยจะสามารถใช้งาน
SteamEncryptedAppTicket::BIsTicketForApp เพื่อตรวจสอบไอดีแอปของตั๋วว่ามีความตรงกันกับไอดีแอปของเกมหรือไม่ นอกจากนั้นเซิร์ฟเวอร์ยังสามารถใช้
SteamEncryptedAppTicket::BUserOwnsAppInTicket เพื่อตัดสินว่าผู้ใช้เป็นเจ้าของส่วนที่เฉพาะเจาะจงของ
เนื้อหาดาวน์โหลด (DLC) หรือไม่
การยืนยันตัวตนทางเว็บเบราว์เซอร์ด้วย OpenID
Steam เป็นผู้ให้บริการ
OpenID ตามที่ได้บัญญัติไว้ในข้อกำหนดคุณลักษณะของ OpenID 2.0 ภายในเว็บเบราว์เซอร์ เว็บไซต์ของผู้พัฒนาภายนอกจะสามารถใช้ OpenID เพื่อเรียกรับ SteamID ของผู้ใช้ ซึ่งสามารถนำไปใช้เป็นข้อมูลรับรองในการเข้าระบบของเว็บไซต์ผู้พัฒนาภายนอก หรือเชื่อมต่อไปยังบัญชีที่มีอยู่แล้วในเว็บไซต์นั้นได้
เมื่อมีการใช้งาน OpenID ผู้ใช้จะเริ่มต้นจากเว็บเบราว์เซอร์ในเว็บไซต์ของผู้พัฒนาภายนอก เมื่อผู้ใช้ต้องการที่จะเข้าสู่ระบบ/เชื่อมต่อบัญชีของตนเองไปยังเว็บไซต์ดังกล่าวโดยใช้ OpenID เว็บไซต์ดังกล่าวจะนำทางให้ผู้ใช้ไปยังแบบฟอร์มการเข้าสู่ระบบที่อยู่ในเว็บไซต์ของชุมชน Steam เมื่อผู้ใช้ได้กรอกข้อมูลการเข้าสู่ระบบ Steam ของตัวเองแล้ว เว็บเบราว์เซอร์ของผู้ใช้ก็จะนำทางกลับไปยังเว็บไซต์ของผู้พัฒนาภายนอกโดยอัตโนมัติ โดยเพิ่มเติมข้อมูลจำเพาะ OpenID บางอย่างต่อท้าย URL ที่คืนค่าด้วย จากนั้นไลบรารี OpenID ของเว็บไซต์ก็จะใช้ข้อมูลดังกล่าวนี้เพื่อตรวจสอบความถูกต้องและเรียกรับ SteamID ของผู้ใช้
Steam จะจัดเตรียมรูปภาพดังต่อไปนี้ ซึ่งเว็บไซต์ผู้พัฒนาภายนอกอาจนำไปใช้เมื่อเชื่อมโยงไปยังหน้าการเข้าสู่ระบบของ Steam:



การยืนยันตัวตนผู้ใช้
OpenID 2.0 ของ Steam อาจนำไปปรับใช้เพื่อเชื่อมโยงบัญชี Steam ของผู้ใช้เข้ากับบัญชีของตนที่เว็บไซต์ของผู้พัฒนาภายนอกได้
และสามารถดูรายชื่อไลบรารี OpenID โอเพนซอร์ซได้ที่
OpenID website ในการใช้ OpenID เพื่อตรวจสอบตัวตนของผู้ใช้ คุณจะต้อง:
- กำหนดค่าคลังของ OpenID ให้ใช้งาน URL ดังต่อไปนี้เป็น OP Endpoint URL ของ Steam:
https://steamcommunity.com/openid/
- หลังจากที่ผู้ใช้ได้รับการยืนยันตัวตนแล้ว Claimed ID ของผู้ใช้ก็จะบรรจุไปด้วยไอดี Steam ของผู้ใช้ Steam Claimed ID จะอยู่ในรูปแบบดังต่อไปนี้:
http://steamcommunity.com/openid/id/<steamid>
การยืนยันการเป็นเจ้าของ
หลังจากที่ตรวจสอบตัวตนของผู้ใช้เรียบร้อยแล้ว เซิร์ฟเวอร์ที่ปลอดภัยจะสามารถใช้เมธอด Web API
ISteamUser/CheckAppOwnership เพื่อตรวจสอบว่าผู้ใช้เป็นเจ้าของไอดีแอปที่เฉพาะเจาะจงหรือไม่ หรือจะเรียก
ISteamUser/GetPublisherAppOwnership เพื่อรับรายการไอดีแอปทั้งหมดที่ผู้ใช้เป็นเจ้าของ ซึ่งเกี่ยวข้องกับ
คีย์ Web API สำหรับผู้จัดจำหน่ายที่จัดไว้ให้
ตัวอย่าง
การเชื่อมบัญชีของผู้พัฒนาภายนอกเข้ากับบัญชี Steam
บัญชีของผู้พัฒนาภายนอกสามารถเชื่อมต่อเข้ากับบัญชี Steam ได้โดยเชื่อมโยง SteamID ของผู้ใช้เข้ากับบัญชีของผู้พัฒนาภายนอก
คุณอาจเรียกรับ SteamID ของผู้ใช้ได้อย่างปลอดภัย ทั้งในเกมหรือผ่านทางเว็บเบราว์เซอร์ และหลังจากที่เชื่อมโยงครั้งแรกเรียบร้อยแล้ว คุณก็สามารถอนุญาตให้เข้าถึงบัญชีของผู้พัฒนาภายนอกได้อย่างปลอดภัย โดยเพียงแค่ตรวจสอบยืนยัน SteamID ของผู้ใช้เท่านั้น กระบวนการนี้จะช่วยให้ผู้ใช้ Steam ไม่จำเป็นต้องไปเข้าสู่ระบบบัญชีของผู้พัฒนาภายนอกแยกต่างหากอีก นอกจากนี้ หากสามารถสร้างและเชื่อมโยงบัญชีใหม่ของผู้พัฒนาภายนอกได้โดยอัตโนมัติเมื่อมี SteamID ใหม่ ผู้ใช้ Steam ก็จะไม่ต้องรับรู้ว่ามีการรับรองความถูกต้องของอีกบัญชีหนึ่งเกิดขึ้นแต่อย่างใด แค่บัญชี Steam เพียงบัญชีเดียวก็สามารถมอบสิทธิ์ในการเข้าถึงเกมทั้งหมดของผู้ใช้ได้ ซึ่งช่วยให้ผู้ใช้มีประสบการณ์การใช้งานที่คล่องตัว และขจัดอุปสรรคที่อาจเกิดขึ้นในการติดตั้งและลองเกมใหม่
การเชื่อมโยงจากในเกม
ตั๋วเซสชันสามารถนำมาใช้เพื่อยืนยันตัวตนของผู้ใช้ระหว่างไคลเอนต์เกมกับเซิร์ฟเวอร์ส่วนแบ็กเอนด์ที่ปลอดภัย โดยใช้ Steamworks Web API:
การเชื่อมโยงจากเว็บเบราว์เซอร์
เนื่องจาก Steam รองรับข้อกำหนดเฉพาะของ OpenID 2.0 ดังนั้น คุณจึงอนุญาตให้ผู้ใช้เข้าสู่บัญชี Steam ของตนจากเว็บไซต์ของคุณและเรียกรับ SteamID ของผู้ใช้เองได้อย่างปลอดภัย หากต้องการรายละเอียดเพิ่มเติมเกี่ยวกับวิธีการใช้ OpenID กับ Steam โปรดไปที่
การใช้งาน OpenIDการยืนยันการเป็นเจ้าของ
หลังจากที่ตรวจสอบตัวตนของผู้ใช้เรียบร้อยแล้ว เซิร์ฟเวอร์ที่ปลอดภัยจะสามารถใช้เมธอด Web API
ISteamUser/CheckAppOwnership เพื่อตรวจสอบว่าผู้ใช้เป็นเจ้าของไอดีแอปที่เฉพาะเจาะจงหรือไม่ หรือจะเรียก
ISteamUser/GetPublisherAppOwnership เพื่อรับรายการไอดีแอปทั้งหมดที่ผู้ใช้เป็นเจ้าของ ซึ่งเกี่ยวข้องกับ
คีย์ Web API สำหรับผู้จัดจำหน่ายที่จัดไว้ให้
การย้ายการใช้งานจากรหัสผลิตภัณฑ์ของผู้พัฒนาภายนอกมาสู่ระบบตรวจสอบการเป็นเจ้าของ Steam แบบเนทิฟ
Steam เองมีวิธีการต่าง ๆ หลายวิธีเพื่อให้ผลิตภัณฑ์สามารถยืนยันตัวตนของผู้ใช้ได้ จึงไม่จำเป็นต้องใช้รหัสผลิตภัณฑ์ภายนอก เราได้รวบรวมรายการกรณีใช้งานรหัสผลิตภัณฑ์ทั่วไป และวิธีการที่คุณอาจนำไปปรับใช้กับ Steam ในแต่ละกรณีดังต่อไปนี้:
ฟอรัมสนทนาประเภทจำกัดการใช้งานส่วนบุคคล
คุณจะต้องดำเนินการเพื่อให้ผู้ใช้เข้าสู่ระบบโดยตรงด้วยบัญชี Steam ของตนเองโดยใช้ OpenID จากนั้น OpenID จะคืนค่า SteamID แบบ 64 บิต ของผู้ใช้กลับมา ซึ่งสามารถนำไปใช้กับ
ISteamUser/CheckAppOwnership เพื่อตรวจสอบความถูกต้องว่าผู้ใช้เป็นเจ้าของไอดีแอปของคุณ คุณสามารถอ่านรายละเอียดเพิ่มเติมได้ทางด้านบนที่
การเชื่อมโยงบัญชีภายนอกเข้ากับบัญชี Steamการปลดล็อคเกมที่ไม่มี DRM ที่ไม่ใช่ของ Steam
ให้ใช้ OpenID และ
ISteamUser/CheckAppOwnership (
ตามรายละเอียดข้างต้น) เพื่อปลดล็อคเนื้อหาบนเว็บไซต์ของคุณเอง หรือไม่เช่นนั้น ก็ให้คุณอัปโหลดบิลด์ของเกมที่ไม่มี DRM เป็นเนื้อหาดาวน์โหลดฟรีที่เลือกได้
ซอฟต์แวร์ได้รับการจัดจำหน่ายอยู่บนเว็บไซต์ของฉันเองและจะต้องปลดล็อคด้วยรหัส
คุณจะต้องดำเนินการเพื่อให้ผู้ใช้เข้าสู่ระบบโดยตรงด้วยบัญชี Steam ของตนเองโดยใช้ OpenID จากนั้น OpenID จะคืนค่า SteamID แบบ 64 บิต ของผู้ใช้กลับมา ซึ่งสามารถนำไปใช้กับ
ISteamUser/CheckAppOwnership เพื่อตรวจสอบความถูกต้องว่าผู้ใช้เป็นเจ้าของไอดีแอปของคุณ คุณสามารถอ่านรายละเอียดเพิ่มเติมได้ใน
การเชื่อมบัญชีของผู้พัฒนาภายนอกเข้ากับบัญชี Steam ข้างต้น
การมอบไอเท็มในเกมเป็นรางวัลให้แก่การลงทะเบียนรหัสผู้พัฒนาภายนอกของคุณ
หากคุณใช้
การบริการช่องเก็บของ Steam โปรดตรวจสอบให้แน่ใจว่ามีการกำหนดค่า itemdef ของไอเท็มเป็นไอเท็มโปรโมชันไว้อย่างถูกต้อง และเรียก
ISteamInventory::AddPromoItem จากไคลเอนต์
หากคุณมีแบ็กเอนด์ไอเท็มของคุณเอง คุณสามารถเรียก
ISteamUser::GetAuthSessionTicket จากไคลเอนต์เกม จากนั้นใช้
ISteamUserAuth/AuthenticateUserTicket กับ
ISteamUser/CheckAppOwnership เพื่อยืนยันความเป็นเจ้าของ
ข้อมูลเพิ่มเติม...รหัสจะเป็นตัวควบคุมว่าจะปลดล็อคซอฟต์แวร์เวอร์ชันใด
เกมของคุณในแต่ละเวอร์ชันควรมีไอดีแอปของตัวเอง ให้เรียก
ISteamUser::GetAuthSessionTicket จากไคลเอนต์เกม จากนั้นใช้
ISteamUserAuth/AuthenticateUserTicket กับ
ISteamUser/CheckAppOwnership เพื่อยืนยันความเป็นเจ้าของ
ข้อมูลเพิ่มเติม...