Přepsání identity služby pro ověřování
Obvykle není nutné nastavit identitu ve službě, protože výběr typu přihlašovacích údajů klienta určuje typ identity vystavený v metadatech služby. Například následující konfigurační kód používá <element wsHttpBinding> a nastaví clientCredentialType
atribut na Windows.
Následující fragment WSDL (Web Services Description Language) ukazuje identitu pro dříve definovaný koncový bod. V tomto příkladu je služba spuštěná jako služba v místním prostředí pod konkrétním uživatelským účtem (username@contoso.com
), a proto identita hlavního názvu uživatele (UPN) obsahuje název účtu. Hlavní název uživatele (UPN) se také označuje jako přihlašovací jméno uživatele v doméně Windows.
Ukázková aplikace, která demonstruje nastavení identity, najdete v části Ukázka identity služby. Další informace o identitě služby najdete v tématu Identita služby a ověřování.
Ověřování a identita protokolu Kerberos
Pokud je služba nakonfigurovaná tak, aby používala přihlašovací údaje systému Windows, vygeneruje se ve WSDL element identity>,< který obsahuje< element userPrincipalName> nebo< servicePrincipalName.> Pokud je služba spuštěná v rámci LocalSystem
účtu , LocalService
nebo NetworkService
účtu, hlavní název služby (SPN) je ve výchozím nastavení generován ve formě názvu> hostitele, protože tyto účty mají přístup k datům hlavního host/
<názvu služby počítače. Pokud je služba spuštěná pod jiným účtem, Windows Communication Foundation (WCF) vygeneruje hlavní název <uživatele (UPN) ve formě username>@<domainName>
. K tomu dochází, protože k ověření služby vyžaduje, aby klient zadal hlavní název uživatele (UPN) nebo hlavní název služby (SPN).
Pomocí nástroje Setspn můžete také zaregistrovat další hlavní název služby (SPN ) u účtu služby v doméně. Hlavní název služby pak můžete použít jako identitu služby. Další informace o nástroji naleznete v tématu Setspn Přehled.
Poznámka:
Pokud chcete použít typ přihlašovacích údajů systému Windows bez vyjednávání, musí mít uživatelský účet služby přístup k hlavnímu názvu služby, který je zaregistrovaný v doméně služby Active Directory. To lze provést následovně:
Ke spuštění služby použijte účet NetworkService nebo LocalSystem. Vzhledem k tomu, že tyto účty mají přístup k hlavnímu názvu služby (SPN) počítače, který se naváže při připojení počítače k doméně služby Active Directory, wcf automaticky vygeneruje správný prvek SPN uvnitř koncového bodu služby v metadatech služby (WSDL).
Ke spuštění služby použijte libovolný účet domény služby Active Directory. V tomto případě vytvořte hlavní název služby (SPN) pro tento účet domény, který můžete provést pomocí nástroje Setspn.exe. Jakmile vytvoříte hlavní název služby (SPN) pro účet služby, nakonfigurujte WCF tak, aby tento hlavní název služby publikoval do klientů služby prostřednictvím jeho metadat (WSDL). To se provádí nastavením identity koncového bodu pro vystavený koncový bod, a to buď prostřednictvím konfiguračního souboru aplikace nebo kódu.
Další informace o hlavních nástavcích služby, protokolu Kerberos a službě Active Directory naleznete v technickém dodatku Kerberos pro Windows.
Když se hlavní název služby (SPN) nebo hlavní název uživatele (UPN) rovná prázdnému řetězci
Pokud nastavíte hlavní název služby (SPN) nebo hlavní název uživatele (UPN) rovnou prázdnému řetězci, dojde k řadě různých věcí v závislosti na používaném režimu zabezpečení a ověřování:
Pokud používáte zabezpečení na úrovni přenosu, je zvoleno ověřování NT LanMan (NTLM).
Pokud používáte zabezpečení na úrovni zpráv, ověřování může selhat v závislosti na režimu ověřování:
Pokud používáte
spnego
režim aAllowNtlm
atribut je nastavený nafalse
, ověřování selže.Pokud používáte
spnego
režim aAllowNtlm
atribut je nastavený natrue
, ověřování selže, pokud je hlavní název uživatele (UPN) prázdný, ale bude úspěšný, pokud je hlavní název služby prázdný.Pokud používáte přímý protokol Kerberos (označovaný také jako "jeden snímek"), ověřování selže.
Použití elementu <identity> v konfiguraci
Pokud změníte typ přihlašovacích údajů klienta v dříve zobrazené Certificate
vazbě na , generovaný WSDL obsahuje serializovaný certifikát X.509 Base64 pro hodnotu identity, jak je znázorněno v následujícím kódu. Toto je výchozí hodnota pro všechny jiné typy přihlašovacích údajů klienta než Windows.
Hodnotu výchozí identity služby můžete změnit nebo změnit typ identity pomocí elementu <identity>
v konfiguraci nebo nastavením identity v kódu. Následující konfigurační kód nastaví identitu DNS (Domain Name System) s hodnotou contoso.com
.
Programové nastavení identity
Vaše služba nemusí explicitně zadávat identitu, protože WCF ji automaticky určí. WCF však umožňuje v případě potřeby zadat identitu v koncovém bodu. Následující kód přidá nový koncový bod služby s konkrétní identitou DNS.
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