1

我正在尝试使用 ITfoxtec 构建 IdP。从服务提供商的站点,它将生成 SAML 请求并将它们重定向到 IdP。现在我在 IdP 的登录页面上,但我试图了解 ITfoxtec 代码是如何工作的。

[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()收到来自 SP 的 SAML 请求并立即以一种方法返回 SAML 响应?当 SP 重定向到 IdP 时,我希望登陆 IdP 的登录页面,其中包含针对我自己的数据库进行身份验证的用户名/密码字段。如果成功,则将 SAML 响应返回给 SP。

如果我误解了这个概念,请告诉我或指导我如何实现它。

4

1 回答 1

0

您对流程是正确的,并且 SAML 2.0 Authn 响应是立即生成的。正如您在我的评论中看到的那样,您需要自己实现登录对话框和用户名/密码验证// **** Handle user login e.g. in GUI ****

这意味着您需要将Login方法减半。在Login方法的前半部分之后,您需要开始对用户进行身份验证的 IdP 进行某种序列洞察。然后返回到Login发出 SAML 2.0 Authn 响应的方法的后半部分。

于 2020-02-17T09:24:00.047 回答