Aracılığıyla paylaş


Kimlik Doğrulama ile Hizmet Kimliği

Hizmetin uç nokta kimliği, hizmet Web Hizmetleri Açıklama Dili'nden (WSDL) oluşturulan bir değerdir. Herhangi bir istemciye yayılan bu değer, hizmetin kimliğini doğrulamak için kullanılır. İstemci bir uç noktayla iletişim başlattıktan ve hizmet istemcinin kimliğini doğruladıktan sonra, istemci uç nokta kimliği değerini uç nokta kimlik doğrulama işleminin döndürmüş olduğu gerçek değerle karşılaştırır. Eşleşirse, istemcinin beklenen hizmet uç noktasıyla iletişim kurduğundan emin olur. Bu, bir istemcinin kötü amaçlı bir hizmet tarafından barındırılan bir uç noktaya yönlendirilmesini engelleyerek kimlik avına karşı koruma işlevi görür.

Kimlik ayarını gösteren örnek bir uygulama için bkz . Hizmet Kimliği Örneği. Uç noktalar ve uç nokta adresleri hakkında daha fazla bilgi için bkz . Adresler.

Not

Kimlik doğrulaması için NT LanMan (NTLM) kullandığınızda, ntlm altında istemci sunucunun kimliğini doğrulayamadığından hizmet kimliği denetlenmiyor. NTLM, bilgisayarlar bir Windows çalışma grubunun parçası olduğunda veya Kerberos kimlik doğrulamayı desteklemeyen eski bir Windows sürümü çalıştırıldığında kullanılır.

İstemci üzerinden bir hizmete ileti göndermek için güvenli bir kanal başlattığında, Windows Communication Foundation (WCF) altyapısı hizmetin kimliğini doğrular ve yalnızca hizmet kimliği istemcinin kullandığı uç nokta adresinde belirtilen kimlikle eşleşiyorsa iletiyi gönderir.

Kimlik işleme aşağıdaki aşamalardan oluşur:

  • Tasarım zamanında istemci geliştirici, uç noktanın meta verilerinden (WSDL aracılığıyla kullanıma sunulan) hizmetin kimliğini belirler.

  • Çalışma zamanında, istemci uygulaması hizmete herhangi bir ileti göndermeden önce hizmetin güvenlik kimlik bilgilerinin taleplerini denetler.

İstemcide kimlik işleme, hizmetteki istemci kimlik doğrulamasına benzer. Güvenli bir hizmet, istemcinin kimlik bilgileri doğrulanana kadar kod yürütmez. Benzer şekilde, hizmetin meta verilerinden önceden bilinen bilgiler temelinde hizmetin kimlik bilgileri doğrulanana kadar istemci hizmete ileti göndermez.

Identity sınıfının özelliğiEndpointAddress, istemci tarafından çağrılan hizmetin kimliğini temsil eder. Hizmet, meta verilerinde öğesini Identity yayımlar. İstemci geliştirici hizmet uç noktasında ServiceModel Meta Veri Yardımcı Programı Aracı'nı (Svcutil.exe) çalıştırdığında, oluşturulan yapılandırma hizmetin Identity özelliğinin değerini içerir. WCF altyapısı (güvenlikle yapılandırılmışsa), hizmetin belirtilen kimliğe sahip olduğunu doğrular.

Önemli

Meta veriler hizmetin beklenen kimliğini içerdiğinden, örneğin hizmet için bir HTTPS uç noktası oluşturarak hizmet meta verilerini güvenli yollarla kullanıma sunmanız önerilir. Daha fazla bilgi için bkz . Nasıl yapılır: Meta Veri Uç Noktalarının Güvenliğini Sağlama.

Kimlik Türleri

Bir hizmet altı tür kimlik sağlayabilir. Her kimlik türü, yapılandırmadaki öğesinin içinde yer alan bir öğeye <identity> karşılık gelir. Kullanılan tür senaryoya ve hizmetin güvenlik gereksinimlerine bağlıdır. Aşağıdaki tabloda her kimlik türü açıklanmaktadır.

