Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом пошаговом руководстве приведены инструкции по реализации пользовательского метода проверки подлинности для 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 |
Создание поставщика
В Visual Studio 2012: выберите Файл->Создать->Проект...
Выберите библиотеку классов и убедитесь, что вы нацелены на .NET 4.5.
Создайте копию Microsoft.IdentityServer.Web.dll из %windir%\ADFS на сервере Windows Server 2012 R2, где AD FS установлен и вставьте его в папку Project на компьютере разработки.
В обозревателе решений щелкните правой кнопкой мыши ссылки и добавьте ссылку...
Перейдите к локальной копии Microsoft.IdentityServer.Web.dll и добавьте...
Нажмите кнопку "ОК" , чтобы подтвердить новую ссылку:
Теперь вы должны быть настроены на разрешение всех типов, необходимых для поставщика.
Добавьте новый класс в проект (щелкните проект правой кнопкой мыши, добавьте... Класс...) и присвойте ему имя, например MyAdapter, показанное ниже:
В новом файле 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 } } }
Мы еще не готовы строить... осталось еще два интерфейса.
Добавьте в проект еще два класса: один — для метаданных, а другой — для формы презентации. Их можно добавить в тот же файл, что и приведенный выше класс.
class MyMetadata : IAuthenticationAdapterMetadata { } class MyPresentationForm : IAdapterPresentationForm { }
Затем можно добавить необходимые элементы для каждого из них. Во-первых, метаданные (с полезными встроенными комментариями)
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, чтобы просмотреть список обязательных членов интерфейса.
Затем можно выполнить реализацию этих действий.
Замените все содержимое класса следующим образом:
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"; } }
Обратите внимание на заметку для элемента 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(); } }
Теперь для файла ресурсов, содержащего 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>
Затем выберите файл Project->Add Component... Resources, назовите его "Ресурсы" и нажмите "Добавить".
Затем в файле Resources.resx нажмите кнопку "Добавить ресурс" ... Добавьте существующий файл. Перейдите в текстовый файл (содержащий фрагмент HTML), сохраненный выше.
Убедитесь, что код GetFormHtml правильно распознает имя нового ресурса по префиксу имени файла ресурсов (.resx) и имени самого ресурса.
public string GetFormHtml(int lcid) { string htmlTemplate = Resources.MfaFormHtml; //Resxfilename.resourcename return htmlTemplate; }
Теперь вы можете строить.
Создание адаптера
Адаптер должен быть встроен в строго именованную сборку .NET, которую можно установить в GAC в Windows. Чтобы достичь этого в проекте Visual Studio, выполните следующие действия.
Щелкните правой кнопкой мыши имя проекта в обозревателе решений и выберите пункт "Свойства".
На вкладке "Подписывание" установите флажок "Подписать сборку" и выберите <"Новый..."> в разделе "Выбор файла строгого имени", введите имя файла ключа и пароль и нажмите "ОК". Затем убедитесь, что установлен флажок "Подписать сборку", а флажок "Задержка" снят. Страница свойств «Подписывание» должна выглядеть следующим образом:
Затем создайте решение.
Развертывание адаптера на тестовом компьютере AD FS
Прежде чем внешний поставщик может вызываться AD FS, он должен быть зарегистрирован в системе. Поставщики адаптеров должны предоставить установщик, который выполняет необходимые действия установки, включая установку в GAC, и установщик должен поддерживать регистрацию в AD FS. Если это не сделано, администратору необходимо выполнить приведенные ниже действия Windows PowerShell. Эти шаги можно использовать в лаборатории для включения тестирования и отладки.
Подготовка тестового компьютера AD FS
Скопируйте файлы и добавьте в GAC.
Убедитесь, что у вас есть компьютер Windows Server 2012 R2 или виртуальная машина.
Установите службу ролей AD FS и настройте ферму по крайней мере с одним узлом.
Подробные инструкции по настройке сервера федерации в лабораторной среде см. в руководстве по развертыванию Windows Server 2012 R2 AD FS.
Скопируйте средства Gacutil.exe на сервер.
Gacutil.exe можно найти в инструментах%homedrive%Program Files (x86)Microsoft SDKsWindowsv8.0AbinNETFX 4.0 на машине с Windows 8. Вам потребуется сам файлgacutil.exe и 1033, en-USи другая локализованная папка ресурсов под расположением средств NETFX 4.0 .
Скопируйте файлы поставщика (один или несколько файлов с сильной подписью имени .dll) в ту же папку, что и gacutil.exe (расположение предназначено только для удобства).
Добавьте свои файл(ы) .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, необходимо выполнить эти команды на сервере федерации основного сервера федерации фермы):
Register-AdfsAuthenticationProvider –TypeName YourTypeName –Name “AnyNameYouWish” [–ConfigurationFilePath (optional)]
Где YourTypeName — это жесткое имя типа .NET: "YourDefaultNamespace.YourIAuthenticationAdapterImplementationClassName, YourAssemblyName, Version=YourAssemblyVersion, Culture=neutral, PublicKeyToken=YourPublicKeyTokenValue, processorArchitecture=MSIL"
Ваш внешний поставщик будет зарегистрирован в AD FS с именем, указанным выше как AnyNameYouWish.
Перезапустите службу AD FS (например, с помощью оснастки служб Windows).
Выполните следующую команду:
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
Откройте оснастку управления AD FS (в меню "Диспетчер сервера" -> "Инструменты ").
Щелкните "Политики проверки подлинности".
В центральной области в разделе Многофакторная проверка подлинности щелкните ссылку "Изменить " справа от глобальных параметров.
В разделе "Выбор дополнительных методов проверки подлинности " в нижней части страницы установите флажок "AdminName" вашего поставщика. Нажмите кнопку "Применить".
Чтобы предоставить триггер для вызова MFA с помощью адаптера, в разделе "Расположения " проверьте экстрасеть и интрасеть, например. Нажмите кнопку "ОК". (Чтобы настроить триггеры для проверяющей стороны, см. статью "Создание политики проверки подлинности с помощью Windows PowerShell" ниже.
Проверьте результаты с помощью следующих команд:
Сначала используйте
Get-AdfsGlobalAuthenticationPolicy
. Имя поставщика должно отображаться как одно из значений AdditionalAuthenticationProvider.Затем используйте
Get-AdfsAdditionalAuthenticationRule
. В результате выбора политики в пользовательском интерфейсе администратора должны отображаться правила Экстранет и Интранет.
Создание политики проверки подлинности с помощью Windows PowerShell
Сначала включите поставщика в глобальные настройки политики.
Set-AdfsGlobalAuthenticationPolicy -AdditionalAuthenticationProvider “YourAuthProviderName”`
Примечание.
Обратите внимание, что значение, предоставленное для параметра AdditionalAuthenticationProvider, соответствует значению, предоставленному для параметра Name в командлете Register-AdfsAuthenticationProvider выше, и свойству Name из выходных данных командлета Get-AdfsAuthenticationProvider.
Set-AdfsGlobalAuthenticationPolicy –AdditionalAuthenticationProvider “MyMFAAdapter”`
Затем настройте глобальные или рассчитанные на доверенную сторону правила для запуска 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 и адаптера
Наконец, выполните приведенные ниже действия, чтобы протестировать адаптер:
Убедитесь, что глобальный первичный метод проверки подлинности AD FS настроен как аутентификация с использованием форм для экстрасети и интрасети, что упрощает процесс проверки подлинности в качестве конкретного пользователя.
В оснастке AD FS в разделе "Политики проверки подлинности" в области основной проверки подлинности нажмите кнопку "Изменить рядом с глобальными параметрами".
- Или просто щелкните вкладку "Основной " в пользовательском интерфейсе многофакторной политики .
Убедитесь, что проверка подлинности форм является единственным параметром, который проверяется как для экстрасети, так и для метода проверки подлинности интрасети. Нажмите кнопку "ОК".
Откройте HTML-страницу, инициированную поставщиком удостоверений (https://<fsname>/adfs/ls/idpinitiatedsignon.htm) и войдите как действующий пользователь AD в тестовой среде.
Введите учетные данные для первичной проверки подлинности.
Вы должны увидеть страницу форм MFA с примерами вопросов для проверки.
Если настроено несколько адаптеров, вы увидите страницу выбора MFA с вашим пользовательским именем, указанным выше.
Теперь у вас есть рабочая реализация интерфейса, и у вас есть знания о том, как работает модель. Вы можете попробовать в качестве дополнительного примера задать точки останова в 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, показанные ниже, и нажмите кнопку "ОК".
Отмена регистрации поставщика (Windows PowerShell)
PS C:> Unregister-AdfsAuthenticationProvider –Name “YourAuthProviderName”
Пример:PS C:> Unregister-AdfsAuthenticationProvider –Name “MyMFAAdapter”
Значение, передаваемое для "Name", совпадает с тем же значением "Name", которое вы передали командлету Register-AdfsAuthenticationProvider. Это также свойство "Name", которое выводится с помощью Get-AdfsAuthenticationProvider.
Перед отменой регистрации поставщика необходимо удалить поставщика из AdfsGlobalAuthenticationPolicy (снимите флажки, которые вы проверили в консоли управления AD FS либо с помощью Windows PowerShell.)
После этой операции необходимо перезапустить службу AD FS.
Удалить сборку из GAC
Сначала используйте следующую команду, чтобы найти полное строгое имя записи:
C:>.gacutil.exe /l <yourAdapterAssemblyName>
Пример:
C:>.gacutil.exe /l mfaadapter
Затем используйте следующую команду, чтобы удалить ее из 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 (командная строка)
C:> .gacutil.exe /l mfaadapter
Регистрация поставщика в AD FS
PS C:>$typeName = "MFAadapter.MyAdapter, MFAadapter, Version=1.0.0.1, Culture=neutral, PublicKeyToken=e675eb33c62805a0, processorArchitecture=MSIL”
PS C:>Register-AdfsAuthenticationProvider -TypeName $typeName -Name “MyMFAAdapter1”
Перезапустите службу AD FS.
Создайте политику проверки подлинности с помощью оснастки управления AD FS
Откройте оснастку управления AD FS (в меню "Диспетчер сервера" -> "Инструменты ").
Щелкните "Политики проверки подлинности".
В разделе Многофакторная проверка подлинности щелкните ссылку "Изменить " справа от глобальных параметров.
В разделе "Выбор дополнительных методов проверки подлинности" установите флажок "AdminName" вашего поставщика. Нажмите кнопку "Применить".
Чтобы предоставить триггер для вызова MFA с помощью адаптера, в разделе "Расположения" проверьте экстрасеть и интрасеть, например. Нажмите кнопку "ОК".
Пройдите аутентификацию с использованием MFA и адаптера
Наконец, выполните приведенные ниже действия, чтобы протестировать адаптер:
Убедитесь, что глобальный тип первичной проверки подлинности AD FS настроен как для проверки подлинности форм для экстрасети, так и для интрасети (это упрощает проверку подлинности в качестве конкретного пользователя).
В оснастке управления AD FS в разделе "Политики проверки подлинности" в области основной проверки подлинности нажмите кнопку "Изменить рядом с глобальными параметрами".
- Или просто щелкните вкладку "Основной " в пользовательском интерфейсе многофакторной политики.
Убедитесь, что проверка подлинности форм — единственный выбранный параметр как для методов аутентификации экстрасети, так и интрасети. Нажмите кнопку "ОК".
Откройте HTML-страницу, инициированную поставщиком удостоверений (https://<fsname>/adfs/ls/idpinitiatedsignon.htm) и войдите как действующий пользователь AD в тестовой среде.
Введите учетные данные для первичной проверки подлинности.
Вы увидите страницу форм MFA с примером текста проверки.
- Если у вас настроено более одного адаптера, вы увидите страницу выбора MFA с удобным для пользователя именем.
При вводе adfabric на странице аутентификации с MFA вы должны увидеть сообщение об успешном входе.