Genel Bakış
Steamworks, bir Steam kullanıcısının kimliğini ve bir uygulamanın sahipliğini doğrulamak için çeşitli yollar sunar. Bu belge aşağıdaki senaryolar için kullanılan doğrulama yöntemlerinin her birini açıklar:
- Bir oyun istemcisi ile başka bir istemci arasında (P2P) veya oyun sunucuları arasında Oturum Biletleri kullanarak
- Bir oyun istemcisi ile bir arka uç sunucusu arasında:
- Bir kullanıcı bir web tarayıcısı kullanıyor ise OpenID ve Steamworks Web API kullanarak
Steam içerisine bir kullanıcıyı tanımak
Her Steam kullanıcısı aynı zamanda
Steam ID
olarak da bilinen, eşsiz 64-bit sayısal kimlikleri ile belirlenebilir. Steamworks C++ API'ları içerisine bir kullanıcının SteamID'si bir
CSteamID objesi içerisinde saklanır. Mevcut kullanıcının SteamID'sini
ISteamUser::GetSteamID çağrısı yaparak getirebilir ve daha sonra getirilen değer üzerinde
CSteamID.ConvertToUint64()
çağrısı ile 64-bit kimliğe ulaşabilirsiniz.
Aşağıdaki doğrulama yöntemleri bir kullanıcının Steam ID'sini güvenli bir şekilde doğrulamak için kullanılabilir.
Bu belgede anlatılan API'lar
Oturum Biletleri
Oturum Biletleri, kullanıcının oyun istemcisi ve herhangi bir farklı sayıda oyun istemcisi arasında (peer-to-peer çok oyunculu oturumlar gibi) veya bir adanmış oyun sunucusu (
ISteamGameServer API'ı kullanarak) arasında bir kullanıcının kimliğini doğrulamak için kullanılabilen imzalanmış biletlerdir. Bu biletler ayrıca mevcut oyunun, ilgili indirilebilir içeriğin sahipliğini veya kullanıcının VAC yasaklısı (bkz.
Valve Anti Hile (VAC) ve Oyun Yasaklamaları) olup olmadığını doğrulamak için de kullanılabilir.
Oturum Biletleri bunun dışında bir kullanıcının kimliğini bir oyun istemcisi ile güvenli bir arka uç sunucusu arasında
Steamworks Web API kullanarak doğrulayabilir. Güvenli sunucunun
partner.steam-api.com
adresine HTTPS istekleri yapabilmesini gerektirir.
Şifrelenmiş Uygulama Biletleri
Şifrelenmiş Uygulama Biletleri bir kullanıcının kimliğini bir oyun istemcisi ile güvenli bir arka uç sunucusu arasında doğrulamak için kullanılabilir. Oturum Biletlerinin aksine Şifrelenmiş Uygulama Biletlerinin doğrulanması HTTPS istekleri yapan güvenli bir sunucu ihtiyacı
duymaz. Bunun yerine bileti doğrulamak için güvenli sunucu tarafından bir C++ kütüphanesi ile özel bir simetrik anahtar kullanılır. Steamworks SDK'i bu kütüphanenin Windows ve Linux için olan 32-bit ve 64-bit sürümlerini
public/steam/lib
dosya yolunda barındırır.
Şifrelenmiş Uygulama Biletlerini kullanmadan önce her bir oyununuz için bir özel anahtar oluşturmalısınız. Bunu, uygulamanızın Steamworks Ayarlarını Düzenle sayfasına giderek "Güvenlik" açılır menüsünden "SDK Doğrulaması" seçeneğini seçerek yapabilirsiniz. Bu anahtar oyununuzun AppID'si ve oyuna ait indirilebilir içerikler ile ilişkilendirilir. Steamworks'ün bu bölümüne erişebilmek için kullanıcının ilgili uygulama için "İmzalama Yönetimi" izni olmalıdır.
NOT: Bu anahtarlar güvenli bir şekilde saklanmalı ve uygulamanız içerisinde herhangi bir şekilde dağıtılmamalıdır!
Steamworks Web API
Steam, pek çok Steamworks özelliğine erişim için kullanılabilen HTTP temelli bir Web API sunar. API, bir oyun istemcisi veya sunucusu gibi, bir HTTP isteği yapabilecek herhangi bir uygulamadan erişilebilecek herkese açık yöntemler içerir. API ayrıca doğrulama gerektiren korumalı yöntemler de içerir. Ve bu yöntemlere erişimin güvenilen arka uç uygulamaları olması amaçlanmıştır. Web API hakkında daha fazla detayı
burada bulabilirsiniz.
P2P veya Oyun Sunucuları
Oturum Biletleri
Kullanıcı Doğrulaması
Aşağıdaki adımlar bir kullanıcının kimliğini, kullanıcının oyun istemcisi (istemci A) ile başka bir istemci veya oyun sunucusu (istemci B) arasında doğrulamak için nasıl Oturum Biletlerinin kullanılacağını anlatıyor:
- İstemci A'nın ISteamUser::GetAuthSessionTicket çağrısı yaparak bir oturum bileti alması gerekli.
- İstemci A kendi oturum biletini istemci B'ye göndermek zorundadır.
- İstemci B, istemci A'nın biletini hızlı bir doğrulama kontrolü gerçekleştirecek olan ISteamUser::BeginAuthSession çağrısından geçirmeli. Eğer bilet geçerli ise o zaman, ISteamUser::BeginAuthSession bileti Steam'in arka uç sunucularına biletin daha önce kullanılmadığını ve istemci A'nın sahibi olan hesap tarafıdan gönderilip gönderilmediğini öğrenmek için gönderir. Bu doğrulamanın sonucu bir ISteamUser::ValidateAuthTicketResponse_t geri çağrısı ile getirilecektir.
- Bir çok oyunculu oyun oturumu sona erdiğinde:
Oturum Biletleri ile ilgili birkaç önemli not:
- Oturum Biletleri sadece bir kere kullanılmalıdır. ISteamUser::GetAuthSessionTicket çağrısı, çok oyunculu oyun oturumunda bilet isteğinde bulunan bütün istemciler için çağırılmalıdır.
- Peer-to-peer çok oyunculu oyun oturumunda oyuncuları doğrulamak için kullanıldığında her oyun istemcisi o çok oyunculu oyun oturumunda yer alan diğer bütün oyun istemcilerinin kimliğini doğrulamalıdır.
- Bir Oturum Biletinin işi bittiği zaman ISteamUser::GetAuthSessionTicket tarafından getirilen her bir tanıtıcı için ISteamUser::CancelAuthTicket çağrısı yapılmalıdır.
- İstemci A ISteamUser::CancelAuthTicket çağrısı yaptığında istemci B, istemci A'nın biletinin artık geçerli olmadığını belirten bir ISteamUser::ValidateAuthTicketResponse_t geri çağrısı alacaktır.
- İstemci A, istemci B ile birlikte oynadığı bir oyundan çıktığı zaman, eğer istemci A'nın ISteamUser::CancelAuthTicket çağrısı istemci B'nin ISteamUser::EndAuthSession çağrısından önce işlenirse o zaman istemci B, biletin iptal edildiğini belirten bir ISteamUser::ValidateAuthTicketResponse_t geri çağrısı alacaktır. İstemci A'nın çıkışı konusunda ortak bir anlayış olmasından dolayı bu geri çağrı görmezden gelinecektir.
- Ağ durumları, Steam arka ucunun ISteamUser::BeginAuthSession çağrısını gerçekleştirene belirsiz bir süre için bir geri çağrı oluşturmasının önüne geçebilir. ISteamUser::BeginAuthSession çağrısının sahibi (İstemci B) bu geri çağrı alınana dek istemci A'nın gerçek kimliğimi bildiğini düşünmemeli. Ancak çok oyunculu oyun oturumunun devam etmesine izin vermeli.
- Eğer ISteamUser::BeginAuthSession çağrısının sahibi bir istemci A için olan biletin geçersiz olduğunu belirten bir ISteamUser::ValidateAuthTicketResponse_t çağrısı alırsa, çağrıyı yapan taraf, istemci A ile çok oyunculu oyun oturumunu devam etmek için bu çağrıyı reddetmelidir. Eğer oyundaki diğer eşler istemci A ile oynamayı reddeder ise çağrıyı yapan çok oyunculu oyun oturumunu terk etmeli.
- ISteamGameServer çağrısı bir oyun istemcisi ile bir oyun sunucus uarasındaki doğrulama işlemini gerçekleştirmek için ayın Oturum Biletleri yöntemini gösterir.
Sahiplik Doğrulaması
Oturum Biletleri kullanırken Steam otomatik olarak mevcut AppID'nin sahipliğini doğrular. Eğer kullanıcı mevcut AppID'ye sahip değil ise o zaman
ISteamUser::ValidateAuthTicketResponse_t çağrısının
m_eAuthSessionResponse
alanı
k_EAuthSessionResponseNoLicenseOrExpired olarak ayarlanacaktır. Bir kullanıcının Oturum Biletini alıp
ISteamUser::BeginAuthSession çağrısına gönderdikten sonra
ISteamUser::UserHasLicenseForApp çağrısı kullanılarak kullanıcının belirli bir indirilebilir içeriğe sahip olup olmadığına bakılabilir.
Arka Uç Sunucusu
Oturum Biletleri ve Steamworks Web API
Kullanıcı Doğrulaması
Aşağıdaki adımlar bir kullanıcının kimliğini, kullanıcının oyun istemcisi ve güvenli bir sunucu arasında Oturum Biletleri kullanarak nasıl doğrulanacağını detaylıca anlatıyor:
Sahiplik Doğrulaması
Bir kullanıcının kimliği doğrılandıktan sonra güvenli bir sunucu
ISteamUser/CheckAppOwnership Web API yöntemini kullanarak kullanıcının belirli bir AppID'ye sahip olup olmadığını kontrol etmeli. Veya
ISteamUser/GetPublisherAppOwnership çağrısı ile sağlanan
Yayıncı Anahtarı ile ilişkili kullanıcının sahip olduğu bütün AppID'lerin bir listesini getirmeli.
Şifrelenmiş Uygulama Biletleri
Kullanıcı Doğrulaması
Aşağıdaki adımlar bir kullanıcının kimliğini, kullanıcının oyun istemcisi ve güvenli bir sunucu arasında Şifrelenmiş Uygulama Biletleri kullanarak nasıl doğrulanacağını detaylıca anlatıyor:
Bu eylemin örnek bir uygulaması SDK içerisindeki
Steamworks API Example Application (SpaceWar) projesinde bulunabilir. Özellikle
CSpaceWarClient::RetrieveEncryptedAppTicket
ve
CSpaceWarClient::OnRequestEncryptedAppTicket
.
Sahiplik Doğrulaması
Steam Şifrelenmiş Uygulama Biletlerini sadece bilet oluşturulduğunda o AppID'ye sahip kullanıcılar için oluşturacaktır. Bir Şifrelenmiş Uygulama Biletinin şifresini çözdükten sonra güvenli sunucu, biletin AppID'si ile oyunun AppID'sinin uyuşup uyuşmadığını doğrulamak için
SteamEncryptedAppTicket::BIsTicketForApp çağrısını kullanabilir. Sunucu ayrıca kullanıcının belirli bir
İndirilebilir İçerik (DLC) sahibi olup olmadığından emin olmak için
SteamEncryptedAppTicket::BUserOwnsAppInTicket çağrısını kullanabilir.
OpenID ile Web Tarayıcı temelli doğrulama
Steam, OpenID 2.0 belirtiminde açıklandığı gibi bir
OpenID sağlayıcısıdır. Bir web tarayıcısı içerisinde üçüncü parti bir web sitesi OpenID kullanarak bir kullanıcının Steam ID'sini alabilir. Bu işlem üçüncü parti web sitelerinde giriş bilgileri olarak veya o web sitesi üzerinde var olan bir hesap ile bağlamak için kullanılabilir.
OpenID kullanırken kullanıcı, bir üçüncü parti web sitesinde bir web tarayıcısı içinde başlar. Kullanıcı o web sitesine giriş yapmak/hesabını bağlamak istediğinde OpenID kullanarak, site kullanıcıyı Steam Topluluğu web sitesi üzerinde giriş yapmak için yönlendirir. Kullanıcı Steam giriş bilgilerini girdikten sonra kullanıcının web tarayıcısı, dönüş bağlantısına eklenmiş bazı ek OpenID'ye özel belirli veriler ile birlikte üçüncü parti web sitesine otomatik olarak yönlendirilir. Sitenin OpenID kütüphanesi daha sonra bu veriyi kullanarak kullanıcının SteamID'sini doğrular ve elde eder.
Steam, Steam giriş sayfasına yönlendirilirken üçüncü parti sitelerde kullanılabilecek aşağıdaki resimleri sağlar:



