You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ITfoxtec.Identity.Saml2 完整SSO登录链路及用户校验API咨询

ITfoxtec.Identity.Saml2 SSO登录链路实现及用户校验说明

完整登录链路实现参考

你提到的TestWebAppCore(SP端,业务服务提供方)和TestIdPCore(IdP端,身份提供方)已经覆盖了完整的SSO登录全流程,包含用户从SP跳转IdP登录页、IdP侧用户身份校验、IdP生成SAML断言返回SP、SP解析断言完成登录的全部逻辑,可以直接基于这两个示例做二次开发。

IdP侧用户校验调用逻辑

框架没有封装独立的用户校验API,用户身份校验逻辑需要你在IdP的登录处理方法中自定义实现:

  • TestIdPCore的登录逻辑集中在AuthController的Login方法内,用户在登录页提交用户名密码后,你可以在该方法中插入自定义的用户存在性校验、密码正确性校验逻辑
  • 校验通过后,再调用框架提供的CreateSamlAuthnResponseAsync方法生成SAML响应返回给SP即可
  • 如需自定义校验规则,直接修改Login方法内的用户判断分支即可

无效登录示例

以下为TestIdPCore中AuthController.Login方法的无效登录处理示例:

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Login(LoginViewModel model)
{
    // 自定义用户校验逻辑
    var targetUser = _userDbContext.Users.FirstOrDefault(u => u.UserName == model.Username);
    // 无效场景1:用户不存在
    if (targetUser == null)
    {
        ModelState.AddModelError("", "当前用户名不存在");
        return View(model);
    }
    // 无效场景2:密码校验不通过
    if (!BCrypt.Net.BCrypt.Verify(model.Password, targetUser.HashedPassword))
    {
        ModelState.AddModelError("", "用户名或密码错误");
        return View(model);
    }
    // 无效场景3:用户状态异常(如已禁用)
    if (targetUser.IsDisabled)
    {
        ModelState.AddModelError("", "当前用户已被禁用,无法登录");
        return View(model);
    }

    // 校验全部通过后,才走SAML断言生成、返回SP的逻辑
    var saml2PostBinding = new Saml2PostBinding();
    var saml2AuthnResponse = new Saml2AuthnResponse(_saml2IdPConfiguration);
    // 省略断言构造、签名等后续逻辑
    return saml2PostBinding.Bind(saml2AuthnResponse).ToActionResult();
}

以上示例中,只要任意一项校验不通过,直接返回登录页并携带错误提示即可,不需要调用SAML相关接口,只有合法校验通过的用户才会进入后续的SAML响应生成流程。

内容的提问来源于stack exchange,提问作者Narva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 05:39:03