Aracılığıyla paylaş


Kimlik doğrulaması için hizmetin kimliğini geçersiz kılma

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. Örneğin, aşağıdaki yapılandırma kodu wsHttpBinding öğesini kullanır <ve özniteliğini clientCredentialType Windows olarak ayarlar.>

Aşağıdaki Web Hizmetleri Açıklama Dili (WSDL) parçası, daha önce tanımlanmış uç noktanın kimliğini gösterir. Bu örnekte, hizmet belirli bir kullanıcı hesabı (username@contoso.com) altında şirket içinde barındırılan bir hizmet olarak çalışır ve bu nedenle kullanıcı asıl adı (UPN) kimliği hesap adını içerir. UPN, Bir Windows etki alanındaki kullanıcı oturum açma adı olarak da bilinir.

Kimlik ayarını gösteren örnek bir uygulama için bkz . Hizmet Kimliği Örneği. Hizmet kimliği hakkında daha fazla bilgi için bkz . Hizmet Kimliği ve Kimlik Doğrulaması.

Kerberos Kimlik Doğrulaması ve Kimlik

Varsayılan olarak, bir hizmet Windows kimlik bilgilerini kullanacak şekilde yapılandırıldığında, <WSDL'de userPrincipalName> veya <servicePrincipalName> öğesini içeren bir< kimlik> öğesi oluşturulur. Hizmet , veya hesabı altında LocalSystemçalışıyorsa, bu hesapların bilgisayarın SPN verilerine erişimi olduğundan, ana bilgisayar adı> biçiminde host/<varsayılan olarak bir hizmet asıl adı (SPN) oluşturulur.NetworkServiceLocalService Hizmet farklı bir hesap altında çalışıyorsa, Windows Communication Foundation (WCF) kullanıcıadı@etkialanıAdı><> biçiminde bir UPN oluşturur.< Bunun nedeni Kerberos kimlik doğrulamasının hizmetin kimliğini doğrulamak için istemciye bir UPN veya SPN sağlanmasını gerektirmesidir.

Ayrıca Setspn aracını kullanarak bir hizmetin hesabıyla bir etki alanına ek bir SPN kaydedebilirsiniz. Ardından hizmetin kimliği olarak SPN'yi kullanabilirsiniz. Araç hakkında daha fazla bilgi için bkz . Setspn'ye Genel Bakış.

Not

Windows kimlik bilgisi türünü anlaşma olmadan kullanmak için, hizmetin kullanıcı hesabının Active Directory etki alanına kayıtlı SPN'ye erişimi olmalıdır. Bunu şu şekillerde yapabilirsiniz:

  • Hizmetinizi çalıştırmak için NetworkService veya LocalSystem hesabını kullanın. Bu hesaplar, makine Active Directory etki alanına katıldığında kurulan makine SPN'sine erişimi olduğundan, WCF hizmetin meta verilerinde (WSDL) hizmetin uç noktası içinde otomatik olarak uygun SPN öğesini oluşturur.

  • Hizmetinizi çalıştırmak için rastgele bir Active Directory etki alanı hesabı kullanın. Bu durumda, bu etki alanı hesabı için Setspn.exe yardımcı programı aracını kullanarak yapabileceğiniz bir SPN oluşturun. Hizmet hesabı için SPN'yi oluşturduktan sonra, WCF'yi bu SPN'yi meta verileri (WSDL) aracılığıyla hizmetin istemcilerinde yayımlayacak şekilde yapılandırın. Bu, bir uygulama yapılandırma dosyası veya kod aracılığıyla kullanıma sunulan uç noktanın uç nokta kimliğini ayarlayarak yapılır.

SPN'ler, Kerberos protokolü ve Active Directory hakkında daha fazla bilgi için bkz . Windows için Kerberos Teknik Eki.

SPN veya UPN Boş Dizeye Eşit olduğunda

SPN veya UPN'yi boş bir dizeye eşit olarak ayarlarsanız, kullanılan güvenlik düzeyine ve kimlik doğrulama moduna bağlı olarak bir dizi farklı şey gerçekleşir:

  • Aktarım düzeyi güvenliği kullanıyorsanız, NT LanMan (NTLM) kimlik doğrulaması seçilir.

  • İleti düzeyi güvenlik kullanıyorsanız, kimlik doğrulama moduna bağlı olarak kimlik doğrulaması başarısız olabilir:

  • Modu kullanıyorsanız spnego ve AllowNtlm özniteliği olarak ayarlandıysa false, kimlik doğrulaması başarısız olur.

  • Modu kullanıyorsanız spnego ve AllowNtlm özniteliği olarak ayarlandıysa true, UPN boşsa kimlik doğrulaması başarısız olur ancak SPN boşsa başarılı olur.

  • Kerberos direct ("tek seferlik" olarak da bilinir) kullanıyorsanız kimlik doğrulaması başarısız olur.

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

Daha önce olarak gösterilen Certificatebağlamada istemci kimlik bilgisi türünü 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

Ayrıca bkz.