Поделиться через


Создание пользовательского метода проверки подлинности для AD FS в Windows Server

В этом пошаговом руководстве приведены инструкции по реализации пользовательского метода проверки подлинности для AD FS в Windows Server 2012 R2. Дополнительные сведения см. в разделе "Дополнительные методы проверки подлинности".

Предупреждение

Пример, который можно создать здесь, предназначен только для образовательных целей.  Эти инструкции предназначены для самой простой, минимальной реализации, возможной для предоставления необходимых элементов модели.  Серверная часть проверки подлинности, обработка ошибок или данные конфигурации отсутствуют.

Настройка поля разработки

В этом пошаговом руководстве используется Visual Studio 2012. Проект можно создать с помощью любой среды разработки, которая может создать класс .NET для Windows. Проект должен быть предназначен для .NET 4.5, так как методы BeginAuthentication и TryEndAuthentication используют тип System.Security.Claims.Claim, часть платформа .NET Framework версии 4.5. Для проекта требуется одна ссылка:

Ссылка на библиотеку dll Где ее найти Обязательно для:
Microsoft.IdentityServer.Web.dll Библиотека dll находится в %windir%\ADFS на сервере Windows Server 2012 R2, на котором установлен AD FS.

Эту библиотеку dll необходимо скопировать на компьютер разработки и явную ссылку, созданную в проекте.

Типы интерфейсов, включая IAuthenticationContext, IProofData

Создание поставщика

  1. В Visual Studio 2012: выберите file-New-Project>>...

  2. Выберите библиотеку классов и убедитесь, что вы нацелены на .NET 4.5.

    Screenshot of the New Project dialog box showing the Class Library option selected.

  3. Создайте копию Microsoft.IdentityServer.Web.dll из %windir%\ADFS на сервере Windows Server 2012 R2, где AD FS установлен и вставьте его в папку Project на компьютере разработки.

  4. В Обозреватель решений щелкните правой кнопкой мыши ссылки и добавьте ссылку...

  5. Перейдите к локальной копии Microsoft.IdentityServer.Web.dll и добавьте...

  6. Нажмите кнопку "ОК" , чтобы подтвердить новую ссылку:

    Screenshot of the Reference Manager dialog box showing the Microsoft.IdentityServer.Web.dll selected.

    Теперь необходимо настроить разрешение всех типов, необходимых для поставщика.

  7. Добавьте новый класс в проект (щелкните проект правой кнопкой мыши, добавьте... Класс...) и присвойте ему имя, например MyAdapter, показанное ниже:

    Screenshot of the Add New Item dialog box with the Class option selected.

  8. В новом файле MyAdapter.cs замените существующий код следующим образом:

    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. Мы еще не готовы построить... Есть еще два интерфейса для перехода.

    Добавьте в проект еще два класса: один — для метаданных, а другой — для формы презентации. Их можно добавить в тот же файл, что и приведенный выше класс.

    class MyMetadata : IAuthenticationAdapterMetadata
    {
    
    }
    
    class MyPresentationForm : IAdapterPresentationForm
    {
    
    }
    
  10. Затем можно добавить необходимые элементы для каждого из них. Во-первых, метаданные (с полезными в строковый комментарий)

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

    Теперь вы должны иметь возможность F12 (щелкните правой кнопкой мыши — перейти к определению) в IAuthenticationAdapter, чтобы просмотреть набор обязательных элементов интерфейса.

    Затем можно выполнить реализацию этих действий.

  11. Замените все содержимое класса следующим образом:

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

    Затем форма презентации:

    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. Обратите внимание на тодо для элемента Resources.FormPageHtml выше. Вы можете исправить его в минуту, но сначала добавим окончательные необходимые инструкции возврата на основе недавно реализованных типов в исходный класс MyAdapter. Для этого добавьте следующее в существующую реализацию IAuthenticationAdapter:

    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. Теперь для файла ресурсов, содержащего html-фрагмент. Создайте текстовый файл в папке проекта со следующим содержимым:

    <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. Затем выберите компонент Project-Add>... Файл ресурсов и имя файла "Ресурсы" и нажмите кнопку "Добавить".

    Screenshot of the Add New Item dialog box showing Resource File selected.

  15. Затем в файле Resources.resx нажмите кнопку "Добавить ресурс" ... Добавьте существующий файл. Перейдите в текстовый файл (содержащий фрагмент HTML), сохраненный выше.

    Убедитесь, что код GetFormHtml правильно разрешает имя нового ресурса префиксом имени файла ресурсов (RESX-файла), за которым следует имя самого ресурса:

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

