Sdílet prostřednictvím


Vytvoření vlastní metody ověřování pro službu AD FS ve Windows Serveru

Tento názorný postup obsahuje pokyny pro implementaci vlastní metody ověřování pro službu AD FS ve Windows Serveru 2012 R2. Další informace naleznete v tématu Další metody ověřování.

Warning

Příklad, který zde můžete sestavit, je pouze pro vzdělávací účely.  Tyto pokyny jsou určené pro co nejjednodušší možnou implementaci, aby zpřístupnily požadované prvky modelu.  Bez back-endového ověřování, zpracování chyb a konfiguračních dat.

Nastavení vývojového prostředí

Tento návod používá Visual Studio 2012. Projekt lze sestavit pomocí libovolného vývojového prostředí, které může vytvořit třídu .NET pro Windows. Projekt musí cílit na .NET 4.5, protože metody BeginAuthentication a TryEndAuthentication používají typ System.Security.Claims.Claim, součást rozhraní .NET Framework verze 4.5. Pro projekt je vyžadován jeden odkaz:

Referenční knihovna DLL Kde to najít Požadováno pro
Microsoft.IdentityServer.Web.dll Knihovna DLL se nachází v %windir%\ADFS na serveru s Windows Serverem 2012 R2, na kterém je služba AD FS nainstalovaná.

Tento soubor DLL musí být zkopírován do vývojového počítače a v projektu vytvořen explicitní odkaz.

Typy rozhraní včetně IAuthenticationContext, IProofData