Kullanıcı Doğrulaması
Steam'in OpenID 2.0 implementasyonu bir kullanıcının Steam hesabını üçüncü parti web sitesindeki hesapları ile bağlaması için kullanılabilir.
Açık kaynaklı OpenID kütüphanelerinin bir listesi
OpenID web sitesi üzerinde bulunabilir. Bir kullanıcının kimliğini doğrulamak için OpenID kullanmak için:
- OpenID kütüphanenizi aşağıdaki bağlantıyı Steam'in OP bitiş noktası bağlantısı olarak kullanması için ayarlayın:
https://steamcommunity.com/openid/
- Bir kullanıcı doğrulandıktan sonra kullanıcının alınan ID'si kullanıcının SteamID'sini içerecektir. Steam'in aldığı ID biçimi:
http://steamcommunity.com/openid/id/<steamid>
.
Sahiplik Doğrulaması
Bir kullanıcının kimliği doğrulandıktan sonra güvenli bir sunucu
ISteamUser/CheckAppOwnership Web API yöntemini kullanarak kullanıcının belirli bir AppID'ye sahip olup olmadığını veya
ISteamUser/GetPublisherAppOwnership çağrısı kullanarak kontrol edebilir veya verilmiş
Web API Yayıncı Anahtarı ile ilişkili kullanıcının sahibi olduğu bütün AppID'lerin bir listesini alabilir.
Örnekler
Üçüncü parti hesapları Steam hesapları ile bağlamak
Üçüncü parti hesaplar, kullanıcının SteamID'si ile üçüncü parti hesabını ilişkilendirerek bağlanabilir.
Bir kullanıcının SteamID'si ister oyun içinde ister bir web tarayıcısı aracılığıyla güvenle alınabilir. İlk ilişkilendirme yapıldıktan sonra üçüncü parti hesabın sadece bir kullanıcının SteamID'sini doğrulayarak bile güvenle erişimine izin verebilirsiniz. Bu, Steam kullanıcıların üçüncü parti hesap sistemlerinde herhangi bir tür ikincil giriş yapmasının önüne geçer. Ek olarak, eğer yeni üçüncü parti hesaplar yeni bir SteamID'si ile karşılaştığında otomatik olarak yaratılabilir ve bağlanabilirse Steam kullanıcısı ikinci bir doğrulamanın gerçekleştiğinden haberdar olmasına bile gerek yoktur. Bunun yerine onların tek Steam hesabı bütün oyunlarına erişim sağlayabilir, kullanıcı tecrübesini ve yeni oyunlar denemesini ve yüklemesinin önündeki potansiyel engelleri kaldırarak süreci hızlandırabilir.
Oyun İçi Bağlama
Oturum Biletleri bir kullanıcının kimliğini bir oyun istemcisi ile güvenli bir arka uç sunucusu arasında doğrulamak için Steamworks Web API kullanabilir:
Bir Web Tarayıcısından Bağlama
Steam OpenID 2.0 belirtimini destekler. Böylece kullanıcıların güvenli bir şekilde Steam hesaplarına web sitenizden giriş yapmasına ve SteamID'lerini almanıza izin verebilirsiniz. OpenID'yi Steam ile birlikte nasıl kullanacağınız hakkında detaylar için
OpenID Kullanımı bölümüne geri dönün.
Sahiplik Doğrulaması
Bir kullanıcının kimliği doğrulandıktan sonra güvenli bir sunucu
ISteamUser/CheckAppOwnership Web API yöntemini kullanarak kullanıcının belirli bir AppID'ye sahip olup olmadığını veya
ISteamUser/GetPublisherAppOwnership çağrısı kullanarakkontrol edebilir veya verilmiş
Web API Yayıncı Anahtarı ile ilişkili kullanıcının sahibi olduğu bütün AppID'lerin bir listesini alabilir.
Üçüncü Parti CD Anahtarlarından yerel Steam Sahiplik Kontrollerine Geçiş
Steam, üçüncü parti bir CD Anahtarına ihtiyacı ortadan kaldırarak bir oyunun bir kullanıcı ile olan ilişkilendirmesini sağlamak için çeşitli yollara sahiptir. CD Anahtarları için olan yaygın kullanımların ve her bir durumu Steam ile nasıl uygulayabileceğinizin bir listesini çıkarttık:
Özel Forum Erişimi
Kullanıcıların OpenID kullanarak Steam hesapları ile direkt olarak giriş yapmasını isteyebilirsiniz. OpenID kullanıcının 64-bit SteamID'sini getirir. Bu SteamID'sini daha sonra
ISteamUser/CheckAppOwnership çağrısı ile birlikte kullanarak kullanıcının appid'nize sahip olup olmadığını doğrulayabilirsiniz. Bu konuda daha fazla detayı
Üçüncü parti hesapları Steam hesapları ile bağlamak bölümünde bulabilirsiniz.
Bir oyunun Steam dışı, DRM'siz bir derlemesini açmak
OpenID ve
ISteamUser/CheckAppOwnership çağrısı kullanarak (
yukarıda açıklandı) kendi sitenizde içeriğin erişimini açabilirsiniz. Alternatif olarak, DRM'siz derlemeyi opsiyonel olarak bir DLC olarak yükleyebilirsiniz.
Yazılım web sitem üzerinden satılıyor ve bir anahtar ile erişilebiliyor
Kullanıcıların OpenID kullanarak Steam hesapları ile direkt olarak giriş yapmasını isteyebilirsiniz. OpenID kullanıcının 64-bit SteamID'sini getirir. Bu SteamID'sini daha sonra
ISteamUser/CheckAppOwnership çağrısı ile birlikte kullanarak kullanıcının appid'nize sahip olup olmadığını doğrulayabilirsiniz. Bu konuda daha fazla detayı yukarıdaki
Üçüncü parti hesapları Steam hesapları ile bağlamak bölümünde bulabilirsiniz.
Üçüncü parti anahtarınızı kaydederek oyun içerisinde öğe sağlama
Eğer
Steam Envanter Hizmetini kullanıyorsanız, öğenin itemdef bilgisinin bir promosyon öğesi olarak ayarlandığından emin olun ve istemciden
ISteamInventory::AddPromoItem çağrısını yapın.
Eğer kendi öğe arka uç sunucunuz var ise istemci üzerinden
ISteamUser::GetAuthSessionTicket çağrısı yaptıktan sonra
ISteamUser/CheckAppOwnership ile birlikte
ISteamUserAuth/AuthenticateUserTicket çağrısı yaparak sahipliği doğrulayabilirsiniz.
Ayrıntılı bilgi...Anahtar yazılımın hangi sürümünün erişilebildiğini kontrol ediyor
Oyununuzun her sürümün kendine ait bir AppID'si olmalı. Oyun istemcisinden
ISteamUser::GetAuthSessionTicket çağrısını yapın ve daha sonra
ISteamUser/CheckAppOwnership ile birlikte
ISteamUserAuth/AuthenticateUserTicket çağrısı yaparak sahipliği doğrulayabilirsiniz.
Ayrıntılı bilgi...