Теперь вы должны иметь возможность создавать.

Создание адаптера

Адаптер должен быть встроен в строго именованную сборку .NET, которую можно установить в GAC в Windows. Чтобы достичь этого в проекте Visual Studio, выполните следующие действия.

  1. Щелкните правой кнопкой мыши имя проекта в Обозреватель решений и щелкните "Свойства".

  2. На вкладке "Подписывание" проверка подписать сборку и нажмите <кнопку "Создать"> в разделе "Выбор файла ключа строгого имени": введите имя файла ключа и пароль и нажмите кнопку "ОК". Затем убедитесь, что сборка проверка проверка, а только знак задержки не является проверка. Страница подписывания свойств должна выглядеть следующим образом:

    build the provider

  3. Затем создайте решение.

Развертывание адаптера на тестовом компьютере AD FS

Прежде чем внешний поставщик может вызываться AD FS, он должен быть зарегистрирован в системе. Поставщики адаптеров должны предоставить установщик, который выполняет необходимые действия установки, включая установку в GAC, и установщик должен поддерживать регистрацию в AD FS. Если это не сделано, администратору необходимо выполнить приведенные ниже действия Windows PowerShell. Эти шаги можно использовать в лаборатории для включения тестирования и отладки.

Подготовка тестового компьютера AD FS

Скопируйте файлы и добавьте в GAC.

  1. Убедитесь, что у вас есть компьютер Windows Server 2012 R2 или виртуальная машина.

  2. Установите службу ролей AD FS и настройте ферму по крайней мере с одним узлом.

    Подробные инструкции по настройке сервера федерации в лабораторной среде см . в руководстве по развертыванию Windows Server 2012 R2 AD FS.

  3. Скопируйте средства Gacutil.exe на сервер.

    Gacutil.exe можно найти в средствах %homedrive%Program Files (x86)Microsoft SDKsWindowsv8.0AbinNETFX 4.0 на компьютере с Windows 8. Вам потребуется сам файл gacutil.exe и 1033, en-US и другая локализованная папка ресурсов под расположением средств NETFX 4.0.

  4. Скопируйте файлы поставщика (один или несколько файлов с подписью строгого имени .dll) в то же расположение папки, что и gacutil.exe (расположение доступно только для удобства).

  5. Добавьте .dll файлы в GAC на каждом сервере федерации AD FS в ферме:

    Пример: использование средства командной строки GACutil.exe для добавления библиотеки DLL в GAC: C:>.gacutil.exe /if .<yourdllname>.dll

    Чтобы просмотреть полученную запись в GAC, выполните следующие действия.C:>.gacutil.exe /l <yourassemblyname>

Регистрация поставщика в AD FS

После выполнения указанных выше предварительных требований откройте окно командной строки Windows PowerShell на сервере федерации и введите следующие команды (обратите внимание, что если используется ферма серверов федерации, использующая внутренняя база данных Windows, необходимо выполнить эти команды на сервере федерации основного сервера федерации фермы):

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

    Где YourTypeName — имя строгого типа .NET: "YourDefaultNamespace.YourIAuthenticationAdapterImplementationClassName, YourAssemblyName, Version=YourAssemblyVersion, Culture=neutral, PublicKeyToken=YourPublicKeyTokenValue, processorArchitecture=MSIL"

    Будет зарегистрирован внешний поставщик в AD FS с именем, предоставленным как AnyNameYouWish выше.

  2. Перезапустите службу AD FS (например, с помощью оснастки служб Windows).

  3. Выполните следующую команду: Get-AdfsAuthenticationProvider.

    Это показывает поставщик в качестве одного из поставщиков в системе.

    Пример:

    $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
    

    Если у вас включена служба регистрации устройств в среде AD FS, выполните следующую команду PowerShell: net start drs

    Чтобы проверить зарегистрированного поставщика, используйте следующую команду PowerShell:Get-AdfsAuthenticationProvider.

    Это показывает поставщик в качестве одного из поставщиков в системе.

Создайте политику проверки подлинности AD FS, которая вызывает адаптер