Vytvoření zprostředkovatele

  1. V sadě Visual Studio 2012: Zvolte Soubor>Nový projekt>...

  2. Vyberte knihovnu tříd a ujistěte se, že cílíte na .NET 4.5.

    Snímek obrazovky s dialogovým oknem Nový projekt s vybranou možností Knihovna tříd

  3. Vytvořte kopii Microsoft.IdentityServer.Web.dll z %windir%\ADFS na serveru s Windows Serverem 2012 R2, na kterém je služba AD FS nainstalovaná, a vložte ji do složky Projectu na vývojovém počítači.

  4. V Průzkumníku řešení klikněte pravým tlačítkem na Odkazy a Přidat odkaz...

  5. Přejděte do místní kopie Microsoft.IdentityServer.Web.dll a přidejte...

  6. Kliknutím na tlačítko OK potvrďte nový odkaz:

    Snímek obrazovky dialogového okna Správce odkazů ukazující vybranou možnost Microsoft.IdentityServer.Web.dll

    Teď byste měli být nastaveni tak, abyste vyřešili všechny typy požadované pro poskytovatele.

  7. Přidejte do projektu novou třídu (klikněte pravým tlačítkem na projekt, přidat... Třída...) a pojmenujte ho jako MyAdapter, jak je znázorněno níže:

    Snímek obrazovky s dialogovým oknem Přidat novou položku s vybranou možností Třída.

  8. V novém souboru MyAdapter.cs nahraďte stávající kód následujícím kódem:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Globalization;
    using System.IO;
    using System.Net;
    using System.Xml.Serialization;
    using Microsoft.IdentityServer.Web.Authentication.External;
    using Claim = System.Security.Claims.Claim;
    
    namespace MFAadapter
    {
        class MyAdapter : IAuthenticationAdapter
        {
            public IAuthenticationAdapterMetadata Metadata
            {
                //get { return new <instance of IAuthenticationAdapterMetadata derived class>; }
            }
    
            public IAdapterPresentation BeginAuthentication(Claim identityClaim, HttpListenerRequest request, IAuthenticationContext authContext)
            {
                //return new instance of IAdapterPresentationForm derived class
            }
    
            public bool IsAvailableForUser(Claim identityClaim, IAuthenticationContext authContext)
            {
                return true; //its all available for now
            }
    
            public void OnAuthenticationPipelineLoad(IAuthenticationMethodConfigData configData)
            {
                //this is where AD FS passes us the config data, if such data was supplied at registration of the adapter
            }
    
            public void OnAuthenticationPipelineUnload()
            {
    
            }
    
            public IAdapterPresentation OnError(HttpListenerRequest request, ExternalAuthenticationException ex)
            {
                //return new instance of IAdapterPresentationForm derived class
            }
    
            public IAdapterPresentation TryEndAuthentication(IAuthenticationContext authContext, IProofData proofData, HttpListenerRequest request, out Claim[] outgoingClaims)
            {
                //return new instance of IAdapterPresentationForm derived class
            }
    
        }
    }
    
  9. Ještě nejsme připraveni stavět... zbývají ještě dvě další rozhraní.

    Přidejte do projektu dvě další třídy: jedna je pro metadata a druhá pro formulář prezentace. Můžete je přidat do stejného souboru jako třídu výše.

    class MyMetadata : IAuthenticationAdapterMetadata
    {
    
    }
    
    class MyPresentationForm : IAdapterPresentationForm
    {
    
    }
    
  10. V dalším kroku můžete přidat požadované členy pro každý. Nejprve metadata (s užitečnými komentáři přímo v textu)

    class MyMetadata : IAuthenticationAdapterMetadata
    {
        //Returns the name of the provider that will be shown in the AD FS management UI (not visible to end users)
        public string AdminName
        {
            get { return "My Example MFA Adapter"; }
        }
    
        //Returns an array of strings containing URIs indicating the set of authentication methods implemented by the adapter 
        /// AD FS requires that, if authentication is successful, the method actually employed will be returned by the
        /// final call to TryEndAuthentication(). If no authentication method is returned, or the method returned is not
        /// one of the methods listed in this property, the authentication attempt will fail.
        public virtual string[] AuthenticationMethods 
        {
            get { return new[] { "http://example.com/myauthenticationmethod1", "http://example.com/myauthenticationmethod2" }; }
        }
    
        /// Returns an array indicating which languages are supported by the provider. AD FS uses this information
        /// to determine the best language\locale to display to the user.
        public int[] AvailableLcids
        {
            get
            {
                return new[] { new CultureInfo("en-us").LCID, new CultureInfo("fr").LCID};
            }
        }
    
        /// Returns a Dictionary containing the set of localized friendly names of the provider, indexed by lcid. 
        /// These Friendly Names are displayed in the "choice page" offered to the user when there is more than 
        /// one secondary authentication provider available.
        public Dictionary<int, string> FriendlyNames
        {
            get
            {
                Dictionary<int, string> _friendlyNames = new Dictionary<int, string>();
                _friendlyNames.Add(new CultureInfo("en-us").LCID, "Friendly name of My Example MFA Adapter for end users (en)");
                _friendlyNames.Add(new CultureInfo("fr").LCID, "Friendly name translated to fr locale");
                return _friendlyNames;
            }
        }
    
        /// Returns a Dictionary containing the set of localized descriptions (hover over help) of the provider, indexed by lcid. 
        /// These descriptions are displayed in the "choice page" offered to the user when there is more than one 
        /// secondary authentication provider available.
        public Dictionary<int, string> Descriptions
        {
            get 
            {
                Dictionary<int, string> _descriptions = new Dictionary<int, string>();
                _descriptions.Add(new CultureInfo("en-us").LCID, "Description of My Example MFA Adapter for end users (en)");
                _descriptions.Add(new CultureInfo("fr").LCID, "Description translated to fr locale");
                return _descriptions; 
            }
        }
    
        /// Returns an array indicating the type of claim that the adapter uses to identify the user being authenticated.
        /// Note that although the property is an array, only the first element is currently used.
        /// MUST BE ONE OF THE FOLLOWING
        /// "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname"
        /// "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn"
        /// "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress"
        /// "http://schemas.microsoft.com/ws/2008/06/identity/claims/primarysid"
        public string[] IdentityClaims
        {
            get { return new[] { "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn" }; }
        }
    
        //All external providers must return a value of "true" for this property.
        public bool RequiresIdentity
        {
            get { return true; }
        }
    }
    

    Teď byste měli být schopni F12 (pravým tlačítkem myši – Přejít na definici) v IAuthenticationAdapter zobrazit sadu požadovaných členů rozhraní.

    Dále můžete provést implementaci těchto.

  11. Nahraďte celý obsah vaší třídy následujícím kódem:

    namespace MFAadapter
    {
        class MyAdapter : IAuthenticationAdapter
        {
            public IAuthenticationAdapterMetadata Metadata
            {
                //get { return new <instance of IAuthenticationAdapterMetadata derived class>; }
            }
    
            public IAdapterPresentation BeginAuthentication(Claim identityClaim, HttpListenerRequest request, IAuthenticationContext authContext)
            {
                //return new instance of IAdapterPresentationForm derived class
            }
    
            public bool IsAvailableForUser(Claim identityClaim, IAuthenticationContext authContext)
            {
                return true; //its all available for now
            }
    
            public void OnAuthenticationPipelineLoad(IAuthenticationMethodConfigData configData)
            {
                //this is where AD FS passes us the config data, if such data was supplied at registration of the adapter
            }
    
            public void OnAuthenticationPipelineUnload()
            {
    
            }
    
            public IAdapterPresentation OnError(HttpListenerRequest request, ExternalAuthenticationException ex)
            {
                //return new instance of IAdapterPresentationForm derived class
            }
    
            public IAdapterPresentation TryEndAuthentication(IAuthenticationContext authContext, IProofData proofData, HttpListenerRequest request, out Claim[] outgoingClaims)
            {
                //return new instance of IAdapterPresentationForm derived class
            }
        }
    }
    

    V dalším kroku bude formulář prezentace:

    class MyPresentationForm : IAdapterPresentationForm
    {
        /// Returns the HTML Form fragment that contains the adapter user interface. This data will be included in the web page that is presented
        /// to the cient.
        public string GetFormHtml(int lcid)
        {
            string htmlTemplate = Resources.FormPageHtml; //todo we will implement this
            return htmlTemplate;
        }
    
        /// Return any external resources, ie references to libraries etc., that should be included in
        /// the HEAD section of the presentation form html.
        public string GetFormPreRenderHtml(int lcid)
        {
            return null;
        }
    
        //returns the title string for the web page which presents the HTML form content to the end user
        public string GetPageTitle(int lcid)
        {
            return "MFA Adapter";
        }
    }
    
  12. Všimněte si "todo" pro Resources.FormPageHtml element výše. Můžete ho opravit za minutu, ale nejprve přidáme poslední požadované návratové příkazy založené na nově implementovaných typech do vaší počáteční třídy MyAdapter. Uděláte to tak, že do stávající implementace IAuthenticationAdapter přidáte následující:

    class MyAdapter : IAuthenticationAdapter
    {
        public IAuthenticationAdapterMetadata Metadata
        {
            //get { return new <instance of IAuthenticationAdapterMetadata derived class>; }
            get { return new MyMetadata(); }
        }
    
        public IAdapterPresentation BeginAuthentication(Claim identityClaim, HttpListenerRequest request, IAuthenticationContext authContext)
        {
            //return new instance of IAdapterPresentationForm derived class
            return new MyPresentationForm();
        }
    
        public bool IsAvailableForUser(Claim identityClaim, IAuthenticationContext authContext)
        {
            return true; //its all available for now
        }
    
        public void OnAuthenticationPipelineLoad(IAuthenticationMethodConfigData configData)
        {
            //this is where AD FS passes us the config data, if such data was supplied at registration of the adapter
        }
    
        public void OnAuthenticationPipelineUnload()
        {
    
        }
    
        public IAdapterPresentation OnError(HttpListenerRequest request, ExternalAuthenticationException ex)
        {
            //return new instance of IAdapterPresentationForm derived class
            return new MyPresentationForm();
        }
    
        public IAdapterPresentation TryEndAuthentication(IAuthenticationContext authContext, IProofData proofData, HttpListenerRequest request, out Claim[] outgoingClaims)
        {
            //return new instance of IAdapterPresentationForm derived class
            outgoingClaims = new Claim[0];
            return new MyPresentationForm();
        }
    
    }
    
  13. Nyní k souboru zdrojů obsahujícímu fragment HTML. Ve složce projektu vytvořte nový textový soubor s následujícím obsahem:

    <div id="loginArea">
        <form method="post" id="loginForm" >
            <!-- These inputs are required by the presentation framework. Do not modify or remove -->
            <input id="authMethod" type="hidden" name="AuthMethod" value="%AuthMethod%" />
            <input id="context" type="hidden" name="Context" value="%Context%" />
            <!-- End inputs are required by the presentation framework. -->
            <p id="pageIntroductionText">This content is provided by the MFA sample adapter. Challenge inputs should be presented below.</p>
            <label for="challengeQuestionInput" class="block">Question text</label>
            <input id="challengeQuestionInput" name="ChallengeQuestionAnswer" type="text" value="" class="text" placeholder="Answer placeholder" />
            <div id="submissionArea" class="submitMargin">
                <input id="submitButton" type="submit" name="Submit" value="Submit" onclick="return AuthPage.submitAnswer()"/>
            </div>
        </form>
        <div id="intro" class="groupMargin">
            <p id="supportEmail">Support information</p>
        </div>
        <script type="text/javascript" language="JavaScript">
            //<![CDATA[
            function AuthPage() { }
            AuthPage.submitAnswer = function () { return true; };
            //]]>
        </script>
    </div>
    
  14. Pak vyberte soubor >, pojmenujte soubor Resources a klikněte na Přidat:

    Snímek obrazovky s dialogovým oknem Přidat Novou Položku, kde je zobrazeno vybraný soubor prostředků

  15. Pak v souboru Resources.resx zvolte Přidat prostředek... Přidejte existující soubor. Přejděte do textového souboru (obsahujícího fragment html), který jste uložili výše.

    Ujistěte se, že kód GetFormHtml správně přeloží název nového prostředku předponou názvu souboru prostředků (souboru .resx), za kterou následuje název samotného prostředku:

    public string GetFormHtml(int lcid)
    {
        string htmlTemplate = Resources.MfaFormHtml; //Resxfilename.resourcename
        return htmlTemplate;
    }
    

