Sdílet prostřednictvím


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 , LocalServicenebo 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 a AllowNtlm atribut je nastavený na false, ověřování selže.

  • Pokud používáte spnego režim a AllowNtlm atribut je nastavený na true, 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é Certificatevazbě 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

Viz také