Kimlik türü Açıklama Tipik senaryo
Etki Alanı Adı Sistemi (DNS) Bu öğeyi X.509 sertifikaları veya Windows hesaplarıyla kullanın. Kimlik bilgisinde belirtilen DNS adını bu öğede belirtilen değerle karşılaştırır. DNS denetimi, SERTIFIKALARı DNS veya konu adlarıyla kullanmanıza olanak tanır. Bir sertifika aynı DNS veya konu adıyla yeniden sağlanırsa, kimlik denetimi hala geçerlidir. Sertifika yeniden yayınlandığında yeni bir RSA anahtarı alır ancak aynı DNS veya konu adını korur. Bu, istemcilerin hizmetle ilgili kimlik bilgilerini güncelleştirmeleri gerekmediği anlamına gelir.
Sertifika. Sertifika olarak ayarlandığında varsayılan ClientCredentialType değerdir. Bu öğe, istemciyle karşılaştırmak için Base64 ile kodlanmış X.509 sertifika değerini belirtir.

Hizmetin kimliğini doğrulamak için kimlik bilgisi olarak CardSpace kullanırken de bu öğeyi kullanın.
Bu öğe, parmak izi değerine göre kimlik doğrulamasını tek bir sertifikayla kısıtlar. Parmak izi değerleri benzersiz olduğundan bu daha katı kimlik doğrulaması sağlar. Bu tek bir uyarıyla birlikte gelir: Sertifika aynı Konu adıyla yeniden sağlanırsa, yeni bir Parmak İzi de vardır. Bu nedenle, yeni parmak izi bilinmediği sürece istemciler hizmeti doğrulayamaz. Sertifikanın parmak izini bulma hakkında daha fazla bilgi için bkz . Nasıl yapılır: Sertifikanın Parmak İzini Alma.
Sertifika Başvurusu Daha önce açıklanan Sertifika seçeneğiyle aynıdır. Ancak, bu öğe sertifikanın alınacağını bir sertifika adı ve depolama konumu belirtmenize olanak tanır. Daha önce açıklanan Sertifika senaryosuyla aynı.

Bunun avantajı, sertifika deposu konumunun değişebiliyor olmasıdır.
RSA Bu öğe, istemciyle karşılaştıracak bir RSA anahtar değeri belirtir. Bu, sertifika seçeneğine benzer, ancak sertifikanın parmak izini kullanmak yerine sertifikanın RSA anahtarı kullanılır. RSA denetimi, kimlik doğrulamasını RSA anahtarına göre tek bir sertifikayla özel olarak kısıtlamanıza olanak tanır. Bu, hizmet pahasına belirli bir RSA anahtarının daha sıkı kimlik doğrulamasına olanak tanır ve RSA anahtarı değeri değişirse mevcut istemcilerle çalışmaz.
Kullanıcı asıl adı (UPN). windows olarak ayarlandığında ve hizmet işlemi sistem hesaplarından biri altında çalışmadığında ClientCredentialType varsayılan değerdir. Bu öğe, hizmetin altında çalıştığı UPN'yi belirtir. Kimlik Doğrulaması için Bir Hizmetin Kimliğini Geçersiz Kılma'nın Kerberos Protokolü ve Kimlik bölümüne bakın. Bu, hizmetin belirli bir Windows kullanıcı hesabı altında çalışmasını sağlar. Kullanıcı hesabı geçerli oturum açmış kullanıcı veya belirli bir kullanıcı hesabı altında çalışan hizmet olabilir.

Bu ayar, hizmet Active Directory ortamındaki bir etki alanı hesabı altında çalışıyorsa Windows Kerberos güvenliğinden yararlanır.
Hizmet asıl adı (SPN). ClientCredentialType Varsayılan ayar Windows olarak ayarlandığında ve hizmet işlemi sistem hesaplarından biri (LocalService, LocalSystem veya NetworkService) altında çalışıyorsa. Bu öğe, hizmetin hesabıyla ilişkili SPN'yi belirtir. Kimlik Doğrulaması için Bir Hizmetin Kimliğini Geçersiz Kılma'nın Kerberos Protokolü ve Kimlik bölümüne bakın. Bu, SPN'nin ve SPN ile ilişkili belirli Windows hesabının hizmeti tanımlamasını sağlar.

hizmetin kullanıcı hesabıyla bir makine hesabını ilişkilendirmek için Setspn.exe aracını kullanabilirsiniz.

Bu ayar, hizmet sistem hesaplarından biri altında veya kendisiyle ilişkilendirilmiş SPN adına sahip bir etki alanı hesabı altında çalışıyorsa ve bilgisayar bir Active Directory ortamındaki bir etki alanının üyesiyse Windows Kerberos güvenliğinden yararlanır.

Hizmette Kimlik Belirtme