Teď byste měli být schopni sestavovat.

Sestavení adaptéru

Adaptér by měl být integrovaný do sestavení .NET se silným názvem, které lze nainstalovat do GAC ve Windows. Pokud toho chcete dosáhnout v projektu sady Visual Studio, proveďte následující kroky:

  1. V Průzkumníku řešení klikněte pravým tlačítkem na název projektu a klikněte na Vlastnosti.

  2. Na kartě Podepsání zaškrtněte políčko Podepsat sestavení a zvolte <Nový...> v části Zvolte soubor silného názvu: Zadejte název a heslo klíče a klikněte na OK. Pak se ujistěte, že je zaškrtnuto podepsání sestavení a nezaškrtnuto pouze opožděné podepsání. Stránka Podepisování vlastností by měla vypadat takto:

    sestavení zprostředkovatele

  3. Pak sestavte řešení.

Nasazení adaptéru na testovací počítač služby AD FS

Než může služba AD FS vyvolat externího poskytovatele, musí být v systému zaregistrovaná. Poskytovatelé adaptérů musí poskytnout instalační program, který provede nezbytné instalační akce, včetně instalace v GAC, a instalační program musí podporovat registraci ve službě AD FS. Pokud to není hotové, musí správce spustit následující kroky Windows PowerShellu. Tyto kroky je možné použít v laboratoři k umožnění testování a ladění.

