Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tato ukázka ukazuje, jak implementovat vlastního zprostředkovatele tokenu. Zprostředkovatel tokenu ve Windows Communication Foundation (WCF) slouží k poskytování přihlašovacích údajů infrastruktuře zabezpečení. Zprostředkovatel tokenu obecně zkoumá cíl a vydává příslušné přihlašovací údaje, aby infrastruktura zabezpečení zprávu zabezpečil. WCF se dodává s výchozím poskytovatelem tokenů Správce přihlašovacích údajů. WCF se také dodává se zprostředkovatelem tokenu CardSpace. Vlastní zprostředkovatelé tokenů jsou užitečné v následujících případech:
Pokud máte úložiště přihlašovacích údajů, se kterým tito poskytovatelé tokenů nemůžou pracovat.
Pokud chcete poskytnout vlastní mechanismus pro transformaci přihlašovacích údajů z bodu, když uživatel poskytne podrobnosti o tom, kdy klientská architektura WCF používá přihlašovací údaje.
Pokud vytváříte vlastní token.
Tato ukázka ukazuje, jak vytvořit vlastního zprostředkovatele tokenu, který transformuje vstup od uživatele do jiného formátu.
Tento příklad ukazuje následující souhrn:
Jak se klient může ověřit pomocí páru uživatelského jména a hesla.
Jak lze klienta nakonfigurovat s vlastním poskytovatelem tokenů.
Jak může server ověřit přihlašovací údaje klienta pomocí hesla s vlastním UserNamePasswordValidator ověřením, že uživatelské jméno a heslo odpovídají.
Způsob ověření serveru klientem pomocí certifikátu X.509 serveru.
Tato ukázka také ukazuje, jak je identita volajícího přístupná po procesu ověřování vlastního tokenu.
Služba zveřejňuje jeden koncový bod pro komunikaci se službou definovanou pomocí konfiguračního souboru App.config. Koncový bod se skládá z adresy, vazby a kontraktu. Vazba je nakonfigurována se standardním wsHttpBinding
, který ve výchozím nastavení používá zabezpečení zpráv. Tato ukázka nastaví standard wsHttpBinding
tak, aby používal ověřování uživatelských jmen klientů. Služba také nakonfiguruje certifikát služby pomocí chování serviceCredentials. Chování serviceCredentials umožňuje nakonfigurovat certifikát služby. Certifikát služby používá klient k ověření služby a poskytnutí ochrany zpráv. Následující konfigurace odkazuje na certifikát localhost nainstalovaný během ukázkové instalace, jak je popsáno v následujících pokynech k instalaci.
<system.serviceModel>
<services>
<service
name="Microsoft.ServiceModel.Samples.CalculatorService"
behaviorConfiguration="CalculatorServiceBehavior">
<host>
<baseAddresses>
<!-- configure base address provided by host -->
<add baseAddress ="http://localhost:8000/servicemodelsamples/service"/>
</baseAddresses>
</host>
<!-- use base address provided by host -->
<endpoint address=""
binding="wsHttpBinding"
bindingConfiguration="Binding1"
contract="Microsoft.ServiceModel.Samples.ICalculator" />
</service>
</services>
<bindings>
<wsHttpBinding>
<binding name="Binding1">
<security mode="Message">
<message clientCredentialType="UserName" />
</security>
</binding>
</wsHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="CalculatorServiceBehavior">
<serviceDebug includeExceptionDetailInFaults="False" />
<!--
The serviceCredentials behavior allows one to define a service certificate.
A service certificate is used by a client to authenticate the service and provide message protection.
This configuration references the "localhost" certificate installed during the setup instructions.
-->
<serviceCredentials>
<serviceCertificate findValue="localhost" storeLocation="LocalMachine" storeName="My" x509FindType="FindBySubjectName" />
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
Konfigurace koncového bodu klienta se skládá z názvu konfigurace, absolutní adresy koncového bodu služby, vazby a kontraktu. Vazba klienta je nakonfigurována s příslušnou Mode
zprávou a zprávou clientCredentialType
.
<system.serviceModel>
<client>
<endpoint name=""
address="http://localhost:8000/servicemodelsamples/service"
binding="wsHttpBinding"
bindingConfiguration="Binding1"
contract="Microsoft.ServiceModel.Samples.ICalculator">
</endpoint>
</client>
<bindings>
<wsHttpBinding>
<binding name="Binding1">
<security mode="Message">
<message clientCredentialType="UserName" />
</security>
</binding>
</wsHttpBinding>
</bindings>
</system.serviceModel>
Následující kroky ukazují, jak vytvořit vlastního zprostředkovatele tokenu a integrovat ho s architekturou zabezpečení WCF:
Napište vlastního zprostředkovatele tokenu.
Ukázka implementuje vlastního zprostředkovatele tokenu, který získá uživatelské jméno a heslo. Heslo musí odpovídat tomuto uživatelskému jménu. Tento vlastní poskytovatel tokenu slouží pouze pro demonstrační účely a nedoporučuje se pro skutečné nasazení.
K provedení této úlohy odvozuje vlastní zprostředkovatel tokenů SecurityTokenProvider třídu a přepíše metodu GetTokenCore(TimeSpan) . Tato metoda vytvoří a vrátí novou
UserNameSecurityToken
.protected override SecurityToken GetTokenCore(TimeSpan timeout) { // obtain username and password from the user using console window string username = GetUserName(); string password = GetPassword(); Console.WriteLine("username: {0}", username); // return new UserNameSecurityToken containing information obtained from user return new UserNameSecurityToken(username, password); }
Napište vlastního správce tokenů zabezpečení.
Slouží SecurityTokenManager k vytvoření SecurityTokenProvider pro konkrétní SecurityTokenRequirement , který je předán v
CreateSecurityTokenProvider
metodě. Správce tokenů zabezpečení se také používá k vytváření ověřovacích tokenů a serializátoru tokenů, ale ty nejsou součástí této ukázky. V této ukázce vlastní správce tokenů zabezpečení dědí z ClientCredentialsSecurityTokenManager třídy a přepíše metoduCreateSecurityTokenProvider
pro vrácení vlastního zprostředkovatele tokenu uživatelského jména, když předané požadavky na token indikují, že je požadován zprostředkovatel uživatelského jména.public class MyUserNameSecurityTokenManager : ClientCredentialsSecurityTokenManager { MyUserNameClientCredentials myUserNameClientCredentials; public MyUserNameSecurityTokenManager(MyUserNameClientCredentials myUserNameClientCredentials) : base(myUserNameClientCredentials) { this.myUserNameClientCredentials = myUserNameClientCredentials; } public override SecurityTokenProvider CreateSecurityTokenProvider(SecurityTokenRequirement tokenRequirement) { // if token requirement matches username token return custom username token provider // otherwise use base implementation if (tokenRequirement.TokenType == SecurityTokenTypes.UserName) { return new MyUserNameTokenProvider(); } else { return base.CreateSecurityTokenProvider(tokenRequirement); } } }
Napište vlastní přihlašovací údaje klienta.
Třída přihlašovacích údajů klienta slouží k reprezentaci přihlašovacích údajů nakonfigurovaných pro proxy klienta a vytvoří správce tokenů zabezpečení, který slouží k získání ověřovacích mechanismů tokenů, zprostředkovatelů tokenů a serializátoru tokenů.
public class MyUserNameClientCredentials : ClientCredentials { public MyUserNameClientCredentials() : base() { } protected override ClientCredentials CloneCore() { return new MyUserNameClientCredentials(); } public override SecurityTokenManager CreateSecurityTokenManager() { // return custom security token manager return new MyUserNameSecurityTokenManager(this); } }
Nakonfigurujte klienta tak, aby používal vlastní přihlašovací údaje klienta.
Aby klient mohl používat vlastní přihlašovací údaje klienta, ukázka odstraní výchozí třídu přihlašovacích údajů klienta a dodává novou třídu přihlašovacích údajů klienta.
static void Main() { // ... // Create a client with given client endpoint configuration CalculatorClient client = new CalculatorClient(); // set new credentials client.ChannelFactory.Endpoint.Behaviors.Remove(typeof(ClientCredentials)); client.ChannelFactory.Endpoint.Behaviors.Add(new MyUserNameClientCredentials()); // ... }
Pokud chcete zobrazit informace volajícího, použijte PrimaryIdentity ve službě informace, jak je znázorněno v následujícím příkladu kódu. Obsahuje Current informace o deklarací identity o aktuálním volajícím.
static void DisplayIdentityInformation()
{
Console.WriteLine("\t\tSecurity context identity : {0}",
ServiceSecurityContext.Current.PrimaryIdentity.Name);
}
Při spuštění ukázky se požadavky na operace a odpovědi zobrazí v okně konzoly klienta. Stisknutím klávesy ENTER v okně klienta klienta ukončete klienta.
Nastavení dávkového souboru
Dávkový soubor Setup.bat, který je součástí této ukázky, umožňuje nakonfigurovat server s příslušným certifikátem pro spuštění aplikace v místním prostředí, která vyžaduje zabezpečení založené na certifikátech serveru. Tento dávkový soubor musí být upraven tak, aby fungoval v počítačích nebo aby fungoval v případě, že není hostovaný.
Níže najdete stručný přehled různých částí dávkových souborů, aby je bylo možné upravit tak, aby běžely v příslušné konfiguraci:
Vytvoření certifikátu serveru
Následující řádky z dávkového souboru Setup.bat vytvoří certifikát serveru, který se má použít. Proměnná
%SERVER_NAME%
určuje název serveru. Změňte tuto proměnnou tak, aby byla zadána vlastní název serveru. Výchozí hodnota v tomto dávkovém souboru je localhost.echo ************ echo Server cert setup starting echo %SERVER_NAME% echo ************ echo making server cert echo ************ makecert.exe -sr LocalMachine -ss MY -a sha1 -n CN=%SERVER_NAME% -sky exchange -pe
Instalace certifikátu serveru do důvěryhodného úložiště certifikátů klienta:
Následující řádky v dávkovém souboru Setup.bat zkopírují certifikát serveru do úložiště důvěryhodných osob klienta. Tento krok je povinný, protože certifikáty generované Makecert.exe nejsou implicitně důvěryhodné klientským systémem. Pokud už máte certifikát, který je kořenový v kořenovém certifikátu klienta ( například certifikát vydaný Microsoftem), tento krok naplnění úložiště klientských certifikátů certifikátem pomocí certifikátu serveru se nevyžaduje.
certmgr.exe -add -r LocalMachine -s My -c -n %SERVER_NAME% -r CurrentUser -s TrustedPeople
Poznámka:
Dávkový soubor Setup.bat je navržený tak, aby běžel z příkazového řádku sady Windows SDK. Vyžaduje, aby proměnná prostředí MSSDK odkazovala na adresář, ve kterém je sada SDK nainstalovaná. Tato proměnná prostředí se automaticky nastaví v příkazovém řádku sady Windows SDK.
Nastavení a sestavení ukázky
Ujistěte se, že jste pro ukázky windows Communication Foundation provedli jednorázovou instalační proceduru.
Pokud chcete sestavit řešení, postupujte podle pokynů v části Sestavení ukázek Windows Communication Foundation.
Spuštění ukázky na stejném počítači
Spusťte Setup.bat z ukázkové instalační složky v příkazovém řádku sady Visual Studio otevřeného s oprávněními správce. Tím se nainstalují všechny certifikáty potřebné pro spuštění ukázky.
Poznámka:
Dávkový soubor Setup.bat je navržený tak, aby běžel z příkazového řádku sady Visual Studio. Proměnná prostředí PATH nastavená v příkazovém řádku sady Visual Studio odkazuje na adresář, který obsahuje spustitelné soubory vyžadované skriptem Setup.bat.
Spusťte service.exe ze služby\bin.
Spusťte Client.exe z \client\bin. Aktivita klienta se zobrazí v aplikaci konzoly klienta.
Do příkazového řádku uživatelského jména zadejte uživatelské jméno.
Na příkazovém řádku hesla použijte stejný řetězec, který byl zadán pro výzvu k uživatelskému jménu.
Pokud klient a služba nemůžou komunikovat, přečtěte si téma Řešení potíží Tipy pro ukázky WCF.
Spuštění ukázky napříč počítači
Vytvořte adresář na počítači služby pro binární soubory služby.
Zkopírujte soubory programu služby do adresáře služby v počítači služby. Zkopírujte také soubory Setup.bat a Cleanup.bat do počítače služby.
Musíte mít certifikát serveru s názvem subjektu, který obsahuje plně kvalifikovaný název domény počítače. Soubor Service.exe.config musí být aktualizován tak, aby odrážel tento nový název certifikátu. Certifikát serveru můžete vytvořit úpravou dávkového souboru Setup.bat. Všimněte si, že soubor setup.bat se musí spustit z příkazového řádku pro vývojáře pro Visual Studio otevřené s oprávněními správce. Proměnnou musíte nastavit
%SERVER_NAME%
na plně kvalifikovaný název hostitele počítače, který se používá k hostování služby.Zkopírujte certifikát serveru do úložiště CurrentUser-Trusted Lidé klienta. Pokud certifikát serveru vydá důvěryhodný vystavitel klienta, nemusíte to udělat.
V souboru Service.exe.config v počítači služby změňte hodnotu základní adresy tak, aby místo localhost zadal plně kvalifikovaný název počítače.
Na počítači služby spusťte service.exe z příkazového řádku.
Zkopírujte soubory klientského programu ze složky \client\bin\ ve složce specifické pro jazyk do klientského počítače.
V souboru Client.exe.config na klientském počítači změňte hodnotu adresy koncového bodu tak, aby odpovídala nové adrese vaší služby.
Na klientském počítači spusťte
Client.exe
okno příkazového řádku.Pokud klient a služba nemůžou komunikovat, přečtěte si téma Řešení potíží Tipy pro ukázky WCF.
Vyčištění po ukázce
- Po dokončení spuštění ukázky spusťte Cleanup.bat ve složce s ukázkami.