Genellikle, bir istemci kimlik bilgisi türü seçimi hizmet meta verilerinde gösterilen kimlik türünü dikte ettiğinden, hizmette kimliği ayarlamanız gerekmez. Hizmet kimliğini geçersiz kılma veya belirtme hakkında daha fazla bilgi için bkz . Kimlik Doğrulaması için Hizmetin Kimliğini Geçersiz Kılma.

Yapılandırmada <identity> Öğesini Kullanma

Daha önce gösterilen Certificate, bağlamada istemci kimlik bilgisi türünü olarak değiştirirseniz, oluşturulan WSDL aşağıdaki kodda gösterildiği gibi kimlik değeri için Base64 serileştirilmiş X.509 sertifikası içerir. Bu, Windows dışındaki tüm istemci kimlik bilgileri türleri için varsayılandır.

Varsayılan hizmet kimliğinin değerini değiştirebilir veya yapılandırmada öğesini kullanarak <identity> veya kodun içindeki kimliği ayarlayarak kimliğin türünü değiştirebilirsiniz. Aşağıdaki yapılandırma kodu, değeriyle contoso.combir etki alanı adı sistemi (DNS) kimliği ayarlar.

Kimliği Program Aracılığıyla Ayarlama

WCF tarafından otomatik olarak belirlendiğinden, hizmetinizin açıkça bir kimlik belirtmesi gerekmez. Ancak WCF, gerekirse bir uç noktada kimlik belirtmenize olanak tanır. Aşağıdaki kod, belirli bir DNS kimliğine sahip yeni bir hizmet uç noktası ekler.

ServiceEndpoint ep = myServiceHost.AddServiceEndpoint(
                typeof(ICalculator),
                new WSHttpBinding(),
                String.Empty);
EndpointAddress myEndpointAdd = new EndpointAddress(new Uri("http://localhost:8088/calc"),
     EndpointIdentity.CreateDnsIdentity("contoso.com"));
ep.Address = myEndpointAdd;
Dim ep As ServiceEndpoint = myServiceHost.AddServiceEndpoint(GetType(ICalculator), New WSHttpBinding(), String.Empty)
Dim myEndpointAdd As New EndpointAddress(New Uri("http://localhost:8088/calc"), EndpointIdentity.CreateDnsIdentity("contoso.com"))
ep.Address = myEndpointAdd

İstemcide Kimlik Belirtme

Tasarım zamanında, bir istemci geliştirici genellikle istemci yapılandırması oluşturmak için ServiceModel Meta Veri Yardımcı Programı Aracı'nı (Svcutil.exe) kullanır. Oluşturulan yapılandırma dosyası (istemci tarafından kullanılmak üzere tasarlanmıştır) sunucunun kimliğini içerir. Örneğin, aşağıdaki kod, önceki örnekte gösterildiği gibi BIR DNS kimliği belirten bir hizmetten oluşturulur. İstemcinin uç nokta kimliği değerinin hizmetinkiyle eşleşdiğini unutmayın. Bu durumda, istemci hizmet için Windows (Kerberos) kimlik bilgilerini aldığında değerinin olmasını contoso.combekler.

Hizmet, Windows yerine istemci kimlik bilgisi türü olarak bir sertifika belirtirse, sertifikanın DNS özelliğinin değeri contoso.comolması beklenir. (Veya DNS özelliği ise null, sertifikanın konu adı contoso.comolmalıdır.)

Kimlik için Belirli Bir Değer Kullanma

Aşağıdaki istemci yapılandırma dosyası, hizmetin kimliğinin belirli bir değer olmasını nasıl beklediğini gösterir. Aşağıdaki örnekte, istemci iki uç noktayla iletişim kurabilir. Birincisi bir sertifika parmak izi, ikincisi ise sertifika RSA anahtarıyla tanımlanır. Başka bir ifadeyle, yalnızca ortak anahtar/özel anahtar çifti içeren ancak güvenilir bir yetkili tarafından verilmeyen bir sertifikadır.

Çalışma Zamanında Kimlik Denetimi

Tasarım zamanında, istemci geliştiricisi sunucunun kimliğini meta verileri aracılığıyla belirler. Çalışma zamanında, hizmette herhangi bir uç nokta çağrılmadan önce kimlik denetimi gerçekleştirilir.

Kimlik değeri, meta veriler tarafından belirtilen kimlik doğrulaması türüne bağlıdır; başka bir deyişle, hizmet için kullanılan kimlik bilgilerinin türü.

