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