Создание политики проверки подлинности с помощью оснастки управления AD FS

  1. Откройте оснастку управления AD FS (в меню диспетчер сервера "Сервис").

  2. Щелкните "Политики проверки подлинности".

  3. В центральной области в разделе Многофакторная проверка подлинности щелкните ссылку "Изменить" справа от глобальной Параметры.

  4. В разделе "Выбор дополнительных методов проверки подлинности" в нижней части страницы проверка поле для Администратор Name поставщика. Щелкните Применить.

  5. Чтобы предоставить триггер для вызова MFA с помощью адаптера, в разделе "Расположения" проверка экстрасети и интрасети, например. Щелкните OK. (Чтобы настроить триггеры для проверяющей стороны, см. статью "Создание политики проверки подлинности с помощью Windows PowerShell" ниже.

  6. Проверьте результаты с помощью следующих команд:

    Первое использование Get-AdfsGlobalAuthenticationPolicy. Имя поставщика должно отображаться как одно из значений AdditionalAuthenticationProvider.

    Затем используйте Get-AdfsAdditionalAuthenticationRule. Правила экстрасети и интрасети должны отображаться в результате выбора политики в пользовательском интерфейсе администратора.

Создание политики проверки подлинности с помощью Windows PowerShell

  1. Сначала включите поставщик в глобальной политике:

    Set-AdfsGlobalAuthenticationPolicy -AdditionalAuthenticationProvider “YourAuthProviderName”`
    

    Примечание.

    Обратите внимание, что значение, предоставленное для параметра AdditionalAuthenticationProvider, соответствует значению, предоставленному для параметра Name в командлете Register-AdfsAuthenticationProvider выше, и свойству Name из выходных данных командлета Get-AdfsAuthenticationProvider.

    Set-AdfsGlobalAuthenticationPolicy –AdditionalAuthenticationProvider “MyMFAAdapter”`
    
  2. Затем настройте глобальные или сторонние правила для активации MFA:

    Пример 1. Создание глобального правила для требования MFA для внешних запросов:

    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" );'
    

    Пример 2. Создание правил MFA для требования MFA для внешних запросов к определенной проверяющей стороне. (Примечание. Отдельные поставщики не могут быть подключены к отдельным проверяющим сторонам в AD FS в Windows Server 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" );'
    

Проверка подлинности с помощью MFA с помощью адаптера

Наконец, выполните приведенные ниже действия, чтобы протестировать адаптер:

  1. Убедитесь, что глобальный тип первичной проверки подлинности AD FS настроен в качестве проверки подлинности форм для экстрасети и интрасети (это упрощает проверку подлинности в качестве конкретного пользователя).

    1. В оснастке AD FS в разделе "Политики проверки подлинности" в области основной проверки подлинности нажмите кнопку "Изменить рядом с глобальными Параметры".

      1. Или просто щелкните вкладку "Основной" в пользовательском интерфейсе многофакторной политики.
  2. Убедитесь, что проверка подлинности форм является единственным вариантом, проверка для экстрасети и метода проверки подлинности интрасети. Щелкните OK.

  3. Откройте html-страницу, инициированную поставщиком удостоверений (https://< fsname>/adfs/ls/idpinitiatedsignon.htm), и войдите в качестве допустимого пользователя AD в тестовой среде.

  4. Введите учетные данные для первичной проверки подлинности.

  5. Вы увидите страницу форм MFA с примером вопросов о вызове.

    Если настроено несколько адаптеров, вы увидите страницу выбора MFA с понятным именем выше.

    Screenshot of the the M F A forms page with example challenge questions.

    Screenshot of the the M F A choice page.

Теперь у вас есть рабочая реализация интерфейса, и у вас есть знания о том, как работает модель. Вы можете попробовать в качестве дополнительного примера задать точки останова в BeginAuthentication и TryEndAuthentication. Обратите внимание, как BeginAuthentication выполняется при первом входе пользователя в форму MFA, в то время как TryEndAuthentication активируется при каждой отправке формы.

Обновление адаптера для успешной проверки подлинности

Но подождите. Пример адаптера никогда не будет успешно проходить проверку подлинности! Это связано с тем, что в коде ничего не возвращает значение NULL для TryEndAuthentication.

Выполнив описанные выше процедуры, вы создали базовую реализацию адаптера и добавили ее на сервер AD FS. Вы можете получить страницу форм MFA, но вы еще не можете пройти проверку подлинности, так как вы еще не положили правильную логику в реализацию TryEndAuthentication. Итак, давайте добавим это.

Помните реализацию 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();
}

Давайте обновим его так, чтобы он не всегда возвращал MyPresentationForm(). Для этого можно создать один простой метод служебной программы в классе:

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

Затем обновите TryEndAuthentication, как показано ниже:

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();
    }
}

