Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
Ez a minta bemutatja, hogyan valósíthat meg egyedi jogkivonat-szolgáltatót. A Windows Communication Foundation (WCF) hitelesítési token szolgáltatója a hitelesítő adatok megadására szolgál a biztonsági infrastruktúra számára. A jogkivonat-szolgáltató általában megvizsgálja a célt, és megfelelő hitelesítő adatokat ad ki, hogy a biztonsági infrastruktúra biztonságossá tegye az üzenetet. A WCF az alapértelmezett Credential Manager-jogkivonat-szolgáltatóval szállít. A WCF egy CardSpace-jogkivonat-szolgáltatóval is rendelkezik. A speciális token szolgáltatók a következő esetekben hasznosak:
Ha olyan hitelesítőadat-tárolóval rendelkezik, amellyel ezek a jogkivonat-szolgáltatók nem működhetnek.
Ha saját egyéni mechanizmust szeretne biztosítani a hitelesítő adatok átalakításához attól a ponttól kezdve, amikor a felhasználó megadja a részleteket, hogy a WCF ügyfél-keretrendszer mikor használja a hitelesítő adatokat.
Ha egyéni jogkivonatot hoz létre.
Ez a minta bemutatja, hogyan hozhat létre egyéni jogkivonat-szolgáltatót, amely a felhasználó bemenetét egy másik formátumba alakítja át.
Összegzésként ez a minta a következőket mutatja be:
Hogyan hitelesíthet egy ügyfél felhasználónév/jelszó pár használatával?
Hogyan állítható be egy ügyfél konfigurációja egyéni jogkivonat-szolgáltatóval?
Hogyan ellenőrizheti a kiszolgáló az ügyfél hitelesítő adatait jelszóval egy olyan egyéni UserNamePasswordValidator jelszóval, amely ellenőrzi, hogy a felhasználónév és a jelszó egyezik-e.
Hogyan hitelesíti a kiszolgálót az ügyfél a kiszolgáló X.509-tanúsítványával.
Ez a minta azt is bemutatja, hogyan érhető el a hívó identitása az egyéni jogkivonat-hitelesítési folyamat után.
A szolgáltatás egyetlen végpontot tesz elérhetővé a szolgáltatással való kommunikációhoz, amely a App.config konfigurációs fájllal van definiálva. A végpont egy címből, egy kötésből és egy szerződésből áll. A kötést egy szabványos wsHttpBinding-val konfigurálták, amely alapértelmezés szerint üzenetbiztonságot használ. Ez a minta beállítja a szabványt wsHttpBinding az ügyfél-felhasználónév-hitelesítés használatára. A szolgáltatás a serviceCredentials viselkedés használatával konfigurálja a szolgáltatási tanúsítványt. A szolgáltatás hitelesítő adatainak viselkedése lehetővé teszi egy szolgáltatástanúsítvány konfigurálását. Az ügyfél szolgáltatástanúsítványt használ a szolgáltatás hitelesítéséhez és az üzenetvédelem biztosításához. Az alábbi konfiguráció a mintabeállítás során telepített localhost-tanúsítványra hivatkozik az alábbi telepítési utasításokban leírtak szerint.
<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>
Az ügyfélvégpont konfigurációja egy konfigurációs névből, a szolgáltatásvégpont abszolút címéből, a kötésből és a szerződésből áll. Az ügyfélkötés a megfelelő Mode és az üzenettel clientCredentialTypevan konfigurálva.
<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>
Az alábbi lépések bemutatják, hogyan fejleszthet egyéni jogkivonat-szolgáltatót, és hogyan integrálhatja azt a WCF biztonsági keretrendszerrel:
Egyéni token-szolgáltató létrehozása.
A minta egy egyéni token szolgáltatót implementál, amely megszerzi a felhasználónevet és a jelszót. A jelszónak meg kell egyeznie ezzel a felhasználónévvel. Ez az egyéni jogkivonat-szolgáltató csak bemutató célokra szolgál, és nem ajánlott a valós üzembe helyezéshez.
A feladat végrehajtásához az egyéni token szolgáltató levezeti az SecurityTokenProvider osztályt, és felülbírálja a GetTokenCore(TimeSpan) metódust. Ez az eljárás létrehoz és visszaad egy új
UserNameSecurityToken-t.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); }Egyéni biztonsági jogkivonat-kezelő készítése.
A SecurityTokenManager meghatározott SecurityTokenProvider létrehozására használják, amelyeket a SecurityTokenRequirement metódusban adnak át. A biztonsági token kezelővel token hitelesítőket és token szerializálókat is létrehozhat, de ezekre ez a példa nem terjed ki. Ebben a példában az egyéni biztonsági jogkivonat-kezelő örökli az osztályt ClientCredentialsSecurityTokenManager , és felülbírálja az
CreateSecurityTokenProvideregyéni felhasználónév-jogkivonat-szolgáltató visszatérési módszerét, amikor az átadott jogkivonat-követelmények azt jelzik, hogy a felhasználónév-szolgáltatót kérik.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); } } }Egyéni ügyfél-hitelesítő adatok írása.
Az ügyfél-hitelesítő adatok osztály az ügyfélproxyhoz konfigurált hitelesítő adatok megjelenítésére szolgál, és létrehoz egy biztonsági jogkivonat-kezelőt, amely a jogkivonat-hitelesítők, a jogkivonat-szolgáltatók és a jogkivonat-szerializálók beszerzésére szolgál.
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); } }Konfigurálja az ügyfelet az egyéni ügyfél hitelesítő adatainak használatára.
Annak érdekében, hogy az ügyfél az egyéni ügyfél hitelesítő adatait használja, a minta törli az alapértelmezett ügyfél-hitelesítő osztályt, és biztosítja az új ügyfél hitelesítőadat-osztályát.
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()); // ... }
A szolgáltatásban a hívó adatainak megjelenítéséhez használja az PrimaryIdentity alábbi kód példában látható módon. A Current tartalmaz követelés információkat az aktuális hívóról.
static void DisplayIdentityInformation()
{
Console.WriteLine("\t\tSecurity context identity : {0}",
ServiceSecurityContext.Current.PrimaryIdentity.Name);
}
A minta futtatásakor a műveleti kérelmek és a válaszok megjelennek az ügyfélkonzol ablakában. Nyomja le az ENTER billentyűt az ügyfélablakban az ügyfél leállításához.
Batch-fájl beállítása
A mintában szereplő Setup.bat kötegfájl lehetővé teszi, hogy a kiszolgálót a megfelelő tanúsítvánnyal konfigurálja egy olyan saját üzemeltetésű alkalmazás futtatásához, amely kiszolgálótanúsítvány-alapú biztonságot igényel. Ezt a kötegfájlt úgy kell módosítani, hogy a számítógépeken is működjön, vagy nem üzemeltetett esetben működjön.
Az alábbiak rövid áttekintést nyújtanak a kötegfájlok különböző szakaszairól, hogy a megfelelő konfigurációban való futtatásukhoz módosíthatók legyenek:
A kiszolgálótanúsítvány létrehozása.
A Setup.bat kötegfájl alábbi sorai hozzák létre a használni kívánt kiszolgálótanúsítványt. A
%SERVER_NAME%változó megadja a kiszolgáló nevét. Módosítsa ezt a változót a saját kiszolgáló nevének megadásához. Ebben a kötegfájlban az alapértelmezett érték a 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 -peA kiszolgálótanúsítvány telepítése az ügyfél megbízható tanúsítványtárolójába:
A Setup.bat kötegfájl alábbi sorai átmásolják a szerver tanúsítványt az ügyfél megbízható személyek tárhelyébe. Erre a lépésre azért van szükség, mert a Makecert.exe által létrehozott tanúsítványokat az ügyfélrendszer nem implicit módon megbízhatónak minősíti. Ha már rendelkezik olyan tanúsítvánnyal, amely egy ügyfél megbízható főtanúsítványában gyökerezik – például egy Microsoft által kiadott tanúsítványban –, nem szükséges az ügyféltanúsítvány-tároló kiszolgálótanúsítvánnyal való feltöltésének ez a lépése.
certmgr.exe -add -r LocalMachine -s My -c -n %SERVER_NAME% -r CurrentUser -s TrustedPeople
Megjegyzés:
A Setup.bat kötegfájl úgy van kialakítva, hogy windowsos SDK parancssorból fusson. Ehhez az MSSDK környezeti változónak arra a könyvtárra kell mutatnia, amelyben az SDK telepítve van. Ez a környezeti változó automatikusan be van állítva egy Windows SDK parancssorban.
A minta beállítása és létrehozása
Győződjön meg arról, hogy elvégezte a Windows Communication Foundation-minták One-Time beállítási eljárását.
A megoldás létrehozásához kövesse a Windows Communication Foundation-minták készítésére vonatkozó utasításokat.
A minta futtatása ugyanazon a számítógépen
Futtassa a Setup.bat a minta telepítési mappából egy rendszergazdai jogosultságokkal megnyitott Visual Studio-parancssorban. Ez telepíti a minta futtatásához szükséges összes tanúsítványt.
Megjegyzés:
A Setup.bat batch fájl úgy lett kialakítva, hogy a Visual Studio parancssorból fusson. A Visual Studio parancssorában beállított PATH környezeti változó a Setup.bat szkript által igényelt végrehajtható fájlokat tartalmazó könyvtárra mutat.
Indítsa el a service.exe a service\bin fájlból.
Indítsa el a Client.exe a \client\bin fájlból. Az ügyféltevékenység megjelenik az ügyfélkonzol-alkalmazásban.
Írja be a felhasználónevet a felhasználónévre vonatkozó parancssorba.
A jelszókérésnél használja ugyanazt a sztringet, amelyet a felhasználónév-kéréshez beírt.
Ha az ügyfél és a szolgáltatás nem tud kommunikálni, tekintse meg a WCF minták hibaelhárítási tippeket a éscímsorok alatt.
A minta futtatása számítógépeken
Hozzon létre egy címtárat a szolgáltatásszámítógépen a szolgáltatás bináris fájljaihoz.
Másolja a szolgáltatásprogram fájljait a szolgáltatásszámítógép szolgáltatáskönyvtárába. Másolja a Setup.bat és Cleanup.bat fájlokat is a szolgáltatásszámítógépre.
Rendelkeznie kell egy olyan kiszolgáló-tanúsítvánnyal, amelynek tárgyneve tartalmazza a számítógép teljesen minősített tartománynevét. A Service.exe.config fájlt frissíteni kell, hogy tükrözze ezt az új tanúsítványnevet. A kiszolgálótanúsítványt a Setup.bat kötegfájl módosításával hozhatja létre. Vegye figyelembe, hogy a setup.bat fájlt rendszergazdai jogosultságokkal megnyitott Fejlesztői parancssorból kell futtatni. A
%SERVER_NAME%változót annak a számítógépnek a teljesen minősített gazdagépnevére kell beállítania, amelyet a szolgáltatás üzemeltetéséhez használnak.Másolja a kiszolgálótanúsítványt az ügyfél CurrentUser-TrustedPeople tárolójába. Ezt nem kell megtennie, ha a kiszolgálótanúsítványt egy ügyfél megbízható kiállítója állítja ki.
A szolgáltatásszámítógép Service.exe.config fájljában módosítsa az alapcím értékét úgy, hogy a localhost helyett egy teljesen minősített számítógépnevet adjon meg.
A szolgáltatás számítógépén futtassa a service.exe parancsot a parancssorban.
Másolja az ügyfélprogram fájljait a \client\bin\ mappából a nyelvspecifikus mappából az ügyfélszámítógépre.
Az ügyfélszámítógép Client.exe.config fájljában módosítsa a végpont címértékét úgy, hogy az megfeleljen a szolgáltatás új címének.
Az ügyfélszámítógépen indítsa el
Client.exea parancssori ablakból.Ha az ügyfél és a szolgáltatás nem tud kommunikálni, tekintse meg a WCF minták hibaelhárítási tippeket a éscímsorok alatt.
A minta utáni tisztítás
- A minta végrehajtása után futtassa le a mintamappában lévő Cleanup.bat-t.