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

使用ITfoxtec SAML库对接Shibboleth IdP时遇UnableToDecode错误

.NET 7中使用ITfoxtec Identity SAML 2.0对接Shibboleth IdP时出现UnableToDecode错误

此前对接Okta SAML功能正常,但切换到基于Shibboleth的SAML 2.0身份提供商时,出现以下400错误:

Error: UnableToDecode

400 Bad Request
https://physics.lab.xxx.edu/idp/profile/Shibboleth/SSO?SAMLRequest=
kjrtgtboMwDIZfBeUOCSmDNgKkar1U2rRpTDvsMgUwIhIkWWykPf7Sbof1sqNtff79uUa9
LtKr40azfYHPDZCSr3WxqH4mDduCVU6jQWX1Cqhoo96nrg16TCgfHLnBLewv8z%2BiES
GQcZYl51PDPnKYoNqLPp32UqSFFHnaT9UuHcShlGN5EJwhtrIGASPTsLgigogbnC2Sth
RbQso0l6koX%2bhuyt3dlZncHd5Zcoo2xupLWsNmIo%2BKcx8v8C5Q5g1RBuPGzeh5NJ
nMArybTd%2B7BWjmXffE2vqqpK6JoX2OyMXk3lkLA7lQ85v5b3n7z%2FYbAAD%2F%2Fw
MA&RelayState=ReturnUrl%3D%252F

调试发现错误出在Login控制器方法的最后一步:

[Route("Login")]
public IActionResult Login(string returnUrl = null)
{
    var binding = new Saml2RedirectBinding();
    binding.SetRelayStateQuery(new Dictionary<string, string> { { relayStateReturnUrl, returnUrl ?? Url.Content("~/" ) } });

    return binding.Bind(new Saml2AuthnRequest(config)).ToActionResult();
}

应用配置(appsettings.json)如下:

"Saml2": {
"IdPMetadata": "https://physics.lab.xxx.edu/idp/shibboleth",
"Issuer": "SSOLoginApp",
"SignatureAlgorithm": "http://www.w3.org/2001/04/xmldsig-more#rsa-sha256",
"CertificateValidationMode": "None",
"RevocationMode": "NoCheck"
}

解码后的SAML 2.0请求内容:

<saml2p:AuthnRequest xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol" 
xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" 
ID="_2efe780b-f120-4201-bf73-c0962d690701" Version="2.0" 
IssueInstant="2022-12-06T16:42:56.239Z" 
Destination="https://physics.lab.xxx.edu/idp/profile/Shibboleth/SSO">
  <saml2:Issuer>LabLoginApp</saml2:Issuer>
</saml2p:AuthnRequest>

问题排查与解决建议

  • 修正Issuer不一致问题:配置文件中Issuer设置为"SSOLoginApp",但实际发送的SAML请求里Issuer是"LabLoginApp"。Shibboleth对信赖方实体ID的匹配要求严格,必须和IdP侧配置的实体ID完全一致,需将appsettings.json中的Issuer修改为"LabLoginApp"。
  • 检查SAMLRequest编码格式:Shibboleth要求SAMLRequest参数必须是连续的、无换行的DEFLATE压缩+Base64编码+URL编码字符串。确认ITfoxtec库生成的SAMLRequest没有多余换行(当前错误URL中的换行可能是输出格式问题,需确保实际发送时是单一连续字符串)。
  • 验证元数据加载正确性:确认IdPMetadata地址能正常访问,且加载到的IdP元数据中SSO端点与请求的Destination一致,同时检查元数据中的签名证书是否正确配置。
  • 启用AuthnRequest签名:部分Shibboleth实例要求认证请求必须签名,需在SAML配置中添加签名证书相关配置,并确保AuthnRequest生成时启用签名功能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 02:20:26