Příprava testovacího počítače služby AD FS

Zkopírujte soubory a přidejte je do GAC.

  1. Ujistěte se, že máte počítač nebo virtuální počítač s Windows Serverem 2012 R2.

  2. Nainstalujte službu role AD FS a nakonfigurujte farmu s alespoň jedním uzlem.

    Podrobný postup nastavení federačního serveru v testovacím prostředí najdete v průvodci nasazením služby AD FS pro Windows Server 2012 R2.

  3. Zkopírujte nástroje Gacutil.exe na server.

    Gacutil.exe lze najít ve složce%homedrive%Program Files (x86)Microsoft SDKsWindowsv8.0AbinNETFX 4.0 Tools na počítači s Windows 8. Budete potřebovat samotný soubor gacutil.exe a 1033, en-USa další lokalizovanou složku prostředků pod umístěním nástrojů NETFX 4.0 .

  4. Zkopírujte soubory zprostředkovatele (jeden nebo více souborů se silným názvem podepsaným .dll soubory) do stejného umístění složky jako gacutil.exe (umístění je jen pro usnadnění).

  5. Přidejte své .dll soubory do GAC na každém federačním serveru služby AD FS ve farmě:

    Příklad: Přidání knihovny DLL do GAC pomocí nástroje příkazového řádku GACutil.exe: C:>.gacutil.exe /if .<yourdllname>.dll

    Pro zobrazení výsledné položky v GAC:C:>.gacutil.exe /l <yourassemblyname>