Теперь необходимо обновить адаптер в тестовом поле. Сначала необходимо отменить политику AD FS, а затем отменить регистрацию из AD FS и перезапустить AD FS, а затем удалить .dll из GAC, а затем добавить новую .dll в GAC, а затем зарегистрировать ее в AD FS, перезапустить AD FS и перенастроить политику AD FS.

Развертывание и настройка обновленного адаптера на тестовом компьютере AD FS

Очистка политики AD FS

Снимите все связанные проверка поля MFA в пользовательском интерфейсе MFA, показанные ниже, а затем нажмите кнопку "ОК".

clear policy

Отмена регистрации поставщика (Windows PowerShell)

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

Пример:PS C:> Unregister-AdfsAuthenticationProvider –Name “MyMFAAdapter”

Значение, передаваемое для имени, совпадает со значением Name, предоставленным командлету Register-AdfsAuthenticationProvider. Это также свойство Name, которое выводится из Get-AdfsAuthenticationProvider.

Перед отменой регистрации поставщика необходимо удалить поставщика из AdfsGlobalAuthenticationPolicy (очищая проверка boxes, которые вы проверка в оснастке управления AD FS или с помощью Windows PowerShell.)

После этой операции необходимо перезапустить службу AD FS.

Удаление сборки из GAC

  1. Сначала используйте следующую команду, чтобы найти полное строгое имя записи:C:>.gacutil.exe /l <yourAdapterAssemblyName>

    Пример:C:>.gacutil.exe /l mfaadapter

  2. Затем используйте следующую команду, чтобы удалить ее из GAC:.gacutil /u “<output from the above command>”

    Пример:C:>.gacutil /u “mfaadapter, Version=1.0.0.0, Culture=neutral, PublicKeyToken=e675eb33c62805a0, processorArchitecture=MSIL”

Добавление обновленной сборки в GAC

Сначала вставьте обновленный .dll. C:>.gacutil.exe /if .MFAAdapter.dll

Просмотр сборки в GAC (строка cmd)

C:> .gacutil.exe /l mfaadapter

Регистрация поставщика в 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. Перезагрузите службу AD FS.

Создание политики проверки подлинности с помощью оснастки управления AD FS

  1. Откройте оснастку управления AD FS (в меню диспетчер сервера "Сервис").

  2. Щелкните "Политики проверки подлинности".

  3. В разделе Многофакторная проверка подлинности щелкните ссылку "Изменить" справа от глобальной Параметры.

  4. В разделе "Выбор дополнительных методов проверки подлинности" проверка поле Администратор Name поставщика. Щелкните Применить.

  5. Чтобы предоставить триггер для вызова MFA с помощью адаптера, в разделе "Расположения" проверка экстрасети и интрасети, например. Щелкните OK.

Проверка подлинности с помощью MFA с помощью адаптера

Наконец, выполните приведенные ниже действия, чтобы протестировать адаптер:

  1. Убедитесь, что глобальный тип первичной проверки подлинности AD FS настроен как для проверки подлинности форм для экстрасети, так и для интрасети (это упрощает проверку подлинности в качестве конкретного пользователя).

    1. В оснастке управления AD FS в разделе "Политики проверки подлинности" в области основной проверки подлинности нажмите кнопку "Изменить" рядом с глобальным Параметры.

      1. Или просто щелкните вкладку "Основной" в пользовательском интерфейсе многофакторной политики.
  2. Убедитесь, что проверка подлинности форм является единственным вариантом, проверка для экстрасети и метода проверки подлинности интрасети. Щелкните OK.

  3. Откройте html-страницу, инициированную поставщиком удостоверений (https://< fsname>/adfs/ls/idpinitiatedsignon.htm), и войдите в качестве допустимого пользователя AD в тестовой среде.

  4. Введите учетные данные для первичной проверки подлинности.

  5. Вы увидите страницу форм MFA с примером текста запроса.

    1. Если настроено несколько адаптеров, вы увидите страницу выбора MFA с понятным именем.

При вводе adfabric на странице проверки подлинности MFA вы увидите успешный вход.

Screenshot of the M F A forms page with example challenge text.

Screenshot of the M F A successful sign in page.

См. также

Другие ресурсы

Дополнительные методы проверки подлинности

Управление рисками для уязвимых приложений с помощью дополнительной многофакторной аутентификации