Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
DurableIssuedTokenProvider örneği, özel istemci tarafından verilen belirteç sağlayıcısının nasıl uygulanduğunu gösterir.
Tartışma
Güvenlik altyapısına kimlik bilgileri sağlamak için Windows Communication Foundation'da (WCF) bir belirteç sağlayıcısı kullanılır. Belirteç sağlayıcısı genel olarak hedefi inceler ve güvenlik altyapısının iletinin güvenliğini sağlayabilmesi için uygun kimlik bilgilerini verir. WCF bir CardSpace token sağlayıcısı ile birlikte gelir. Özel jeton sağlayıcılar aşağıdaki durumlarda faydalıdır:
Yerleşik belirteç sağlayıcısının çalışamayacağı bir kimlik bilgisi deponuz varsa.
Kullanıcının ayrıntıları sağladığı noktadan WCF istemcisinin kimlik bilgilerini kullandığı noktaya kadar kimlik bilgilerini dönüştürmek için kendi özel mekanizmanızı sağlamak istiyorsanız.
Özel bir belirteç oluşturuyorsanız.
Bu örnek, bir Güvenlik Belirteci Hizmeti (STS) tarafından verilen belirteçleri önbelleğe alan bir özel belirteç sağlayıcısının nasıl derlendiğini gösterir.
Özetlemek gerekirse, bu örnek aşağıdakileri gösterir:
Bir istemci özel bir belirteç sağlayıcı ile nasıl yapılandırılabilir?
Verilen belirteçlerin nasıl önbelleğe alınabileceği ve WCF istemcisine nasıl sağlandığı.
Sunucunun X.509 sertifikası kullanılarak istemci tarafından kimlik doğrulaması nasıl yapılır.
Bu örnek, bir istemci konsol programı (Client.exe), bir güvenlik belirteci hizmet konsolu programı (Securitytokenservice.exe) ve bir hizmet konsolu programından (Service.exe) oluşur. Hizmet, istek-yanıt iletişim desenini tanımlayan bir sözleşme uygular. Sözleşme, matematik işlemlerini (ekleme, çıkarma, çarpma ve bölme) kullanıma sunan arabirim tarafından ICalculator tanımlanır. İstemci, Güvenlik Belirteci Hizmeti'nden (STS) bir güvenlik belirteci alır ve belirli bir matematik işlemi için hizmete zaman uyumlu istekler yapar ve hizmet sonuçla yanıtlar. İstemci etkinliği konsol penceresinde görünür.
Uyarı
Bu örnek için kurulum yordamı ve derleme yönergeleri bu konunun sonunda bulunur.
Bu örnek, wsHttpBinding< kullanarak ICalculator sözleşmesini> kullanıma sunar. İstemcide bu bağlamanın yapılandırması aşağıdaki kodda gösterilmiştir.
<bindings>
<wsFederationHttpBinding>
<binding name="ServiceFed">
<security mode="Message">
<message issuedKeyType="SymmetricKey"
issuedTokenType="http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV1.1">
<issuer address="http://localhost:8000/sts/windows"
binding="wsHttpBinding" />
</message>
</security>
</binding>
</wsFederationHttpBinding>
</bindings>
security öğesinin wsFederationHttpBinding üzerinde, mode değeri hangi güvenlik modunun kullanılacağını yapılandırır. Bu örnekte, mesaj güvenliği kullanılıyor, bu nedenle message öğesi wsFederationHttpBinding öğesi security içinde wsFederationHttpBinding belirtiliyor.
issuer öğesinin wsFederationHttpBindingmessage içindeki öğesiwsFederationHttpBinding, istemcinin Hesap Makinesi hizmetinde kimlik doğrulaması görebilmesi için istemciye bir güvenlik belirteci veren Güvenlik Belirteci Hizmeti'nin adresini ve bağlamasını belirtir.
Bu bağlamanın hizmetteki yapılandırması aşağıdaki kodda gösterilmiştir.
<bindings>
<wsFederationHttpBinding>
<binding name="ServiceFed">
<security mode="Message">
<message issuedKeyType="SymmetricKey"
issuedTokenType="http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV1.1">
<issuerMetadata address="http://localhost:8000/sts/mex">
<identity>
<certificateReference storeLocation="CurrentUser"
storeName="TrustedPeople"
x509FindType="FindBySubjectDistinguishedName"
findValue="CN=STS" />
</identity>
</issuerMetadata>
</message>
</security>
</binding>
</wsFederationHttpBinding>
</bindings>
security öğesinin wsFederationHttpBinding üzerinde, mode değeri hangi güvenlik modunun kullanılacağını yapılandırır. Bu örnekte, mesaj güvenliği kullanılıyor, bu nedenle message öğesi wsFederationHttpBinding öğesi security içinde wsFederationHttpBinding belirtiliyor.
issuerMetadata öğesinin wsFederationHttpBindingmessage içindeki öğesiwsFederationHttpBinding, Güvenlik Belirteci Hizmeti meta verilerini almak için kullanılabilecek bir uç noktanın adresini ve kimliğini belirtir.
Hizmetin davranışı aşağıdaki kodda gösterilmiştir.
<behavior name="ServiceBehavior">
<serviceDebug includeExceptionDetailInFaults="true" />
<serviceMetadata httpGetEnabled="true" />
<serviceCredentials>
<issuedTokenAuthentication>
<knownCertificates>
<add storeLocation="LocalMachine"
storeName="TrustedPeople"
x509FindType="FindBySubjectDistinguishedName"
findValue="CN=STS" />
</knownCertificates>
</issuedTokenAuthentication>
<serviceCertificate storeLocation="LocalMachine"
storeName="My"
x509FindType="FindBySubjectDistinguishedName"
findValue="CN=localhost" />
</serviceCredentials>
</behavior>
issuedTokenAuthentication öğesinin serviceCredentials içindeki öğesi, hizmetin kimlik doğrulaması sırasında istemcilerin sunmasına izin verdiği belirteçlerde kısıtlamalar belirtmesine olanak tanır. Bu yapılandırma, Konu Adı CN=STS olan bir sertifika tarafından imzalanan belirteçlerin hizmet tarafından kabul edildiği belirtir.
Güvenlik Belirteci Hizmeti, standart wsHttpBinding kullanarak tek bir uç noktayı kullanıma sunar. Güvenlik Belirteci Hizmeti, istemcilerden belirteç isteğine yanıt verir ve istemcinin bir Windows hesabı kullanarak kimlik doğrulamasından geçirmesi koşuluyla, verilen belirteçte talep olarak istemcinin kullanıcı adını içeren bir belirteç verir. Belirteci oluşturmanın bir parçası olarak, Güvenlik Belirteci Hizmeti CN=STS sertifikasıyla ilişkili özel anahtarı kullanarak belirteci imzalar. Buna ek olarak, bir simetrik anahtar oluşturur ve CN=localhost sertifikasıyla ilişkili ortak anahtarı kullanarak şifreler. Belirteci istemciye döndürürken, Güvenlik Belirteci Hizmeti simetrik anahtarı da döndürür. İstemci, verilen belirteci Hesap makinesi hizmetine sunar ve iletiyi bu anahtarla imzalayarak simetrik anahtarı bildiğini kanıtlar.
Özel İstemci Kimlik Bilgileri ve Belirteç Sağlayıcısı
Aşağıdaki adımlar, verilen belirteçleri önbelleğe alan ve WCF ile tümleştiren bir özel belirteç sağlayıcısının nasıl geliştirildiğini gösterir: güvenlik.
Özel bir belirteç sağlayıcısı geliştirmek için
Özel bir belirteç sağlayıcısı yazın.
Örnek, önbellekten alınan bir güvenlik belirtecini döndüren özel bir belirteç sağlayıcısı uygular.
Bu görevi gerçekleştirmek için, özel belirteç sağlayıcısı SecurityTokenProvider sınıfını türetir ve GetTokenCore yöntemini geçersiz kılar. Bu yöntem önbellekten belirteç almaya çalışır veya önbellekte bir belirteç bulunamazsa, temel sağlayıcıdan bir belirteç alır ve ardından bu belirteci önbelleğe alır. Her iki durumda da yöntemi bir
SecurityTokendöndürür.protected override SecurityToken GetTokenCore(TimeSpan timeout) { GenericXmlSecurityToken token; if (!this.cache.TryGetToken(target, issuer, out token)) { token = (GenericXmlSecurityToken) this.innerTokenProvider.GetToken(timeout); this.cache.AddToken(token, target, issuer); } return token; }Özel bir güvenlik belirteci yöneticisi yazın.
Belirli bir SecurityTokenManager için SecurityTokenProvider oluşturmak amacıyla SecurityTokenRequirement,
CreateSecurityTokenProvideryöntemine geçirilir. Güvenlik belirteci yöneticisi, belirteç kimlik doğrulayıcıları ve belirteç serileştiricileri oluşturmak için de kullanılır, ancak bunlar bu örnek kapsamında değildir. Bu örnekte, özel güvenlik belirteci yöneticisi ClientCredentialsSecurityTokenManager sınıfından devralır veCreateSecurityTokenProvideryöntemini, geçirilen belirteç gereksinimleri verilen bir belirtecin istendiğini gösterdiğinde, özel belirteç sağlayıcısını döndürmek için geçersiz kılar.class DurableIssuedTokenClientCredentialsTokenManager : ClientCredentialsSecurityTokenManager { IssuedTokenCache cache; public DurableIssuedTokenClientCredentialsTokenManager ( DurableIssuedTokenClientCredentials creds ): base(creds) { this.cache = creds.IssuedTokenCache; } public override SecurityTokenProvider CreateSecurityTokenProvider ( SecurityTokenRequirement tokenRequirement ) { if (IsIssuedSecurityTokenRequirement(tokenRequirement)) { return new DurableIssuedSecurityTokenProvider ((IssuedSecurityTokenProvider)base.CreateSecurityTokenProvider( tokenRequirement), this.cache); } else { return base.CreateSecurityTokenProvider(tokenRequirement); } } }Özel bir istemci kimlik bilgisi yazın.
İstemci kimlik bilgileri sınıfı, istemci proxy'si için yapılandırılan kimlik bilgilerini temsil etmek için kullanılır ve belirteç doğrulayıcıları, belirteç sağlayıcılarını ve belirteç serileştiricilerini almak için kullanılan güvenlik belirteci yöneticisini oluşturur.
public class DurableIssuedTokenClientCredentials : ClientCredentials { IssuedTokenCache cache; public DurableIssuedTokenClientCredentials() : base() { } DurableIssuedTokenClientCredentials ( DurableIssuedTokenClientCredentials other) : base(other) { this.cache = other.cache; } public IssuedTokenCache IssuedTokenCache { get { return this.cache; } set { this.cache = value; } } protected override ClientCredentials CloneCore() { return new DurableIssuedTokenClientCredentials(this); } public override SecurityTokenManager CreateSecurityTokenManager() { return new DurableIssuedTokenClientCredentialsTokenManager ((DurableIssuedTokenClientCredentials)this.Clone()); } }Belirteç önbelleğini uygulayın. Örnek uygulama, belirli bir belirteç önbelleği tüketicilerinin önbellekle etkileşime geçtiği soyut bir temel sınıf kullanır.
public abstract class IssuedTokenCache { public abstract void AddToken ( GenericXmlSecurityToken token, EndpointAddress target, EndpointAddress issuer); public abstract bool TryGetToken(EndpointAddress target, EndpointAddress issuer, out GenericXmlSecurityToken cachedToken); } // Configure the client to use the custom client credential.İstemcinin özel istemci kimlik bilgilerini kullanması için, örnek varsayılan istemci kimlik bilgisi sınıfını siler ve yeni istemci kimlik bilgisi sınıfını sağlar.
clientFactory.Endpoint.Behaviors.Remove<ClientCredentials>(); DurableIssuedTokenClientCredentials durableCreds = new DurableIssuedTokenClientCredentials(); durableCreds.IssuedTokenCache = cache; durableCreds.ServiceCertificate.Authentication.CertificateValidationMode = X509CertificateValidationMode.PeerOrChainTrust; clientFactory.Endpoint.Behaviors.Add(durableCreds);
Örneği çalıştırma
Örneği çalıştırmak için aşağıdaki yönergelere bakın. Örneği çalıştırdığınızda, güvenlik belirteci isteği Güvenlik Belirteci Hizmeti konsol penceresinde gösterilir. İşlem istekleri ve yanıtları istemci ve hizmet konsolu pencerelerinde görüntülenir. Uygulamayı kapatmak için konsol pencerelerinden herhangi birinde ENTER tuşuna basın.
Setup.cmd Batch Dosyası
Bu örneğin içinde yer alan Setup.cmd toplu dosyası, sunucu ve güvenlik belirteci hizmetini kendinden barındırılan bir uygulamayı çalıştıracak şekilde ilgili sertifikalarla yapılandırmanıza olanak tanır. Toplu iş dosyası, ikisi de Mevcut Kullanıcı/TrustedPeople sertifika deposunda bulunan iki sertifika oluşturur. İlk sertifikanın konu adı CN=STS'dir ve Güvenlik Belirteci Hizmeti tarafından istemciye verdiği güvenlik belirteçlerini imzalamak için kullanılır. İkinci sertifikanın konu adı CN=localhost'tır ve bu, Güvenlik Belirteci Hizmeti tarafından bir sırrı şifrelemek için kullanılır; bu, hizmetin bu sırları çözebilmesi içindir.
Örneği ayarlamak, derlemek ve çalıştırmak için
Gerekli sertifikaları oluşturmak için Setup.cmd dosyasını çalıştırın.
Çözümü oluşturmak için Windows Communication Foundation Örnekleri Oluşturma başlığındaki yönergeleri izleyin. Çözümdeki Shared, RSTRSTR, Service, SecurityTokenService ve Client projelerinin tamamının derlenmiş olduğundan emin olun.
Service.exe ve SecurityTokenService.exe yönetici ayrıcalıklarıyla çalıştığından emin olun.
Client.exeçalıştırın.
Örnekten sonra temizlik yapmak için
Örneği çalıştırmayı bitirdikten sonra örnekler klasöründe Cleanup.cmd çalıştırın.