Kanal, kimlik doğrulaması için X.509 sertifikalarıyla ileti veya aktarım düzeyi Güvenli Yuva Katmanı (SSL) kullanarak kimlik doğrulaması yapmak üzere yapılandırılmışsa, aşağıdaki kimlik değerleri geçerlidir:

  • DNS. WCF, SSL el sıkışması sırasında sağlanan sertifikanın istemcideki DNS kimliğinde belirtilen değere eşit bir DNS veya CommonName (CN) özniteliği içerdiğinden emin olur. Bu denetimlerin, sunucu sertifikasının geçerliliğini belirlemeye ek olarak yapıldığını unutmayın. WcF varsayılan olarak sunucu sertifikasının güvenilen bir kök yetkili tarafından verildiğini doğrular.

  • Sertifika. SSL el sıkışması sırasında WCF, uzak uç noktanın kimlikte belirtilen tam sertifika değerini sağladığından emin olur.

  • Sertifika Başvurusu. Sertifika ile aynı.

  • RSA. SSL el sıkışması sırasında WCF, uzak uç noktanın kimlikte belirtilen tam RSA anahtarını sağladığından emin olur.

Hizmet kimlik doğrulaması için bir Windows kimlik bilgileriyle ileti veya aktarım düzeyi SSL kullanarak kimlik doğrulaması yapar ve kimlik bilgileriyle anlaşma yaparsa, aşağıdaki kimlik değerleri geçerlidir:

  • DNS. Anlaşma, DNS adının denetlenebilmesi için hizmetin SPN'sini geçirir. SPN biçimindedir host/<dns name>.

  • SPN. Açık bir hizmet SPN'i döndürülür, örneğin, host/myservice.

  • UPN. Hizmet hesabının UPN'sini. UPN biçimindedir username@domain. Örneğin, hizmet bir kullanıcı hesabında çalışırken olabilir username@contoso.com.

Kimliği program aracılığıyla belirtmek (özelliğini kullanarak Identity ) isteğe bağlıdır. Kimlik belirtilmezse ve istemci kimlik bilgisi türü Windows ise, varsayılan değer hizmet uç noktası adresinin ana bilgisayar adı bölümüne "host/" değişmez değeri ön ekli olarak ayarlanmış spn'dir. Kimlik belirtilmezse ve istemci kimlik bilgisi türü bir sertifikaysa, varsayılan değer olur Certificate. Bu, hem ileti hem de aktarım düzeyi güvenlik için geçerlidir.

Kimlik ve Özel Bağlamalar

Bir hizmetin kimliği kullanılan bağlama türüne bağlı olduğundan, özel bağlama oluştururken uygun bir kimliğin kullanıma sunulduğundan emin olun. Örneğin, aşağıdaki kod örneğinde, güvenli konuşma önyükleme bağlamasının kimliği uç nokta üzerindeki bağlamanın kimliğiyle eşleşmediğinden, kullanıma sunulan kimlik güvenlik türüyle uyumlu değildir. Güvenli konuşma bağlaması DNS kimliğini ayarlarken WindowsStreamSecurityBindingElement UPN veya SPN kimliğini ayarlar.

CustomBinding binding = new CustomBinding();
// The following binding exposes a DNS identity.
binding.Elements.Add(SecurityBindingElement.
    CreateSecureConversationBindingElement(
    SecurityBindingElement.
    CreateIssuedTokenForSslBindingElement(
    new IssuedSecurityTokenParameters())));

// The following element requires a UPN or SPN identity.
binding.Elements.Add(new WindowsStreamSecurityBindingElement());
binding.Elements.Add(new TcpTransportBindingElement());
Dim binding As New CustomBinding()
' The following binding exposes a DNS identity.
binding.Elements.Add(SecurityBindingElement.CreateSecureConversationBindingElement(SecurityBindingElement.CreateIssuedTokenForSslBindingElement(New IssuedSecurityTokenParameters())))

' The following element requires a UPN or SPN identity.
binding.Elements.Add(New WindowsStreamSecurityBindingElement())
binding.Elements.Add(New TcpTransportBindingElement())

Özel bağlama için bağlama öğelerini doğru bir şekilde yığınlama hakkında daha fazla bilgi için bkz . Kullanıcı Tanımlı Bağlamalar Oluşturma. ile SecurityBindingElementözel bağlama oluşturma hakkında daha fazla bilgi için bkz . Nasıl yapılır: Belirtilen Kimlik Doğrulama Modu için SecurityBindingElement Oluşturma.

Ayrıca bkz.