Členství a poskytovatel rolí
Ukázka členství a zprostředkovatele rolí ukazuje, jak může služba používat ASP.NET členství a zprostředkovatele rolí k ověřování a autorizaci klientů.
V této ukázce je klient konzolovou aplikací (.exe) a služba je hostovaná Internetová informační služba (IIS).
Poznámka:
Postup nastavení a pokyny k sestavení pro tuto ukázku najdete na konci tohoto tématu.
Ukázka ukazuje, jak:
- Klient se může ověřit pomocí kombinace uživatelského jména a hesla.
- Server může ověřit přihlašovací údaje klienta vůči poskytovateli členství ASP.NET.
- Server lze ověřit pomocí certifikátu X.509 serveru.
- Server může namapovat ověřeného klienta na roli pomocí poskytovatele ASP.NET role.
- Server může použít
PrincipalPermissionAttribute
k řízení přístupu k určitým metodám, které služba vystavuje.
Poskytovatelé členství a rolí jsou nakonfigurováni tak, aby používaly úložiště zálohované SQL Serverem. V konfiguračním souboru služby se zadává připojovací řetězec a různé možnosti. Zprostředkovatel členství má název SqlMembershipProvider
, zatímco zprostředkovatel role má název SqlRoleProvider
.
<!-- Set the connection string for SQL Server -->
<connectionStrings>
<add name="SqlConn"
connectionString="..." />
</connectionStrings>
<system.web>
<!-- Configure the Sql Membership Provider -->
<membership defaultProvider="SqlMembershipProvider" userIsOnlineTimeWindow="15">
<providers>
<clear />
<add
name="SqlMembershipProvider"
type="System.Web.Security.SqlMembershipProvider"
connectionStringName="SqlConn"
applicationName="MembershipAndRoleProviderSample"
enablePasswordRetrieval="false"
enablePasswordReset="false"
requiresQuestionAndAnswer="false"
requiresUniqueEmail="true"
passwordFormat="Hashed" />
</providers>
</membership>
<!-- Configure the Sql Role Provider -->
<roleManager enabled ="true"
defaultProvider ="SqlRoleProvider" >
<providers>
<add name ="SqlRoleProvider"
type="System.Web.Security.SqlRoleProvider"
connectionStringName="SqlConn"
applicationName="MembershipAndRoleProviderSample"/>
</providers>
</roleManager>
</system.web>
Služba zveřejňuje jeden koncový bod pro komunikaci se službou, která je definována pomocí konfiguračního souboru Web.config. Koncový bod se skládá z adresy, vazby a kontraktu. Vazba se konfiguruje se standardním wsHttpBinding
standardem, který ve výchozím nastavení používá ověřování systému Windows. Tato ukázka nastaví standardní wsHttpBinding
ověřování pomocí uživatelského jména. Toto chování určuje, že certifikát serveru se má použít k ověřování služby. Certifikát serveru musí obsahovat stejnou hodnotu jako SubjectName
atribut v elementu< konfigurace serviceCertificate>.findValue
Kromě toho chování určuje, že ověřování párů uživatelského jména a hesla provádí ASP.NET zprostředkovatel členství a mapování rolí ASP.NET zprostředkovatele role zadáním názvů definovaných pro oba zprostředkovatele.
<system.serviceModel>
<protocolMapping>
<add scheme="http" binding="wsHttpBinding" />
</protocolMapping>
<bindings>
<wsHttpBinding>
<!-- Set up a binding that uses Username as the client credential type -->
<binding>
<security mode ="Message">
<message clientCredentialType ="UserName"/>
</security>
</binding>
</wsHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior>
<!-- Configure role based authorization to use the Role Provider -->
<serviceAuthorization principalPermissionMode ="UseAspNetRoles"
roleProviderName ="SqlRoleProvider" />
<serviceCredentials>
<!-- Configure user name authentication to use the Membership Provider -->
<userNameAuthentication userNamePasswordValidationMode ="MembershipProvider"
membershipProviderName ="SqlMembershipProvider"/>
<!-- Configure the service certificate -->
<serviceCertificate storeLocation ="LocalMachine"
storeName ="My"
x509FindType ="FindBySubjectName"
findValue ="localhost" />
</serviceCredentials>
<!--For debugging purposes set the includeExceptionDetailInFaults attribute to true-->
<serviceDebug includeExceptionDetailInFaults="false" />
<serviceMetadata httpGetEnabled="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
Když spustíte ukázku, klient zavolá různé operace služby pod třemi různými uživatelskými účty: Alice, Bob a Charlie. Požadavky na operace a odpovědi se zobrazí v okně konzoly klienta. Všechny čtyři hovory provedené jako uživatel "Alice" by měly být úspěšné. Uživatel Bob by měl při pokusu o volání metody Divide získat chybu odepření přístupu. Uživatel Charlie by měl při pokusu o volání metody Multipli získat chybu odepření přístupu. Stisknutím klávesy ENTER v okně klienta klienta ukončete klienta.
Nastavení, sestavení a spuštění ukázky
Pokud chcete sestavit edici C# nebo Visual Basic .NET řešení, postupujte podle pokynů v části Spuštění ukázek windows Communication Foundation.
Ujistěte se, že jste nakonfigurovali databázi služby Application Services ASP.NET.
Poznámka:
Pokud používáte SQL Server Express Edition, název vašeho serveru je .\SQLEXPRESS. Tento server by se měl použít při konfiguraci databáze služby Application Services ASP.NET a také v připojovací řetězec Web.config.
Poznámka:
Účet pracovního procesu ASP.NET musí mít oprávnění k databázi vytvořené v tomto kroku. K tomu použijte nástroj sqlcmd nebo SQL Server Management Studio.
Pokud chcete spustit ukázku v konfiguraci jednoho nebo více počítačů, postupujte podle následujících pokynů.
Spuštění ukázky na stejném počítači
Ujistěte se, že cesta obsahuje složku, ve které se nachází Makecert.exe.
Spusťte Setup.bat z ukázkové instalační složky v příkazovém řádku pro vývojáře pro Visual Studio s oprávněními správce. Tím se nainstalují certifikáty služby potřebné pro spuštění ukázky.
Spusťte Client.exe z \client\bin. Aktivita klienta se zobrazí v aplikaci konzoly klienta.
Pokud klient a služba nemůžou komunikovat, podívejte se na tipy pro řešení potíží s ukázkami WCF.
Spuštění ukázky napříč počítači
Vytvořte adresář na počítači služby. Pomocí nástroje pro správu Internetová informační služba (IIS) vytvořte virtuální aplikaci s názvem servicemodelsamples pro tento adresář.
Zkopírujte soubory programu služby z \inetpub\wwwroot\servicemodelsamples do virtuálního adresáře v počítači služby. Ujistěte se, že kopírujete soubory v podadresáři \bin. Zkopírujte také soubory Setup.bat, GetComputerName.vbs a Cleanup.bat do počítače služby.
Vytvořte adresář v klientském počítači pro binární soubory klienta.
Zkopírujte soubory klientského programu do klientského adresáře v klientském počítači. Zkopírujte také soubory Setup.bat, Cleanup.bat a ImportServiceCert.bat do klienta.
Na serveru otevřete příkazový řádek pro vývojáře pro Visual Studio s oprávněními správce a spusťte
setup.bat service
. Spuštěnísetup.bat
s argumentemservice
vytvoří certifikát služby s plně kvalifikovaným názvem domény počítače a exportuje certifikát služby do souboru s názvem Service.cer.Upravte web.config tak, aby odrážel nový název certifikátu (v
findValue
atributu <serviceCertificate>), který je stejný jako plně kvalifikovaný název domény počítače.Zkopírujte soubor Service.cer z adresáře služby do klientského adresáře v klientském počítači.
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.
V klientovi otevřete příkazový řádek pro vývojáře pro Visual Studio s oprávněními správce a spusťte ImportServiceCert.bat. Tím se certifikát služby naimportuje ze souboru Service.cer do úložiště CurrentUser – TrustedPeople.
Na klientském počítači spusťte Client.exe z příkazového řádku. Pokud klient a služba nemůžou komunikovat, podívejte se na tipy pro řešení potíží s ukázkami 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.
Poznámka:
Tento skript při spuštění této ukázky na počítačích neodebere certifikáty služby v klientovi. Pokud jste spustili ukázky wcf (Windows Communication Foundation), které používají certifikáty napříč počítači, nezapomeňte vymazat certifikáty služby nainstalované v úložišti CurrentUser – TrustedPeople. K tomu použijte následující příkaz: certmgr -del -r CurrentUser -s TrustedPeople -c -n <Fully Qualified Server Machine Name>
Například: certmgr -del -r CurrentUser -s TrustedPeople -c -n server1.contoso.com
.
Instalační dávkový soubor
Dávkový soubor Setup.bat, který je součástí této ukázky, umožňuje nakonfigurovat server s relevantními certifikáty 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. Tento dávkový soubor ho ve výchozím nastavení nastaví na localhost.
Certifikát je uložený v úložišti My (Personal) pod umístěním úložiště LocalMachine.
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