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
相关产品推荐
相关产品推荐

