C# SAML2库对接身份提供商时AuthnContextDeclRef非绝对Uri报错问询
报错根因
底层依赖的Microsoft.IdentityModel.Tokens.Saml2库内置校验逻辑,要求Saml2AuthenticationContext类的DeclarationReference属性必须是绝对URI。你对接的身份提供商返回的saml:AuthnContextDeclRef属性值为ncid/secure/form/30min/uri(相对路径格式),不符合校验规则,因此触发ArgumentException: IDX13300: 'System.String' must be an absolute Uri, was: 'System.Uri'报错。
适配解决方案(无需更换SAML库)
无需替换整个SAML库,通过自定义序列化器跳过该属性的校验即可,操作步骤如下:
- 下载
ITFoxtec.Identity.Saml2源码,自定义继承默认的Saml2Serializer类 - 重写
ReadAuthenticationContext方法,直接跳过为AuthenticationContext设置DeclarationReference属性的步骤 - 项目中替换默认序列化器为自定义版本即可
方案可靠性说明
ITFoxtec.Identity.Saml2本身没有使用AuthenticationContext.DeclarationReference属性的逻辑,其原有内部流程甚至会主动将该属性值置为null,因此提前跳过该属性的赋值操作,不会影响SAML令牌的正常解析和校验,也不会引发其他功能异常。
内容的提问来源于stack exchange,提问作者Rick
相关产品推荐
相关产品推荐

