Ukázka identity služby

Tato ukázka identity služby ukazuje, jak nastavit identitu pro službu. V době návrhu může klient načíst identitu pomocí metadat služby a pak v době běhu může klient ověřit identitu služby. Koncept identity služby spočívá v tom, že klientovi umožníte ověření služby před voláním některé z jejích operací, a tím chránit klienta před neověřenými voláními. Při zabezpečeném připojení služba před povolením přístupu ověřuje přihlašovací údaje klienta, ale toto není fokus této ukázky. Podívejte se na ukázky v klientovi , které ukazují ověřování serveru.

Poznámka:

Postup nastavení a pokyny k sestavení pro tuto ukázku najdete na konci tohoto tématu.

Tato ukázka ukazuje následující funkce:

  • Jak pro službu nastavit různé typy identit na různých koncových bodech. Každý typ identity má různé možnosti. Typ identity, který se má použít, závisí na typu přihlašovacích údajů zabezpečení používaných ve vazbě koncového bodu.

  • Identitu lze buď nastavit deklarativní v konfiguraci, nebo imperativní v kódu. Obvykle pro klienta i službu byste měli použít konfiguraci k nastavení identity.

  • Jak nastavit vlastní identitu v klientovi Vlastní identita je obvykle přizpůsobení existujícího typu identity, které klientovi umožňuje zkoumat další informace o deklarací identity poskytnuté v přihlašovacích údajích služby, aby se před voláním služby rozhodl o autorizaci.

    Poznámka:

    Tato ukázka zkontroluje identitu konkrétního certifikátu s názvem identity.com a klíč RSA obsažený v tomto certifikátu. Při použití typů identit Certifikátů a RSA v konfiguraci klienta je snadný způsob, jak tyto hodnoty získat, je zkontrolovat WSDL pro službu, ve které jsou tyto hodnoty serializovány.

Následující ukázkový kód ukazuje, jak nakonfigurovat identitu koncového bodu služby pomocí serveru DNS (Domain Name Server) certifikátu pomocí WSHttpBinding.

//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;

Identitu je možné zadat také v konfiguraci v souboru App.config. Následující příklad ukazuje, jak nastavit identitu hlavního názvu uživatele (UPN) pro koncový bod služby.

<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>

Vlastní identitu lze nastavit v klientovi odvozením z tříd EndpointIdentity a IdentityVerifier tříd. Koncepčně IdentityVerifier lze třídu považovat za klientskou ekvivalent třídy služby AuthorizationManager . Následující příklad kódu ukazuje implementaci OrgEndpointIdentity, která ukládá název organizace, který se shoduje s názvem subjektu certifikátu serveru. Kontrola autorizace názvu organizace se provádí v CheckAccess metodě ve CustomIdentityVerifier třídě.

// 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;
    }
}

Tato ukázka používá certifikát s názvem identity.com, který je ve složce řešení identity specifické pro jazyk.

Nastavení, sestavení a spuštění ukázky

  1. Ujistěte se, že jste pro ukázky windows Communication Foundation provedli jednorázovou instalační proceduru.

  2. Pokud chcete sestavit edici C# nebo Visual Basic .NET řešení, postupujte podle pokynů v části Sestavení ukázek windows Communication Foundation.

  3. Pokud chcete spustit ukázku v konfiguraci s jedním nebo více počítači, postupujte podle pokynů v části Spuštění ukázek windows Communication Foundation.

Spuštění ukázky na stejném počítači

  1. V systému Windows XP nebo Windows Vista importujte soubor certifikátu Identity.pfx do složky Řešení identity do úložiště certifikátů LocalMachine/My (Osobní) pomocí nástroje snap-in konzoly MMC. Tento soubor je chráněný heslem. Během importu se zobrazí výzva k zadání hesla. Zadejte xyz do pole s heslem. Další informace naleznete v tématu Postupy: Zobrazení certifikátů pomocí modulu snap-in konzoly MMC. Po dokončení tohoto příkazu spusťte Setup.bat v příkazovém řádku pro vývojáře pro Visual Studio s oprávněními správce, který zkopíruje tento certifikát do úložiště CurrentUser/Trusted Lidé pro použití v klientovi.

  2. V systému Windows Server 2003 spusťte Setup.bat z ukázkové instalační složky v příkazovém řádku sady Visual Studio 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. Ujistěte se, že po dokončení ukázky odeberete certifikáty spuštěním Cleanup.bat. Jiné ukázky zabezpečení používají stejné certifikáty.

  3. Spusťte Service.exe z adresáře \service\bin. Ujistěte se, že služba označuje, že je připravená, a zobrazí výzvu k ukončení služby stisknutím klávesy <Enter> .

  4. Spusťte Client.exe z adresáře \client\bin nebo stisknutím klávesy F5 v sadě Visual Studio sestavte a spusťte. Aktivita klienta se zobrazí v aplikaci konzoly klienta.

  5. 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

  1. Před sestavením části klienta ukázky nezapomeňte změnit hodnotu adresy koncového bodu služby v souboru Client.cs v CallServiceCustomClientIdentity metodě. Pak sestavte ukázku.

  2. Vytvořte adresář na počítači služby.

  3. Zkopírujte soubory programu služby ze služby\bin do adresáře v počítači služby. Zkopírujte také soubory Setup.bat a Cleanup.bat do počítače služby.

  4. Vytvořte adresář v klientském počítači pro binární soubory klienta.

  5. 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.

  6. Ve službě spusťte setup.bat service příkazový řádek pro vývojáře pro Visual Studio otevřený s oprávněními správce. Spuštění setup.bat s argumentem service 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.

  7. Zkopírujte soubor Service.cer z adresáře služby do klientského adresáře v klientském počítači.

  8. 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. Je potřeba změnit několik instancí.

  9. Na klientovi spusťte ImportServiceCert.bat v příkazovém řádku pro vývojáře pro Visual Studio otevřené s oprávněními správce. Tím se certifikát služby naimportuje ze souboru Service.cer do úložiště CurrentUser – Trusted Lidé.

  10. Na počítači služby spusťte Service.exe z příkazového řádku.

  11. Na klientském počítači spusťte Client.exe z 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.

    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 – Trusted Lidé. 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.