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

基于ITFoxtec的SSO:ADFS认证后校验.NET6 Identity用户状态的实现方法

实现方案

你的思路完全正确,直接在AssertionConsumerService的处理流程中,调用saml2AuthnResponse.CreateSession()前加入用户校验逻辑即可,具体实现步骤如下:

  • 提取ADFS返回的用户唯一标识
    从SAML响应中获取用户的核心标识(通常是NameID),代码示例:

    var samlUserIdentifier = saml2AuthnResponse.Claims.FirstOrDefault(c => c.Type == ClaimTypes.NameIdentifier)?.Value;
    if (string.IsNullOrEmpty(samlUserIdentifier))
    {
        // 无有效用户标识,直接返回未授权
        return Unauthorized();
    }
    
  • 查询Identity.User表校验用户状态
    通过注入的UserManager<IdentityUser>查询用户,校验是否存在且未被标记删除(假设删除标记字段为IsDeleted,可根据实际表结构调整):

    // 关联逻辑根据实际业务调整:比如用用户名、邮箱或自定义外部ID匹配
    var user = await _userManager.FindByNameAsync(samlUserIdentifier);
    // 若用邮箱关联则替换为:var user = await _userManager.FindByEmailAsync(samlUserIdentifier);
    // 若用自定义外部ID则替换为:var user = await _userManager.Users.FirstOrDefaultAsync(u => u.ExternalId == samlUserIdentifier);
    
    if (user == null || user.IsDeleted)
    {
        // 用户不存在或已删除,拒绝访问
        return Forbid();
        // 也可跳转到自定义拒绝页面:return RedirectToAction("AccessDenied", "Account");
    }
    
  • 校验通过后创建会话
    确认用户合法后,执行原有会话创建逻辑:

    saml2AuthnResponse.CreateSession();
    return RedirectToAction("Index", "Home");
    
  • 额外注意事项

    • 确保UserManager<IdentityUser>已正确注入到AssertionConsumerService所在的控制器
    • 建议在拒绝访问时记录日志,便于后续排查未授权访问事件
    • 若ADFS返回的标识与User表关联字段特殊,需自定义查询逻辑匹配对应字段

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 08:56:03