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 hizmet kimliği örneği, bir hizmet için kimliğin nasıl ayarlandığını gösterir. Tasarım zamanında istemci, hizmetin meta verilerini kullanarak kimliği alabilir ve ardından çalışma zamanında hizmetin kimliğini doğrulayabilir. Hizmet kimliği kavramı, istemcinin herhangi bir işlemi çağırmadan önce bir hizmetin kimliğini doğrulamasına izin vermek ve böylece istemciyi kimliği doğrulanmamış çağrılara karşı korumaktır. Güvenli bir bağlantıda hizmet, erişim izni vermeden önce istemcinin kimlik bilgilerini de doğrular, ancak bu örnekte odak noktası bu değildir. İstemcide sunucu kimlik doğrulamasını gösteren örneklere bakın.
Uyarı
Bu örnek için kurulum yordamı ve derleme yönergeleri bu konunun sonunda yer alır.
Bu örnekte aşağıdaki özellikler gösterilmektedir:
Bir hizmet için farklı uç noktalarda farklı kimlik türlerini ayarlama. Her kimlik türünün farklı özellikleri vardır. Kullanılacak kimlik türü, uç noktanın bağlaması üzerinde kullanılan güvenlik kimlik bilgilerinin türüne bağlıdır.
Kimlik, yapılandırmada bildirim temelli olarak veya kodda kesin olarak ayarlanabilir. Genellikle hem istemci hem de hizmet için kimliği ayarlamak için yapılandırmayı kullanmanız gerekir.
İstemcide özel bir kimlik nasıl ayarlanır? Özel kimlik, genellikle istemcinin hizmeti çağırmadan önce yetkilendirme kararları almak için hizmetin kimlik bilgilerinde sağlanan diğer talep bilgilerini incelemesine olanak tanıyan mevcut bir kimlik türünün özelleştirmesidir.
Uyarı
Bu örnek, identity.com adlı belirli bir sertifikanın kimliğini ve bu sertifikanın içinde yer alan RSA anahtarını denetler. İstemcide yapılandırmada Sertifika ve RSA kimlik türlerini kullanırken, bu değerleri elde etmenin kolay bir yolu, bu değerlerin seri hale getirildiği hizmet için WSDL'yi incelemektir.
Aşağıdaki örnek kod, WSHttpBinding kullanarak bir sertifikanın Etki Alanı Adı Sunucusu (DNS) ile bir hizmet uç noktasının kimliğini yapılandırmayı gösterir.
//Create a service endpoint and set its identity to the certificate's DNS
WSHttpBinding wsAnonbinding = new WSHttpBinding (SecurityMode.Message);
// Client are Anonymous to the service
wsAnonbinding.Security.Message.ClientCredentialType = MessageCredentialType.None;
WServiceEndpoint ep = serviceHost.AddServiceEndpoint(typeof(ICalculator),wsAnonbinding, String.Empty);
EndpointAddress epa = new EndpointAddress(dnsrelativeAddress,EndpointIdentity.CreateDnsIdentity("identity.com"));
ep.Address = epa;
Kimlik, App.config dosyasındaki yapılandırmada da belirtilebilir. Aşağıdaki örnekte, bir hizmet uç noktası için UPN (Kullanıcı Asıl Adı) kimliğinin nasıl ayarlanacağı gösterilmektedir.
<endpoint address="upnidentity"
behaviorConfiguration=""
binding="wsHttpBinding"
bindingConfiguration="WSHttpBinding_Windows"
name="WSHttpBinding_ICalculator_Windows"
contract="Microsoft.ServiceModel.Samples.ICalculator">
<!-- Set the UPN identity for this endpoint -->
<identity>
<userPrincipalName value="host\myservice.com" />
</identity >
</endpoint>
İstemcide özel bir kimlik, EndpointIdentity ve IdentityVerifier sınıflarından türeterek ayarlanabilir. Kavramsal olarak IdentityVerifier sınıfı, hizmetin AuthorizationManager sınıfının istemci eşdeğeri olarak kabul edilebilir. Aşağıdaki kod örneği, sunucu sertifikasının OrgEndpointIdentitykonu adıyla eşleşecek bir kuruluş adını depolayan uygulamasını gösterir. Organizasyon adı için yetkilendirme denetimi, CheckAccess sınıfındaki CustomIdentityVerifier yönteminde gerçekleşir.
// This custom EndpointIdentity stores an organization name
public class OrgEndpointIdentity : EndpointIdentity
{
private string orgClaim;
public OrgEndpointIdentity(string orgName)
{
orgClaim = orgName;
}
public string OrganizationClaim
{
get { return orgClaim; }
set { orgClaim = value; }
}
}
//This custom IdentityVerifier uses the supplied OrgEndpointIdentity to
//check that X.509 certificate's distinguished name claim contains
//the organization name e.g. the string value "O=Contoso"
class CustomIdentityVerifier : IdentityVerifier
{
public override bool CheckAccess(EndpointIdentity identity, AuthorizationContext authContext)
{
bool returnvalue = false;
foreach (ClaimSet claimset in authContext.ClaimSets)
{
foreach (Claim claim in claimset)
{
if (claim.ClaimType == "http://schemas.microsoft.com/ws/2005/05/identity/claims/x500distinguishedname")
{
X500DistinguishedName name = (X500DistinguishedName)claim.Resource;
if (name.Name.Contains(((OrgEndpointIdentity)identity).OrganizationClaim))
{
Console.WriteLine("Claim Type: {0}",claim.ClaimType);
Console.WriteLine("Right: {0}", claim.Right);
Console.WriteLine("Resource: {0}",claim.Resource);
Console.WriteLine();
returnvalue = true;
}
}
}
}
return returnvalue;
}
}
Bu örnek, dile özgü Kimlik çözümü klasöründe yer alan identity.com adlı bir sertifika kullanır.
Örneği ayarlamak, derlemek ve çalıştırmak için
Windows Communication Foundation Örnekleri içinOne-Time Kurulum Yordamını yaptığınızdan emin olun.
Çözümün C# veya Visual Basic .NET sürümünü oluşturmak için Windows Communication Foundation Örneklerioluşturma başlığındaki yönergeleri izleyin.
Örneği tek veya bilgisayarlar arası bir yapılandırmada çalıştırmak için Windows Communication Foundation Örneklerini Çalıştırma başlığındaki yönergeleri izleyin.
Örneği aynı bilgisayarda çalıştırmak için
Windows XP veya Windows Vista'da, IDENTITY çözümü klasöründeki Identity.pfx sertifika dosyasını MMC ek bileşeni aracını kullanarak LocalMachine/My (Kişisel) sertifika deposuna aktarın. Bu dosya parola korumalıdır. İçeri aktarma sırasında parola girmeniz istenir. Parola kutusuna yazın
xyz. Daha fazla bilgi için, MMC Ek Bileşeni ile Sertifikaları Görüntüleme Nasıl Yapılır konusuna bakın. Bu işlem tamamlandıktan sonra, Setup.bat yönetici ayrıcalıklarıyla Visual Studio için Geliştirici Komut İstemi'nde çalıştırın ve bu sertifikayı istemcide kullanılmak üzere CurrentUser/Trusted People deposuna kopyalar.Windows Server 2003'te, yönetici ayrıcalıklarına sahip 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. Örnekle işiniz bittiğinde Cleanup.bat çalıştırarak sertifikaları kaldırdığınızdan emin olun. Diğer güvenlik örnekleri aynı sertifikaları kullanır.
\service\bin dizininden Service.exe başlatın. Hizmetin hazır olduğunu ve <Enter> tuşuna basarak hizmeti sonlandırma istemini görüntülediğini gösterdiğinden emin olun.
Derlemek ve çalıştırmak için \client\bin dizininden veya Visual Studio'da F5 tuşuna basarak Client.exe başlatın. İstemci etkinliği, istemci konsol uygulamasında görüntülenir.
İ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
Örneğin istemci bölümünü oluşturmadan önce, Client.cs dosyasındaki
CallServiceCustomClientIdentityyönteminde hizmetin uç nokta adresinin değerini değiştirdiğinizden emin olun. Ardından örneği oluşturun.Hizmet bilgisayarında bir dizin oluşturun.
Hizmet programı dosyalarını service\bin dosyasından hizmet bilgisayarındaki dizine kopyalayın. Ayrıca Setup.bat ve Cleanup.bat dosyalarını hizmet bilgisayarına kopyalayın.
İstemci ikili dosyaları için istemci bilgisayarda bir dizin oluşturun.
İstemci programı dosyalarını istemci bilgisayardaki istemci dizinine kopyalayın. Ayrıca, Setup.bat, Cleanup.batve ImportServiceCert.bat dosyalarını istemciye kopyalayın.
Hizmette, yönetici ayrıcalıklarıyla açılan Visual Studio için Geliştirici Komut İstemi'nde
setup.bat servicekomutunu çalıştırın.setup.batbağımsız değişkeniyleserviceçalıştırmak, bilgisayarın tam etki alanı adına sahip bir hizmet sertifikası oluşturur ve hizmet sertifikasını Service.cer adlı bir dosyaya aktarır.Service.cer dosyasını hizmet dizininden istemci bilgisayardaki istemci dizinine 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. Değiştirilmesi gereken birden çok örnek vardır.
İstemcide, yönetici ayrıcalıklarıyla açılan Visual Studio için Geliştirici Komut İstemi'nde ImportServiceCert.bat çalıştırın. Bu, hizmet sertifikasını Service.cer dosyasından CurrentUser - TrustedPeople deposuna aktarır.
Hizmet bilgisayarında, komut satırından Service.exe'ı başlatın.
İstemci bilgisayarda bir komut isteminden Client.exe başlatın. İ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.
Uyarı
Bu betik, bu örneği bilgisayarlar arasında çalıştırırken istemcideki hizmet sertifikalarını kaldırmaz. Bilgisayarlar arasında sertifika kullanan Windows Communication Foundation (WCF) örnekleri çalıştırdıysanız CurrentUser - TrustedPeople deposuna yüklenmiş hizmet sertifikalarını temizlediğinizden emin olun. Bunu yapmak için şu komutu kullanın:
certmgr -del -r CurrentUser -s TrustedPeople -c -n <Fully Qualified Server Machine Name>Örneğin:certmgr -del -r CurrentUser -s TrustedPeople -c -n server1.contoso.com.