Registrace poskytovatele ve službě AD FS

Po splnění výše uvedených požadavků otevřete na federačním serveru příkazové okno Windows PowerShellu a zadejte následující příkazy (všimněte si, že pokud používáte farmu federačních serverů, která používá interní databázi Windows, musíte tyto příkazy spustit na primárním federačním serveru farmy):

  1. Register-AdfsAuthenticationProvider –TypeName YourTypeName –Name “AnyNameYouWish” [–ConfigurationFilePath (optional)]

    Kde YourTypeName je vaše silné typové jméno v .NET: "YourDefaultNamespace.YourIAuthenticationAdapterImplementationClassName, YourAssemblyName, Version=YourAssemblyVersion, Culture=neutral, PublicKeyToken=YourPublicKeyTokenValue, processorArchitecture=MSIL"

    Tím zaregistrujete externího poskytovatele ve službě AD FS s názvem, který jste zadali jako AnyNameYouWish výše.

  2. Restartujte službu AD FS (například pomocí modulu snap-in Služby systému Windows).

  3. Spusťte následující příkaz: Get-AdfsAuthenticationProvider.

    Zobrazí se váš poskytovatel jako jeden z poskytovatelů v systému.

    Example:

    $typeName = "MFAadapter.MyAdapter, MFAadapter, Version=1.0.0.0, Culture=neutral, PublicKeyToken=e675eb33c62805a0, processorArchitecture=MSIL”
    Register-AdfsAuthenticationProvider -TypeName $typeName -Name “MyMFAAdapter”
    net stop adfssrv
    net start adfssrv
    

    Pokud máte ve svém prostředí AD FS povolenou službu registrace zařízení, spusťte také následující příkaz PowerShellu: net start drs

    K ověření registrovaného poskytovatele použijte následující příkaz PowerShellu:Get-AdfsAuthenticationProvider.

    Zobrazí se váš poskytovatel jako jeden z poskytovatelů v systému.

Vytvořte zásadu ověřování služby AD FS, která aktivuje váš adaptér.

Vytvořte zásady ověřování pomocí modulu snap-in pro správu služby AD FS

  1. Otevřete modul snap-in Správa služby AD FS (z nabídky Nástroje správce serveru ).

  2. Klikněte na Zásady ověřování.

  3. V prostředním podokně klikněte v části Multi-Factor Authentication na odkaz Upravit napravo od globálního nastavení.

  4. V části Vybrat další metody ověřování v dolní části stránky zaškrtněte políčko pro název správce vašeho poskytovatele. Klikněte na Použít.

  5. Pokud chcete poskytnout trigger pro vyvolání vícefaktorového ověřování pomocí adaptéru, zkontrolujte v části Umístění například extranet i intranet. Klikněte na OK. (Pokud chcete nakonfigurovat triggery pro každou předávající stranu, přečtěte si téma Vytvoření zásad ověřování pomocí Prostředí Windows PowerShell níže.)

  6. Výsledky zkontrolujte pomocí následujících příkazů:

    První použití Get-AdfsGlobalAuthenticationPolicy. Název zprostředkovatele by se měl zobrazit jako jedna z hodnot AdditionalAuthenticationProvider.

    Pak použijte Get-AdfsAdditionalAuthenticationRule. V uživatelském rozhraní správce by se měla zobrazit pravidla pro extranet a intranet nakonfigurovaná v důsledku výběru zásad.

