#c# #adfs #multi-factor-authentication #yubikey
Вопрос:
Я разработал библиотеку DLL c# для настройки AD FS MFA. Поэтому я использую из этого руководства Создание пользовательского метода проверки подлинности для AD FS в Windows Server
Я использую эти команды оболочки питания:
Set-Location "C:Release"
[System.Reflection.Assembly]::Load("System.EnterpriseServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")
$publish = New-Object System.EnterpriseServices.Internal.Publish
$publish.GacInstall("C:ReleaseMFAAdapter.dll")
([System.Reflection.Assembly]::LoadFile("C:ReleaseMFAAdapter.dll")).FullName
$typeName = "MFAAdapter.Adapter, MFAAdapter, Version=1.0.0.7, Culture=neutral, PublicKeyToken=23251ce4dd11647e, processorArchitecture=MSIL”
Register-AdfsAuthenticationProvider -TypeName $typeName -Name “MFA Adapter” -ConfigurationFilePath 'C:Releaseconfig.json'
net stop adfssrv
net start adfssrv
Но после запуска службы ADFS в средстве просмотра событий возникает эта ошибка:
An error occurred loading an authentication provider. Fix configuration errors using PowerShell
cmdlets and restart the Federation Service.
Identifier: MFA Adapter
Context: Proxy device TLS pipeline
Additional Data
Exception details:
An error occurred initializing the 'MFA Adapter' authentication provider.
Но моя библиотека DLL загружается и работает над аутентификацией. также он загружает TryEndAuthentication()
функцию
Почему возникает эта ошибка?
В конце: Есть еще одна проблема при вызове OnAuthenticationPipelineLoad()
функции. Таким образом, эта функция вообще не вызывается и не загружает файл конфигурации (config.json)
.
public void OnAuthenticationPipelineLoad(IAuthenticationMethodConfigData configData)
{
try
{
if (configData != null || configData.Data != null)
{
using (StreamReader reader = new StreamReader(configData.Data, Encoding.UTF8))
{
var config = reader.ReadToEnd();
var obj = JObject.Parse(config);
EventLog.WriteEntry(
"Application",
String.Format("Config loaded for user:{0}. iKey:{1}, user_name, bj["ikey"]]),
EventLogEntryType.Information);
var ikey = obj["ikey"].ToString();
}
}
else
{
EventLog.WriteEntry(
"Application",
String.Format("Error: configData is null for user:{0}", user_name),
EventLogEntryType.Error);
throw new ArgumentNullException();
}
}
catch (Exception ex)
{
EventLog.WriteEntry(
"Application",
String.Format("Exception on OnAuthenticationPipelineLoad for user:{0}: {1}", user_name, ex.Message),
EventLogEntryType.Error);
throw new ArgumentException(ex.Message);
}
}