SAML Service Provider перенаправляет на страницу входа IDP - PullRequest
1 голос
/ 14 февраля 2020

Я пытаюсь создать IdP, используя ITfoxte c. С сайта поставщика услуг он генерирует запросы SAML и перенаправляет их в IdP. Сейчас я нахожусь на странице входа IdP, но пытаюсь понять, как работают коды ITfoxte c.

[Route("Login")]
        public IActionResult Login()
        {
            var requestBinding = new Saml2RedirectBinding();
            var relyingParty = ValidateRelyingParty(ReadRelyingPartyFromLoginRequest(requestBinding));

            var saml2AuthnRequest = new Saml2AuthnRequest(config);
            try
            {
                requestBinding.Unbind(Request.ToGenericHttpRequest(), saml2AuthnRequest);

                // ****  Handle user login e.g. in GUI ****
                // Test user with session index and claims
                var sessionIndex = Guid.NewGuid().ToString();
                var claims = CreateTestUserClaims(saml2AuthnRequest.Subject?.NameID?.ID);
                var response = LoginResponse(saml2AuthnRequest.Id, Saml2StatusCodes.Success, requestBinding.RelayState, relyingParty, sessionIndex, claims);

                return response;
            }
            catch (Exception exc)
            {
#if DEBUG
                Debug.WriteLine($"Saml 2.0 Authn Request error: {exc.ToString()}\nSaml Auth Request: '{saml2AuthnRequest.XmlDocument?.OuterXml}'\nQuery String: {Request.QueryString}");
#endif
                return LoginResponse(saml2AuthnRequest.Id, Saml2StatusCodes.Responder, requestBinding.RelayState, relyingParty);
            }
        }

Почему этот метод Login() получает запрос SAML от SP и возвращает Ответ SAML сразу в одном методе? Когда SP перенаправляет на IdP, я ожидаю попадания на страницу входа IdP с полями имени пользователя и пароля, которые аутентифицируются в моей собственной базе данных. Затем верните ответ SAML SP, если все прошло успешно.

Пожалуйста, дайте мне знать, если я неправильно понимаю концепцию, или сообщите мне, как это реализовать.

1 Ответ

0 голосов
/ 17 февраля 2020

Вы правы относительно потока и что Ответ SAML 2.0 Authn генерируется сразу. Вам нужно реализовать диалог входа в систему и подтверждение имени пользователя / пароля, как вы можете видеть в моем комментарии // **** Handle user login e.g. in GUI ****.

Это означает, что вам нужно разрезать метод Login пополам. После первой половины метода Login вам нужно начать какую-то последовательность понимания IdP, где аутентифицируется пользователь. А затем вернитесь ко второй половине Login метода, который выдает ответ SAML 2.0 Authn.

...