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 szolgáltatásidentitás-minta bemutatja, hogyan állíthatja be egy szolgáltatás identitását. Tervezéskor az ügyfél lekérheti az identitást a szolgáltatás metaadataival, majd futásidőben az ügyfél hitelesítheti a szolgáltatás identitását. A szolgáltatásidentitás fogalma az, hogy lehetővé tegye az ügyfél számára a szolgáltatás hitelesítését, mielőtt bármelyik műveletét meghívja, így védve az ügyfelet a hitelesítés nélküli hívásoktól. Biztonságos kapcsolat esetén a szolgáltatás az ügyfél hitelesítő adatait is hitelesíti a hozzáférés engedélyezése előtt, de nem ez a minta a középpontja. Tekintse meg a Client mintákat, amelyek bemutatják a kiszolgálóhitelesítést.
Megjegyzés:
A minta telepítési eljárása és összeállítási utasításai a témakör végén találhatók.
Ez a minta a következő funkciókat mutatja be:
Hogyan állíthatja be a különböző identitástípusokat a különböző végpontokon egy szolgáltatáshoz. Minden identitástípus különböző képességekkel rendelkezik. A használandó identitás típusa a végpont kötésén használt biztonsági hitelesítő adatok típusától függ.
Az identitás konfigurálásban deklaratív módon vagy kódban is beállítható. Általában az ügyfél és a szolgáltatás esetében is konfigurációval kell beállítania az identitást.
Az egyéni identitás beállítása a kliensen. Az egyéni identitás általában egy meglévő identitástípus testreszabása, amely lehetővé teszi, hogy az ügyfél megvizsgálja a szolgáltatás hitelesítő adataiban megadott egyéb jogcímadatokat, hogy engedélyezési döntéseket hozhassanak a szolgáltatás hívása előtt.
Megjegyzés:
Ez a minta egy adott, identity.com nevű tanúsítvány identitását és a tanúsítványban található RSA-kulcsot ellenőrzi. Ha a tanúsítvány- és RSA-identitástípusokat az ügyfél konfigurációjában használja, egyszerűen lekérheti ezeket az értékeket, ha megvizsgálja annak a szolgáltatásnak a WSDL-ét, amelyben ezek az értékek szerializálva vannak.
Az alábbi mintakód bemutatja, hogyan konfigurálható egy szolgáltatásvégpont identitása egy tanúsítvány tartománynév-kiszolgálójával (DNS-ével) egy WSHttpBinding használatával.
//Create a service endpoint and set its identity to the certificate's DNS
WSHttpBinding wsAnonbinding = new WSHttpBinding (SecurityMode.Message);
// Client are Anonymous to the service
wsAnonbinding.Security.Message.ClientCredentialType = MessageCredentialType.None;
WServiceEndpoint ep = serviceHost.AddServiceEndpoint(typeof(ICalculator),wsAnonbinding, String.Empty);
EndpointAddress epa = new EndpointAddress(dnsrelativeAddress,EndpointIdentity.CreateDnsIdentity("identity.com"));
ep.Address = epa;
Az identitás a App.config fájl konfigurációjában is megadható. Az alábbi példa bemutatja, hogyan állíthatja be az UPN (felhasználónév) identitást egy szolgáltatásvégponthoz.
<endpoint address="upnidentity"
behaviorConfiguration=""
binding="wsHttpBinding"
bindingConfiguration="WSHttpBinding_Windows"
name="WSHttpBinding_ICalculator_Windows"
contract="Microsoft.ServiceModel.Samples.ICalculator">
<!-- Set the UPN identity for this endpoint -->
<identity>
<userPrincipalName value="host\myservice.com" />
</identity >
</endpoint>
Egy egyéni identitás az ügyfélen az EndpointIdentity és az IdentityVerifier osztályokból származtatva állítható be. Elméletileg az IdentityVerifier osztály a szolgáltatás AuthorizationManager osztályának ügyfél-oldali megfelelőjeként tekinthető. Az alábbi példakód egy OrgEndpointIdentity implementációt mutat be, amely a szerver tanúsítványának alanynevében egyező szervezetnevet tárol. A szervezet nevének engedélyezési ellenőrzése az CheckAccess osztály metódusában CustomIdentityVerifier történik.
// This custom EndpointIdentity stores an organization name
public class OrgEndpointIdentity : EndpointIdentity
{
private string orgClaim;
public OrgEndpointIdentity(string orgName)
{
orgClaim = orgName;
}
public string OrganizationClaim
{
get { return orgClaim; }
set { orgClaim = value; }
}
}
//This custom IdentityVerifier uses the supplied OrgEndpointIdentity to
//check that X.509 certificate's distinguished name claim contains
//the organization name e.g. the string value "O=Contoso"
class CustomIdentityVerifier : IdentityVerifier
{
public override bool CheckAccess(EndpointIdentity identity, AuthorizationContext authContext)
{
bool returnvalue = false;
foreach (ClaimSet claimset in authContext.ClaimSets)
{
foreach (Claim claim in claimset)
{
if (claim.ClaimType == "http://schemas.microsoft.com/ws/2005/05/identity/claims/x500distinguishedname")
{
X500DistinguishedName name = (X500DistinguishedName)claim.Resource;
if (name.Name.Contains(((OrgEndpointIdentity)identity).OrganizationClaim))
{
Console.WriteLine("Claim Type: {0}",claim.ClaimType);
Console.WriteLine("Right: {0}", claim.Right);
Console.WriteLine("Resource: {0}",claim.Resource);
Console.WriteLine();
returnvalue = true;
}
}
}
}
return returnvalue;
}
}
Ez a minta egy identity.com nevű tanúsítványt használ, amely a nyelvspecifikus identitáskezelési mappában található.
A példa beállítása, elkészítése és futtatá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 C# vagy Visual Basic .NET kiadásának létrehozásához kövesse Windows Communication Foundation-mintákcímű témakör utasításait.
Ha a mintát egy- vagy számítógépközi konfigurációban szeretné futtatni, kövesse a Windows Communication Foundation-minták futtatásával kapcsolatos utasításokat.
A minta futtatása ugyanazon a számítógépen
Windows XP vagy Windows Vista rendszeren importálja az Identity.pfx tanúsítványfájlt az Identity solution mappában a LocalMachine/My (Személyes) tanúsítványtárolóba az MMC beépülő modul eszközzel. Ez a fájl jelszóval védett. Az importálás során a rendszer jelszót kér. Írja be
xyza jelszó mezőbe. További információért tekintse meg a Tanúsítványok megtekintése az MMC beépülő modullal című témakört. Ha ez megtörtént, futtassa a Setup.bat a Visual Studio fejlesztői parancssorában rendszergazdai jogosultságokkal, amely ezt a tanúsítványt a CurrentUser/Trusted People áruházba másolja az ügyfélen való használatra.Windows Server 2003 rendszeren futtassa a Setup.bat a Visual Studio parancssorában található minta telepítési mappából rendszergazdai jogosultságokkal. 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. Győződjön meg arról, hogy a mintával való munka befejezése után a Cleanup.bat futtatásával eltávolítja a tanúsítványokat. Más biztonsági minták ugyanazokat a tanúsítványokat használják.
Indítsa el a Service.exe a \service\bin könyvtárból. Bizonyosodjon meg róla, hogy a szolgáltatás készen áll, és megjelenik egy üzenet, amely felszólít az <Enter> billentyű lenyomására a szolgáltatás leállításához.
Indítsa el a Client.exe a \client\bin könyvtárból, vagy nyomja le az F5 billentyűt a Visual Studióban a buildeléshez és futtatáshoz. Az ügyféltevékenység megjelenik az ügyfélkonzol-alkalmazásban.
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
A minta ügyféloldali részének létrehozása előtt mindenképpen módosítsa a szolgáltatás végpontcímének értékét a metódus Client.cs fájljában
CallServiceCustomClientIdentity. Ezután hozza létre a mintát.Hozzon létre egy könyvtárat a szolgáltatásszámítógépen.
Másolja a szolgáltatásprogram fájljait a service\bin fájlból a szolgáltatásszámítógép könyvtárába. Másolja a Setup.bat és Cleanup.bat fájlokat is a szolgáltatásszámítógépre.
Hozzon létre egy könyvtárat az ügyfélszámítógépen az ügyfél bináris fájljaihoz.
Másolja az ügyfélprogram fájljait az ügyfélszámítógép ügyfélkönyvtárába. Másolja a Setup.bat, Cleanup.batés ImportServiceCert.bat fájlokat is az ügyfélbe.
A szolgáltatásban futtassa
setup.bat servicea Visual Studio fejlesztői parancssorát, amely rendszergazdai jogosultságokkal van megnyitva. Asetup.batargumentummal futtatottservicelétrehoz egy szolgáltatástanúsítványt a számítógép teljes tartománynevével, és exportálja a szolgáltatástanúsítványt egy Service.cer nevű fájlba.Másolja a Service.cer fájlt a szolgáltatáskönyvtárból az ügyfélszámítógép ügyfélkönyvtárába.
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. Több esetet kell módosítani.
Az ügyfélen futtassa a ImportServiceCert.bat egy rendszergazdai jogosultságokkal megnyitott Visual Studio fejlesztői parancssorában. Ez importálja a szolgáltatástanúsítványt a Service.cer fájlból a CurrentUser – TrustedPeople tárolóba.
A szolgáltatásszámítógépen indítsa el a Service.exe-t a parancssorból.
Az ügyfélszámítógépen indítsa el a Client.exe parancssorbó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.
Megjegyzés:
Ez a szkript nem távolítja el az ügyfél szolgáltatástanúsítványait, amikor a mintát számítógépeken futtatja. Ha windowsos kommunikációs alap (WCF) mintákat futtat, amelyek tanúsítványokat használnak a számítógépeken, mindenképpen törölje a CurrentUser – TrustedPeople áruházban telepített szolgáltatástanúsítványokat. Ehhez használja a következő parancsot:
certmgr -del -r CurrentUser -s TrustedPeople -c -n <Fully Qualified Server Machine Name>Például:certmgr -del -r CurrentUser -s TrustedPeople -c -n server1.contoso.com.