Steamworks Belgeleri
Kullanıcı Doğrulama ve Sahiplik

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:

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:

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:
sits_large_border.png

sits_large_noborder.png

sits_small.png

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