Пользовательский поставщик проверки подлинности AD FS не вернул утверждение метода проверки подлинности.

Я создал собственного поставщика проверки подлинности для AD FS MFA.

Я определил требование метода аутентификации в метаданных:

public string[] AuthenticationMethods
{
    get { return new string[] { "https://schemas.microsoft.com/ws/2012/12/authmethod/otp" }; }
}

У меня также есть метод TryEndAuthentication (это только для лабораторных целей, я изменю жестко закодированный пин-код, как только эта часть заработает):

 public IAdapterPresentation TryEndAuthentication(IAuthenticationContext context, IProofData proofData, System.Net.HttpListenerRequest request, out System.Security.Claims.Claim[] claims)
    {
        claims = null;
        IAdapterPresentation result = null;
        string pin = proofData.Properties["pin"].ToString();
        if (pin == "12345")
        {
            System.Security.Claims.Claim claim = new System.Security.Claims.Claim("https://schemas.microsoft.com/ws/2008/06/identity/claims/authenticationmethod", "https://schemas.microsoft.com/ws/2012/12/authmethod/otp");
            claims = new System.Security.Claims.Claim[] { claim };
        }
        else
        {
            result = new AdapterPresentation("Authentication failed.", false);
        }
        return result;
    }

Но когда я развертываю это в своей AD FS, это дает мне эту ошибку при правильном входе в систему: Провайдер проверки подлинности не вернул запрос метода проверки подлинности

Кто-нибудь знает, что пошло не так?


person EVDS    schedule 31.03.2020    source источник
comment
Не могли бы вы подтвердить, какую версию AD FS вы использовали для своего адаптера?   -  person maweeras    schedule 09.04.2020
comment
Я работаю с Windows Server 2019 AD FS. Вы имеете в виду, что мой адаптер .NET framework может быть несовместим с моим .NET framework на моем сервере?   -  person EVDS    schedule 09.04.2020


Ответы (1)


Я понял. URI для утверждения schemas.microsoft.com/ws/2008/06/identity/claims/authenticationmethod должен использовать http. Не https.

Вы должны изменить строку ниже

if (pin == "12345")
        {
            System.Security.Claims.Claim claim = new System.Security.Claims.Claim("https://schemas.microsoft.com/ws/2008/06/identity/claims/authenticationmethod", "https://schemas.microsoft.com/ws/2012/12/authmethod/otp");
            claims = new System.Security.Claims.Claim[] { claim };
        }

to

if (pin == "12345")
        {
            System.Security.Claims.Claim claim = new System.Security.Claims.Claim("http://schemas.microsoft.com/ws/2008/06/identity/claims/authenticationmethod", "https://schemas.microsoft.com/ws/2012/12/authmethod/otp");
            claims = new System.Security.Claims.Claim[] { claim };
        }

и тогда это сработает.

Я сделал ту же ошибку, когда скопировал пример кода адаптера с сайта https://docs.microsoft.com/en-us/windows-server/identity/ad-fs/development/ad-fs-build-custom-auth-method

Я отправил https://github.com/MicrosoftDocs/windowsserverdocs/pull/4165 исправление на github, которое должно быть зафиксировано в ближайшее время.

person maweeras    schedule 10.04.2020