Tổng quan
Steamworks đưa ra một số phương thức xác thực danh tính người dùng Steam và xác minh quyền sở hữu ứng dụng. Tài liệu này mô tả từng phương thức xác thực được dùng trong các tình huống sau:
- Giữa client trò chơi và các client khác (P2P) hoặc máy chủ trò chơi, dùng ticket phiên
- Giữa client trò chơi và máy chủ backend, dùng:
- Khi người dùng trong trình duyệt web sử dụng OpenID và API Web Steamworks
Nhận diện một người dùng bên trong Steam
Mỗi người dùng Steam sở hữu mã nhận diện độc nhất là ID số 64-bit, được biết với tên gọi
Steam ID
của người dùng. Trong các API C++ trên Steamworks, SteamID được chứa bên trong object
CSteamID. Bạn có thể lấy SteamID của người dùng hiện tại bằng cách gọi
ISteamUser::GetSteamID rồi lấy ID 64-bit bằng cách gọi
CSteamID.ConvertToUint64()
trên giá trị được trả về.
Phương thức xác thực sau có thể dùng để xác minh SteamID người dùng một cách an toàn.
API được đề cập trong tài liệu này
Ticket phiên
Ticket phiên là ticket có dấu (signed) có thể được dùng để xác minh danh tính người dùng giữa client trò chơi của họ và bất kỳ các client trò chơi nào khác (ví dụ như trong một phiên chơi nhiều người kết nối peer-to-peer), hoặc giữa máy chủ chuyên dụng/máy chủ kiêm người chơi (sử dụng API
ISteamGameServer). Các ticket này cũng được dùng để xác minh quyền sở hữu của trò chơi hiện tại kèm nội dung tải thêm (DLC) liên quan, và xem người dùng có bị cấm VAC không (tham khảo
Valve Anti-Cheat (VAC) và lệnh cấm chơi).
Ticket phiên có thể dùng để xác minh danh tính người dùng giữa client trò chơi và máy chủ backend bảo mật thông qua
API Web Steamworks. Với điều kiện là máy chủ bảo mật có thể thực hiện yêu cầu HTTPS tới
partner.steam-api.com
.
Ticket ứng dụng mã hóa
Ticket ứng dụng mã hóa có thể được dùng để xác minh danh tính người dùng giữa client trò chơi và máy chủ backend bảo mật. Khác với ticket phiên, xác minh ticket ứng dụng mã hóa
không cần máy chủ bảo mật với khả năng thực hiện yêu cầu HTTPS. Thay vào đó, một thư viện C++ và khóa riêng tư, đối xứng được dùng bởi máy chủ bảo mật để xác minh ticket. Steamworks SDK bao gồm cả phiên bản 32-bit và 64-bit của thư viện này cho Windows và Linux trong thư mục
public/steam/lib
.
Trước khi dùng ticket ứng dụng mã hóa, bạn phải tạo một khóa riêng tư cho mỗi sản phẩm. Bạn có thể làm điều thế bằng cách đến Chỉnh sửa thiết lập Steamworks cho ứng dụng của mình và chọn 'SDK Auth' từ menu thả xuống của thẻ 'Bảo mật'. Khóa này sẽ được liên kết với AppID sản phẩm của bạn và bất kỳ nội dung tải thêm nào cho sản phẩm đó. Để truy cập được vào mục này của Steamworks, một người dùng phải có quyền "Quản lý chữ ký" cho ứng dụng liên quan.
LƯU Ý: Các khóa này phải được lưu trữ an toàn, và không được phân phối trong ứng dụng của bạn dưới bất kỳ hình thức nào!
API Web Steamworks
Steam đưa ra một API web dựa trên HTTP để truy cập một số tính năng của Steamworks. API chứa các phương thức công khai có thể được truy cập từ bất kỳ ứng dụng nào có khả năng thực hiện yêu cầu HTTP, như máy khách hoặc máy chủ trò chơi. API cũng chứa các phương thức được bảo vệ, bắt buộc phải xác thực và truy cập từ các ứng dụng backend chứng nhận tin cậy. Tìm hiểu thêm chi tiết về API Web
tại đây.
P2P hoặc máy chủ trò chơi
Ticket phiên
Xác thực người dùng
Sau đây là các bước chi tiết cách dùng ticket phiên để xác minh danh tính người dùng giữa client trò chơi của họ (client A) và một client khác hoặc máy chủ trò chơi (client B):
Một vài lưu ý quan trọng về ticket phiên:
Xác minh quyền sở hữu
Khi sử dụng ticket phiên, Steam sẽ tự động xác minh quyền sở hữu cho AppID hiện tại. Nếu người dùng không sở hữu AppID hiện tại, thì trường
m_eAuthSessionResponse
của
ISteamUser::ValidateAuthTicketResponse_t sẽ được đặt thành
k_EAuthSessionResponseNoLicenseOrExpired. Sau khi nhận ticket phiên của người dùng và truyền vào
ISteamUser::BeginAuthSession,
ISteamUser::UserHasLicenseForApp có thể được dùng để quyết định xem người dùng có sở hữu một phần nội dung tải thêm cụ thể hay không.
Máy chủ backend
Ticket phiên và API Web Steamworks
Xác thực người dùng
Sau đây là các bước trình bày chi tiết cách dùng ticket phiên để xác minh danh tính người dùng, giữa client trò chơi của họ và một máy chủ bảo mật:
Xác minh quyền sở hữu
Khi danh tính của người dùng được xác minh, một máy chủ bảo mật có thể dùng phương thức API Web
ISteamUser/CheckAppOwnership để kiểm tra xem người dùng có sở hữu một AppID cụ thể hay không, hoặc gọi
ISteamUser/GetPublisherAppOwnership để lấy danh sách tất cả AppID sở hữu bởi người dùng và liên kết với
khóa nhà phát hành được cung cấp.
Ticket ứng dụng mã hóa
Xác thực người dùng
Sau đây là các bước chi tiết cách dùng Ticket ứng dụng mã hóa để xác minh danh tính người dùng giữa client trò chơi của họ và một máy chủ bảo mật:
Một ví dụ về cách tích hợp có thể tìm được tìm thấy ở project
Ví dụ ứng dụng API Steamworks (Spacewar!) trong SDK. Cụ thể là
CSpaceWarClient::RetrieveEncryptedAppTicket
và
CSpaceWarClient::OnRequestEncryptedAppTicket
.
Xác minh quyền sở hữu
Steam sẽ chỉ tạo ticket ứng dụng mã hóa cho người dùng sở hữu AppID mà ticket được tạo cho. Sau khi giải mã một ticket ứng dụng mã hóa, máy chủ bảo mật có thể dùng
SteamEncryptedAppTicket::BIsTicketForApp để xác minh AppID của ticket khớp với AppID của sản phẩm. Máy chủ cũng có thể dùng
SteamEncryptedAppTicket::BUserOwnsAppInTicket để quyết định xem người dùng có sở hữu một phần
Nội dung tải thêm (DLC) cụ thể nào hay không.
Xác thực dựa trên trình duyệt web với OpenID
Steam là một nhà cung cấp
OpenID, như được mô tả trong yêu cầu của OpenID 2.0. Bên trong trình duyệt web, trang web bên thứ ba có thể dùng OpenID để lấy SteamID của người dùng, và sử dụng làm thông tin đăng nhập cho trang web bên thứ ba, hoặc liên kết với một tài khoản có sẵn trên trang web đó.
Khi dùng OpenID, người dùng bắt đầu trong một trình duyệt web tại trang web của bên thứ ba. Khi người dùng muốn đăng nhập/liên kết tài khoản của họ với trang web đó, thông qua OpenID, trang web điều hướng người dùng tới biểu mẫu đăng nhập trên trang web cộng đồng Steam. Khi người dùng đã nhập thông tin đăng nhập Steam của họ, trình duyệt web của người dùng tự động điều hướng về lại trang web bên thứ ba với một số dữ liệu OpenID cụ thể được nối vào ULR trở về. Thư viện OpenID của trang web có thể dùng dữ liệu này để xác minh và lấy SteamID của người dùng.
Steam cung cấp ảnh sau mà trang web bên thứ ba có thể dùng khi dẫn liên kết tới trang đăng nhập Steam:
Xác thực người dùng
Cách tích hợp OpenID 2.0 của Steam có thể được dùng để liên kết tài khoản Steam của người dùng tới tài khoản của họ trên trang web bên thứ ba.
Bạn có thể tìm thấy danh sách các thư viện OpenID mã nguồn mở tại
trang web OpenID. Để sử dụng OpenID nhằm xác minh danh tính người dùng:
- Thiết lập thư viện OpenID của bạn để dùng URL sau làm URL điểm cuối bên cung cấp OpenID của Steam:
https://steamcommunity.com/openid/
- Sau khi người dùng đã được xác thực, Claimed ID của người dùng sẽ chứa SteamID người dùng. Định dạng Claimed ID của Steam là:
http://steamcommunity.com/openid/id/<steamid>
.
Xác minh quyền sở hữu
Khi danh tính của người dùng được xác minh, một máy chủ bảo mật có thể dùng phương thức API Web
ISteamUser/CheckAppOwnership để kiểm tra xem người dùng có sở hữu một AppID cụ thể hay không, hoặc gọi
ISteamUser/GetPublisherAppOwnership để lấy danh sách tất cả AppID sở hữu bởi người dùng và liên kết với
khóa nhà phát hành API Web được cung cấp.
Ví dụ
Liên kết tài khoản bên thứ ba tới tài khoản Steam
Tài khoản bên thứ ba có thể được liên kết với tài khoản Steam bằng cách liên kết SteamID của người dùng với tài khoản bên thứ ba.
Có thể lấy SteamID của người dùng một cách bảo mật trong trò chơi hoặc qua trình duyệt web, và sau khi thực hiện liên kết lần đầu, bạn có thể cho phép truy cập an toàn tới tài khoản bên thứ ba chỉ bằng việc xác minh SteamID của người dùng. Làm thế loại bỏ việc yêu cầu người dùng Steam phải đăng nhập thêm lần nữa vào hệ thống tài khoản của bên thứ ba. Ngoài ra, nếu có thể tự động tạo và liên kết tài khoản bên thứ ba mới khi gặp SteamID mới, thì người dùng Steam sẽ không bao giờ cần quan tâm đến việc xác thực lần thứ hai có xảy ra hay không. Thay vào đó, một tài khoản Steam của họ có thể trao quyền truy cập tới tất cả trò chơi, làm đơn giản hóa trải nghiệm người dùng và gỡ bỏ rào cản tiềm tàng trong việc cài và thử trò chơi mới.
Liên kết từ trong trò chơi
Ticket phiên có thể được dùng để xác minh danh tính người dùng giữa client trò chơi và máy chủ backend bảo mật thông qua API Web Steamworks:
Liên kết từ trình duyệt web
Steam hỗ trợ tiêu chuẩn OpenID 2.0 để bạn có thể cho phép người dùng an toàn đăng nhập vào tài khoản Steam của họ từ trang web của bạn và lấy SteamID của họ. Để biết thêm chi tiết cách dùng OpenID với Steam, đến
Sử dụng OpenIDXác minh quyền sở hữu
Khi danh tính của người dùng được xác minh, một máy chủ bảo mật có thể dùng phương thức API Web
ISteamUser/CheckAppOwnership để kiểm tra xem người dùng có sở hữu một AppID cụ thể hay không, hoặc gọi
ISteamUser/GetPublisherAppOwnership để lấy danh sách tất cả AppID sở hữu bởi người dùng và liên kết với
khóa nhà phát hành API Web được cung cấp.
Chuyển từ việc dùng mã CD bên thứ ba sang kiểm tra quyền sở hữu gốc trên Steam
Bản thân Steam có nhiều cách để giúp sản phẩm xác thực người dùng, loại bỏ việc cần đến mã CD bên thứ ba. Chúng tôi tổng hợp một danh sách các trường hợp phổ biến cho mã CD và cách bạn có thể tích hợp từng trường hợp với Steam:
Truy cập diễn đàn riêng tư
Bạn sẽ muốn người dùng đăng nhập trực tiếp với tài khoản Steam của họ bằng OpenID. OpenID sẽ trả về SteamID 64bit của người dùng, mà có thể được dùng với
ISteamUser/CheckAppOwnership để xác minh người dùng có sở hữu AppID của bạn. Tìm hiểu thêm chi tiết ở bên trên tại
Liên kết tài khoản bên thứ ba tới tài khoản Steam.
Mở khóa phiên bản ngoài Steam, không có DRM của một trò chơi
Dùng OpenID và
ISteamUser/CheckAppOwnership (
được ghi ở bên trên) để mở khóa nội dung trên trang của bạn. Ngoài ra, bạn có thể tải lên bản build không có DRM, dưới dạng DLC miễn phí nếu muốn.
Phần mềm được bán trên trang web của tôi và mở khóa bằng mã
Bạn sẽ muốn người dùng đăng nhập trực tiếp với tài khoản Steam của họ bằng OpenID. OpenID sẽ trả về SteamID 64bit của người dùng, mà có thể được dùng với
ISteamUser/CheckAppOwnership để xác minh người dùng có sở hữu AppID của bạn. Tìm thêm thông tin chi tiết tại
Liên kết tài khoản bên thứ ba tới tài khoản Steam bên trên.
Trao vật phẩm trong trò chơi khi đăng ký mã bên thứ ba của bạn
Nếu đang dùng
dịch vụ kho đồ Steam, hãy đảm bảo rằng itemdef của vật phẩm được thiết lập đúng cách dưới dạng promo và gọi
ISteamInventory::AddPromoItem từ client.
Nếu có backend cho vật phẩm của mình, bạn có thể gọi
ISteamUser::GetAuthSessionTicket từ phần mềm trò chơi rồi dùng
ISteamUserAuth/AuthenticateUserTicket với
ISteamUser/CheckAppOwnership để xác minh quyền sở hữu.
Thêm thông tin...Mã CD quyết định phiên bản nào của phần mềm được mở khóa
Mỗi phiên bản của trò chơi nên có AppID riêng. Từ phần mềm trò chơi, gọi
ISteamUser::GetAuthSessionTicket rồi dùng
ISteamUserAuth/AuthenticateUserTicket với
ISteamUser/CheckAppOwnership để xác minh quyền sở hữu.
Thêm thông tin...