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.
Bu örnek, özel belirteç sağlayıcısının nasıl uygulanduğunu gösterir. 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, varsayılan Kimlik Bilgisi Yöneticisi Belirteç Sağlayıcısı ile birlikte gelir. WCF ayrıca bir CardSpace belirteç sağlayıcısıyla birlikte gelir. Özel jeton sağlayıcılar aşağıdaki durumlarda faydalıdır:
Bu belirteç sağlayıcılarının çalışamayacağı bir kimlik bilgisi deponuz varsa.
Kullanıcının ayrıntıları sağladığı noktadan WCF istemci çerçevesinin 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, kullanıcıdan gelen girişi farklı bir biçime dönüştüren özel bir jeton sağlayıcısının nasıl oluşturulduğunu gösterir.
Özetlemek gerekirse, bu örnek aşağıdakileri gösterir:
Nasıl bir istemci kullanıcı adı/parola çifti kullanarak kimlik doğrulaması yapabilir.
Bir istemci özel bir belirteç sağlayıcı ile nasıl yapılandırılabilir?
Sunucunun kullanıcı adı ve parolanın eşleşip eşleşmediğini doğrulayan özel UserNamePasswordValidator bir parola kullanarak istemci kimlik bilgilerini nasıl doğrulayabilir?
Sunucunun X.509 sertifikası kullanılarak istemci tarafından kimlik doğrulaması nasıl yapılır.
Bu örnek, özel belirteç kimlik doğrulama işleminden sonra arayanın kimliğine nasıl erişilebileceğini de gösterir.
Hizmet, App.config yapılandırma dosyası kullanılarak tanımlanan hizmetle iletişim kurmak için tek bir uç nokta sunar. Uç nokta bir adres, bir bağlama ve bir sözleşmeden oluşur. Bağlama, varsayılan olarak ileti güvenliğini kullanan standart wsHttpBindingile yapılandırılır. Bu örnek, istemci kullanıcı adı kimlik doğrulamasını kullanmak için standardı wsHttpBinding ayarlar. Hizmet ayrıca serviceCredentials davranışını kullanarak hizmet sertifikasını yapılandırıyor. serviceCredentials davranışı, bir hizmet sertifikası yapılandırmanıza olanak tanır. Hizmet sertifikası, istemci tarafından hizmetin kimliğini doğrulamak ve ileti koruması sağlamak için kullanılır. Aşağıdaki yapılandırma, aşağıdaki kurulum yönergelerinde açıklandığı gibi örnek kurulum sırasında yüklenen localhost sertifikasına başvurur.
<system.serviceModel>
<services>
<service
name="Microsoft.ServiceModel.Samples.CalculatorService"
behaviorConfiguration="CalculatorServiceBehavior">
<host>
<baseAddresses>
<!-- configure base address provided by host -->
<add baseAddress ="http://localhost:8000/servicemodelsamples/service"/>
</baseAddresses>
</host>
<!-- use base address provided by host -->
<endpoint address=""
binding="wsHttpBinding"
bindingConfiguration="Binding1"
contract="Microsoft.ServiceModel.Samples.ICalculator" />
</service>
</services>
<bindings>
<wsHttpBinding>
<binding name="Binding1">
<security mode="Message">
<message clientCredentialType="UserName" />
</security>
</binding>
</wsHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="CalculatorServiceBehavior">
<serviceDebug includeExceptionDetailInFaults="False" />
<!--
The serviceCredentials behavior allows one to define a service certificate.
A service certificate is used by a client to authenticate the service and provide message protection.
This configuration references the "localhost" certificate installed during the setup instructions.
-->
<serviceCredentials>
<serviceCertificate findValue="localhost" storeLocation="LocalMachine" storeName="My" x509FindType="FindBySubjectName" />
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
İstemci uç noktası yapılandırması bir yapılandırma adı, hizmet uç noktası için mutlak bir adres, bağlama ve sözleşmeden oluşur. İstemci bağlaması, uygun Mode ve clientCredentialType mesajıyla yapılandırılır.
<system.serviceModel>
<client>
<endpoint name=""
address="http://localhost:8000/servicemodelsamples/service"
binding="wsHttpBinding"
bindingConfiguration="Binding1"
contract="Microsoft.ServiceModel.Samples.ICalculator">
</endpoint>
</client>
<bindings>
<wsHttpBinding>
<binding name="Binding1">
<security mode="Message">
<message clientCredentialType="UserName" />
</security>
</binding>
</wsHttpBinding>
</bindings>
</system.serviceModel>
Aşağıdaki adımlarda özel belirteç sağlayıcısı geliştirme ve WCF güvenlik çerçevesiyle tümleştirme adımları gösterilmektedir:
Özel bir belirteç sağlayıcısı yazın.
Örnek, kullanıcı adını ve parolayı alan özel bir belirteç sağlayıcısı uygular. Parola bu kullanıcı adıyla eşleşmelidir. Bu özel belirteç sağlayıcısı yalnızca tanıtım amaçlıdır ve gerçek dünya dağıtımı için önerilmez.
Bu görevi gerçekleştirmek için, özel belirteç sağlayıcısı SecurityTokenProvider sınıfını türetir ve GetTokenCore(TimeSpan) yöntemini geçersiz kılar. Bu yöntem yeni bir
UserNameSecurityTokenoluşturur ve döndürür.protected override SecurityToken GetTokenCore(TimeSpan timeout) { // obtain username and password from the user using console window string username = GetUserName(); string password = GetPassword(); Console.WriteLine("username: {0}", username); // return new UserNameSecurityToken containing information obtained from user return new UserNameSecurityToken(username, password); }Özel bir güvenlik belirteci yöneticisi yazın.
SecurityTokenManager, SecurityTokenProvider öğesini oluşturmak için SecurityTokenRequirement yöntemine geçirilen belirli
CreateSecurityTokenProvideriçin kullanılır. Güvenlik belirteci yöneticisi, belirteç doğrulayıcıları ve belirteç serileştiricisi 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 ve geçtiği belirteç gereksinimleri kullanıcı adı sağlayıcısının istendiğini gösterdiğinde,CreateSecurityTokenProvideryöntemini geçersiz kılarak özel kullanıcı adı belirteci sağlayıcısını döndürür.public class MyUserNameSecurityTokenManager : ClientCredentialsSecurityTokenManager { MyUserNameClientCredentials myUserNameClientCredentials; public MyUserNameSecurityTokenManager(MyUserNameClientCredentials myUserNameClientCredentials) : base(myUserNameClientCredentials) { this.myUserNameClientCredentials = myUserNameClientCredentials; } public override SecurityTokenProvider CreateSecurityTokenProvider(SecurityTokenRequirement tokenRequirement) { // if token requirement matches username token return custom username token provider // otherwise use base implementation if (tokenRequirement.TokenType == SecurityTokenTypes.UserName) { return new MyUserNameTokenProvider(); } 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ç seri hale getiricisini almak için kullanılan güvenlik belirteci yöneticisini oluşturur.
public class MyUserNameClientCredentials : ClientCredentials { public MyUserNameClientCredentials() : base() { } protected override ClientCredentials CloneCore() { return new MyUserNameClientCredentials(); } public override SecurityTokenManager CreateSecurityTokenManager() { // return custom security token manager return new MyUserNameSecurityTokenManager(this); } }İstemciyi özel istemci kimlik bilgilerini kullanacak şekilde yapılandırın.
İstemcinin özel istemci kimlik bilgilerini kullanabilmesi için, örnek varsayılan istemci kimlik bilgisi sınıfını siler ve yeni istemci kimlik bilgisi sınıfını sağlar.
static void Main() { // ... // Create a client with given client endpoint configuration CalculatorClient client = new CalculatorClient(); // set new credentials client.ChannelFactory.Endpoint.Behaviors.Remove(typeof(ClientCredentials)); client.ChannelFactory.Endpoint.Behaviors.Add(new MyUserNameClientCredentials()); // ... }
Hizmette, çağıranın bilgilerini görüntülemek için, aşağıdaki kod örneğinde gösterildiği gibi PrimaryIdentity kullanın. Current geçerli arayanın talep bilgilerini içerir.
static void DisplayIdentityInformation()
{
Console.WriteLine("\t\tSecurity context identity : {0}",
ServiceSecurityContext.Current.PrimaryIdentity.Name);
}
Örneği çalıştırdığınızda, işlem istekleri ve yanıtları istemci konsolu penceresinde görüntülenir. İstemciyi kapatmak için istemci penceresinde ENTER tuşuna basın.
Batch Dosyasını Ayarlama
Bu örneğe dahil olan Setup.bat toplu dosyası, sunucuyu ilgili sertifikayla yapılandırmanıza ve sunucu sertifikası tabanlı güvenlik gerektiren özyönetimli bir uygulamayı çalıştırmanıza olanak tanır. Bu toplu iş dosyası, bilgisayarlar arasında çalışacak veya barındırılmayan bir durumda çalışacak şekilde değiştirilmelidir.
Aşağıda, toplu iş dosyalarının farklı bölümlerine ilişkin kısa bir genel bakış sağlanır; böylece bunlar uygun yapılandırmada çalışacak şekilde değiştirilebilir:
Sunucu sertifikası oluşturuluyor.
Setup.bat toplu iş dosyasındaki aşağıdaki satırlar kullanılacak sunucu sertifikasını oluşturur.
%SERVER_NAME%değişkeni sunucu adını belirtir. Kendi sunucu adınızı belirtmek için bu değişkeni değiştirin. Bu toplu iş dosyasındaki varsayılan değer localhost'tır.echo ************ echo Server cert setup starting echo %SERVER_NAME% echo ************ echo making server cert echo ************ makecert.exe -sr LocalMachine -ss MY -a sha1 -n CN=%SERVER_NAME% -sky exchange -peSunucu sertifikasını istemcinin güvenilen sertifika deposuna yükleme:
Setup.bat toplu iş dosyasındaki aşağıdaki satırlar sunucu sertifikasını istemcinin güvenilen kişiler deposuna kopyalar. Makecert.exe tarafından oluşturulan sertifikalara istemci sistemi tarafından örtük olarak güvenilmediğinden bu adım gereklidir. İstemci güvenilen kök sertifikasında (örneğin, Microsoft tarafından verilen bir sertifika) köke sahip bir sertifikanız zaten varsa, istemci sertifika depoyu sunucu sertifikasıyla doldurma adımı gerekli değildir.
certmgr.exe -add -r LocalMachine -s My -c -n %SERVER_NAME% -r CurrentUser -s TrustedPeople
Uyarı
Setup.bat toplu iş dosyası bir Windows SDK Komut İsteminden çalıştırılacak şekilde tasarlanmıştır. MSSDK ortam değişkeninin SDK'nın yüklü olduğu dizine işaret etmelerini gerektirir. Bu ortam değişkeni bir Windows SDK Komut İstemi içinde otomatik olarak ayarlanır.
Örneği ayarlamak ve derlemek için
Windows Communication Foundation Örnekleri içinOne-Time Kurulum Yordamını yaptığınızdan emin olun.
Çözümü oluşturmak için Windows Communication Foundation Örnekleri Oluşturma başlığındaki yönergeleri izleyin.
Örneği aynı bilgisayarda çalıştırmak için
Yönetici ayrıcalıklarıyla açılan bir Visual Studio komut istemi içindeki örnek yükleme klasöründen Setup.bat çalıştırın. Bu, örneği çalıştırmak için gereken tüm sertifikaları yükler.
Uyarı
Setup.bat toplu iş dosyası, Visual Studio Komut İsteminden çalıştırılacak şekilde tasarlanmıştır. Visual Studio Komut İstemi içinde ayarlanan PATH ortam değişkeni, Setup.bat betiği tarafından gereken yürütülebilir dosyaları içeren dizini işaret eder.
service\bin konumundan service.exe başlatın.
\client\bin konumundan Client.exe başlatın. İstemci etkinliği, istemci konsol uygulamasında görüntülenir.
Kullanıcı adı istemine bir kullanıcı adı yazın.
Parola isteminde, kullanıcı adı istemi için yazılan dizeyi kullanın.
İstemci ve hizmet iletişim kuramıyorsa bkz. WCF Örnekleri için Sorun Giderme İpuçları.
Örneği bilgisayarlar arasında çalıştırmak için
Hizmet ikili dosyaları için hizmet bilgisayarında bir dizin oluşturun.
Hizmet programı dosyalarını hizmet bilgisayarındaki hizmet dizinine kopyalayın. Ayrıca Setup.bat ve Cleanup.bat dosyalarını hizmet bilgisayarına kopyalayın.
Bilgisayarın tam etki alanı adını içeren bir konu başlığına sahip bir sunucu sertifikanız olmalıdır. Service.exe.config dosyası bu yeni sertifika adını yansıtacak şekilde güncelleştirilmelidir. Setup.bat toplu iş dosyasını değiştirerek sunucu sertifikası oluşturabilirsiniz. setup.bat dosyasının, Yönetici ayrıcalıklarıyla açılan Visual Studio için Geliştirici Komut İstemi'nden çalıştırılması gerektiğini unutmayın.
%SERVER_NAME%değişkenini, hizmeti barındırmak için kullanılan bilgisayarın tam nitelikli ana bilgisayar adına ayarlamanız gerekir.Sunucu sertifikasını istemcinin CurrentUser-TrustedPeople deposuna kopyalayın. Sunucu sertifikası istemcinin güvenilen bir vereni tarafından verildiğinde bunu yapmanız gerekmez.
Hizmet bilgisayarındaki Service.exe.config dosyasında, localhost yerine tam bilgisayar adı belirtmek için temel adresin değerini değiştirin.
Hizmet bilgisayarında bir komut isteminden service.exe çalıştırın.
\client\bin\ klasöründeki, dile özgü klasörün altındaki istemci program dosyalarını istemci bilgisayara kopyalayın.
İstemci bilgisayardaki Client.exe.config dosyasında, uç noktanın adres değerini hizmetinizin yeni adresiyle eşleşecek şekilde değiştirin.
İstemci bilgisayarda, bir komut istemi penceresinden başlatın
Client.exe.İstemci ve hizmet iletişim kuramıyorsa bkz. WCF Örnekleri için Sorun Giderme İpuçları.
Örnekten sonra temizlik yapmak için
- Örneği çalıştırmayı bitirdikten sonra örnekler klasöründe Cleanup.bat çalıştırın.