Оператор метода Sustainys Saml2 AuthenticateAsync () не реализован - PullRequest
1 голос
/ 29 октября 2019

Я пытаюсь выполнить простую реализацию в моем приложении Asp net Core Saml2 для интеграции с сервером Ad FS. Я не могу понять, почему я получаю эту ошибку. Я скачал примеры с gitHub и попытался адаптировать его в своем приложении.

NotImplementedException: The method or operation is not implemented.
Sustainsys.Saml2.AspNetCore2.Saml2Handler.AuthenticateAsync()

Вот моя реализация, мое приложение работает на Asp Net Core

На StartUp

                services
                    .AddAuthentication(sharedOptions =>
                    {
                        sharedOptions.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
                        sharedOptions.DefaultChallengeScheme = Saml2Defaults.Scheme;
                    })
                    .AddSaml2(options =>
                    {
                        options.SPOptions.EntityId = new EntityId("http://myAdfsServer.myDomain.com/adfs/services/trust");
                        options.SPOptions.ReturnUrl = new Uri("https://localhost:5000");
                        options.IdentityProviders.Add(
                            new IdentityProvider(new EntityId("http://myAdfsServer.myDomain.com/adfs/services/trust"), options.SPOptions)
                            {
                               LoadMetadata = true,
                               MetadataLocation = "https://myAdfsServer.myDomain.com/FederationMetadata/2007-06/FederationMetadata.xml"
                                //MetadataLocation = "FederationMetadata.xml"
                            });

                        //options.SPOptions.ServiceCertificates.Add(new X509Certificate2(certificate.ToString()));
                    })
                    .AddCookie();

На моем контроллере пробует что-то похожее на Пример SAML2 Sustainsys для ASP.NET Core WebAPI без идентификатора


    [Authorize(AuthenticationSchemes = Saml2Defaults.Scheme)]
    public class AuthenticationController : Controller
    {
        public AuthenticationController()
        {

        }

        [AllowAnonymous]
        public async Task LoginAdfs()
        {
            string redirectUri = string.Concat("https://localhost:5000", "/verifyAdfs");
            try
            {
                new ChallengeResult(
                    Saml2Defaults.Scheme,
                    new AuthenticationProperties
                    {
                        RedirectUri = Url.Action(nameof(LoginCallback), new { redirectUri })
                    });
            }catch(Exception e)
            {

            }
        }

        [AllowAnonymous]
        public async Task<IActionResult> LoginCallback(string returnUrl)
        {
            var authenticateResult = await HttpContext.AuthenticateAsync(Saml2Defaults.Scheme);

            //_log.Information("Authenticate result: {@authenticateResult}", authenticateResult);

            // I get false here and no information on claims etc.
            if (!authenticateResult.Succeeded)
            {
                return Unauthorized();
            }

            var claimsIdentity = new ClaimsIdentity("Email");
            claimsIdentity.AddClaim(authenticateResult.Principal.FindFirst(ClaimTypes.NameIdentifier));

           // _log.Information("Logged in user with following claims: {@Claims}", authenticateResult.Principal.Claims);

            await HttpContext.SignInAsync("Email", new ClaimsPrincipal(claimsIdentity));

            return LocalRedirect(returnUrl);
        }
}


note: У меня есть клиент, который не отображает свои метаданные в URL-адресе, поэтому мне нужно адаптировать его и установить вручную параметры метаданных

Я застрял в этой ошибке, даже ненажмите мой метод LoginAdfs.

1 Ответ

1 голос
/ 29 октября 2019

Обработчик Saml2 нельзя использовать в качестве схемы аутентификации , это схема вызова .

Я думаю, что метод LoginAdfs() работает нормально, ночто это LoginCallback, что терпит неудачу. Причиной должен быть звонок на HttpContext.AuthenticationAsync(Saml2Defaults.Scheme).

Вместо этого вы должны аутентифицироваться по схеме cookie - потому что это то, что держит сеанс. Внутри, когда вызов завершен, обработчик Saml2 будет использовать DefaultSignInScheme для сохранения результата в сеансе (через cookie, так как это схема входа по умолчанию).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...