Vytvoření zásad ověřování pomocí Windows PowerShellu

  1. Nejprve povolte poskytovatele v globální politice:

    Set-AdfsGlobalAuthenticationPolicy -AdditionalAuthenticationProvider “YourAuthProviderName”`
    

    Note

    Všimněte si, že hodnota zadaná pro Parametr AdditionalAuthenticationProvider odpovídá hodnotě, kterou jste zadali pro parametr "Name" v rutině Register-AdfsAuthenticationProvider výše a vlastnost "Name" z výstupu rutiny Get-AdfsAuthenticationProvider.

    Set-AdfsGlobalAuthenticationPolicy –AdditionalAuthenticationProvider “MyMFAAdapter”`
    
  2. Dále nakonfigurujte globální pravidla nebo pravidla specifická pro předávající strany, která aktivují vícefaktorové ověřování:

    Příklad 1: Vytvoření globálního pravidla pro vyžadování vícefaktorového ověřování pro externí požadavky:

    Set-AdfsAdditionalAuthenticationRule –AdditionalAuthenticationRules 'c:[type == "http://schemas.microsoft.com/ws/2012/01/insidecorporatenetwork", value == "false"] => issue(type = "http://schemas.microsoft.com/ws/2008/06/identity/claims/authenticationmethod", value = "http://schemas.microsoft.com/claims/multipleauthn" );'
    

    Příklad 2: Vytvoření pravidel vícefaktorového ověřování, které vyžadují toto ověřování pro externí požadavky na konkrétní důvěřující stranu. (Poznámka: Jednotliví poskytovatelé nelze připojit k jednotlivým předávajícím stranám ve službě AD FS ve Windows Serveru 2012 R2).

    $rp = Get-AdfsRelyingPartyTrust –Name <Relying Party Name>
    Set-AdfsRelyingPartyTrust –TargetRelyingParty $rp –AdditionalAuthenticationRules 'c:[type == "http://schemas.microsoft.com/ws/2012/01/insidecorporatenetwork", value == "false"] => issue(type = "http://schemas.microsoft.com/ws/2008/06/identity/claims/authenticationmethod", value = "http://schemas.microsoft.com/claims/multipleauthn" );'
    

Ověřte se pomocí vícefaktorové autentizace pomocí adaptéru

