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

.NET Core 3.1集成SAML2实现Web SSO接收断言返回400错误求助

根本原因

该400错误由ASP.NET Core框架层的默认安全拦截规则触发,请求未到达你的SAML断言处理业务代码,和SAML证书配置、断言内容正确性无关。

解决方案

按优先级排查修改:

  • 关闭回调接口的防伪令牌校验
    ASP.NET Core默认对所有POST请求校验站点生成的防伪令牌,Okta回调的SAML POST请求不会携带该令牌,会直接触发校验失败返回400。给/Identity/Account/saml对应的Action方法添加[IgnoreAntiforgeryToken]特性即可。
  • 配置回调接口允许匿名访问
    如果你使用了ASP.NET Core Identity的默认认证规则,未登录状态下的请求会被拦截。给回调Action添加[AllowAnonymous]特性,允许未登录用户访问该接口。
  • 调大请求内容长度限制
    如果SAML断言携带较多自定义属性,XML体积超过默认请求大小限制也会返回400,可在Startup.cs/Program.cs中添加全局配置:
services.Configure<FormOptions>(options =>
{
    options.ValueLengthLimit = int.MaxValue;
    options.MultipartBodyLengthLimit = int.MaxValue;
});

如果是IIS托管,还需要在web.config中添加配置:

<system.web>
    <httpRuntime maxRequestLength="1048576" />
</system.web>
<system.webServer>
    <security>
        <requestFiltering>
            <requestLimits maxAllowedContentLength="1073741824" />
        </requestFiltering>
    </security>
</system.web>
  • 关闭XSS内容校验
    ASP.NET Core默认会拦截包含XML/HTML标记的请求内容,SAML断言的XML格式会触发该规则,给回调Action添加[ValidateInput(false)]特性即可。

所有配置修改完成后,请求即可正常进入你的业务代码,后续再进行SAML断言的解析、证书校验等逻辑即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 03:36:04