Nakonec proveďte následující kroky a otestujte adaptér:

  1. Zajistěte, aby globální primární typ ověřování služby AD FS byl nakonfigurován jako Ověřování formulářů pro extranet i intranet (což usnadňuje autentizaci vaší demonstrace jako konkrétního uživatele).

    1. V modulu snap-in AD FS v části Zásady ověřování v oblasti Primární ověřování klikněte na Upravit vedle globálního nastavení.

      1. Nebo stačí kliknout na kartu Primární v uživatelském rozhraní vícefaktorové zásady .
  2. Ujistěte se, že ověřování pomocí formulářů je jedinou možností, která je zaškrtnutá pro extranet i metodu ověřování intranetu. Klikněte na OK.

  3. Otevřete stránku HTML iniciovanou protokolem IDP (https://<fsname>/adfs/ls/idpinitiatedsignon.htm) a přihlaste se jako platný uživatel AD ve vašem testovacím prostředí.

  4. Zadejte přihlašovací údaje pro primární ověřování.

  5. Měla by se zobrazit stránka formulářů vícefaktorového ověřování s ukázkovými otázkami k výzvě.

    Pokud máte nakonfigurováno více než jeden adaptér, zobrazí se stránka s volbou MFA s vaším přátelským názvem uvedeným výše.

    Ukázkový snímek obrazovky stránky formulářů M F A s příkladovými otázkami k výzvě

    Snímek obrazovky stránky výběru M F A

Teď máte funkční implementaci rozhraní a máte znalosti o tom, jak model funguje. Můžete zkusit jako další příklad nastavit zarážky v BeginAuthentication a TryEndAuthentication. Všimněte si, jak se spustí BeginAuthentication při prvním zadání formuláře MFA, zatímco TryEndAuthentication se aktivuje při každém odeslání formuláře.

Aktualizace adaptéru pro úspěšné ověření

Počkejte ale – váš ukázkový adaptér se nikdy úspěšně neověří. Důvodem je to, že nic ve vašem kódu nevrací hodnotu null pro TryEndAuthentication.

Provedením výše uvedených postupů jste vytvořili základní implementaci adaptéru a přidali ji na server SLUŽBY AD FS. Můžete získat stránku formulářů vícefaktorového ověřování, ale zatím není možné ověřit, protože jste ještě neuložili správnou logiku do implementace TryEndAuthentication. Pojďme to tedy přidat.

Připomeňte si implementaci TryEndAuthentication:

public IAdapterPresentation TryEndAuthentication(IAuthenticationContext authContext, IProofData proofData, HttpListenerRequest request, out Claim[] outgoingClaims)
{
    //return new instance of IAdapterPresentationForm derived class
    outgoingClaims = new Claim[0];
    return new MyPresentationForm();
}

Pojďme ho aktualizovat, aby nevrácel vždy MyPresentationForm(). Pro to můžete vytvořit jednu jednoduchou metodu nástroje v rámci třídy:

static bool ValidateProofData(IProofData proofData, IAuthenticationContext authContext)
{
    if (proofData == null || proofData.Properties == null || !proofData.Properties.ContainsKey("ChallengeQuestionAnswer"))
    {
        throw new ExternalAuthenticationException("Error - no answer found", authContext);
    }

    if ((string)proofData.Properties["ChallengeQuestionAnswer"] == "adfabric")
    {
        return true;
    }
    else
    {
        return false;
    }
}

Potom aktualizujte tryEndAuthentication následujícím způsobem:

public IAdapterPresentation TryEndAuthentication(IAuthenticationContext authContext, IProofData proofData, HttpListenerRequest request, out Claim[] outgoingClaims)
{
    outgoingClaims = new Claim[0];
    if (ValidateProofData(proofData, authContext))
    {
        //authn complete - return authn method
        outgoingClaims = new[]
        {
            // Return the required authentication method claim, indicating the particulate authentication method used.
            new Claim( "http://schemas.microsoft.com/ws/2008/06/identity/claims/authenticationmethod", "http://example.com/myauthenticationmethod1" )
        };
        return null;
    }
    else
    {
        //authentication not complete - return new instance of IAdapterPresentationForm derived class
        return new MyPresentationForm();
    }
}

Teď musíte adaptér aktualizovat v testovacím poli. Nejprve musíte vrátit zpět zásady služby AD FS, pak zrušit registraci ze služby AD FS a restartovat službu AD FS, pak odebrat .dll z GAC, pak přidat nový .dll do GAC, pak ho zaregistrovat ve službě AD FS, restartovat službu AD FS a znovu nakonfigurovat zásady služby AD FS.

Nasazení a konfigurace aktualizovaného adaptéru na testovacím počítači služby AD FS

Jasné zásady AD FS

Zrušte zaškrtnutí všech políček souvisejících s vícefaktorovými ověřováními v uživatelském rozhraní vícefaktorového ověřování( viz níže) a potom klikněte na OK.

jasná politika

Zrušení registrace zprostředkovatele (Windows PowerShell)

PS C:> Unregister-AdfsAuthenticationProvider –Name “YourAuthProviderName”

Příklad:PS C:> Unregister-AdfsAuthenticationProvider –Name “MyMFAAdapter”

Hodnota, kterou předáte pro "Name", je stejná hodnota jako "Name", kterou jste zadali do rutiny Register-AdfsAuthenticationProvider. Je to také vlastnost "Name", která je výstupem Get-AdfsAuthenticationProvider.

Než zrušíte registraci zprostředkovatele, musíte poskytovatele odebrat z AdfsGlobalAuthenticationPolicy (zrušením zaškrtnutí políček, která jste zaškrtli v modulu snap-in pro správu služby AD FS, nebo pomocí Windows PowerShellu.)

Po této operaci musí být služba AD FS restartována.

Odebrat sestavení z GAC

  1. Nejprve pomocí následujícího příkazu vyhledejte plně kvalifikovaný silný název položky:C:>.gacutil.exe /l <yourAdapterAssemblyName>

    Příklad:C:>.gacutil.exe /l mfaadapter

  2. Potom ho pomocí následujícího příkazu odeberte z GAC:.gacutil /u “<output from the above command>”

    Příklad:C:>.gacutil /u “mfaadapter, Version=1.0.0.0, Culture=neutral, PublicKeyToken=e675eb33c62805a0, processorArchitecture=MSIL”

Přidání aktualizovaného sestavení do GAC

Ujistěte se, že nejprve vložíte aktualizovanou verzi .dll lokálně. C:>.gacutil.exe /if .MFAAdapter.dll

Zobrazení sestavení v GAC (příkazový řádek)

C:> .gacutil.exe /l mfaadapter

Registrace poskytovatele ve službě AD FS

  1. PS C:>$typeName = "MFAadapter.MyAdapter, MFAadapter, Version=1.0.0.1, Culture=neutral, PublicKeyToken=e675eb33c62805a0, processorArchitecture=MSIL”

  2. PS C:>Register-AdfsAuthenticationProvider -TypeName $typeName -Name “MyMFAAdapter1”

  3. Restartujte službu AD FS.

Vytvořte zásady ověřování pomocí modulu snap-in pro správu služby AD FS

  1. Otevřete modul snap-in Správa služby AD FS (z nabídky Nástroje správce serveru ).

  2. Klikněte na Zásady ověřování.

  3. V části Multi-Factor Authentication klikněte na odkaz Upravit napravo od globálního nastavení.

  4. V části Vybrat další metody ověřování zaškrtněte políčko pro název správce vašeho poskytovatele. Klikněte na Použít.

  5. Pokud chcete poskytnout trigger pro vyvolání vícefaktorového ověřování pomocí adaptéru, zkontrolujte v části Umístění například extranet i intranet. Klikněte na OK.

Ověřte se pomocí vícefaktorové autentizace pomocí adaptéru

Nakonec proveďte následující kroky a otestujte adaptér:

  1. Ujistěte se, že globální primární typ ověřování služby AD FS je nakonfigurovaný jako ověřování pomocí formulářů pro extranet i intranet (to usnadňuje ověření jako konkrétního uživatele).

    1. V modulu snap-in správa služby AD FS v části Zásady ověřování klikněte v oblasti Primární ověřování na tlačítko Upravit vedle globálního nastavení.

      1. Nebo stačí kliknout na kartu Primární v uživatelském rozhraní vícefaktorové zásady.
  2. Ujistěte se, že ověřování pomocí formulářů je jedinou možností, která je zaškrtnutá pro extranet i metodu ověřování intranetu . Klikněte na OK.

  3. Otevřete stránku HTML iniciovanou protokolem IDP (https://<fsname>/adfs/ls/idpinitiatedsignon.htm) a přihlaste se jako platný uživatel AD ve vašem testovacím prostředí.

  4. Zadejte přihlašovací údaje pro primární ověřování.

  5. Měla by se zobrazit stránka formulářů vícefaktorového ověřování s ukázkovým textem výzvy.

    1. Pokud máte nakonfigurovaný více než jeden adaptér, zobrazí se stránka s možností výběru vícefaktorového ověřování s uživatelsky přívětivým názvem.

Při zadávání adfabric na stránce ověřování MFA by se mělo zobrazit úspěšné přihlášení.

Snímek obrazovky se stránkou formulářů M F A s ukázkovým textem výzvy

Snímek obrazovky úspěšné přihlašovací stránky M F A

Viz také

Další zdroje informací

Další metody ověřování

Správa rizik s využitím dalšího vícefaktorového ověřování citlivých aplikací