AWS SSO默认无有效NameIdFormat时Sustainsys/Saml2报错的解决配置
根因说明
AWS SSO默认生成的SAML 2.0身份提供商元数据包含未携带有效URI的空<md:NameIDFormat />标签,不符合Sustainsys/Saml2组件的元数据解析校验规则,直接触发MetadataSerializationException报错。
无需显式定义NameIdFormat的配置方案
两种方案均不需要手动指定具体的NameIdFormat取值,即可适配AWS SSO的默认行为:
- 方案1:预处理元数据删除空标签
在Sustainsys/Saml2加载元数据前,先对原始元数据XML做过滤,删除空的<md:NameIDFormat />节点后再提交给组件解析。该方案对组件版本无要求,无需调整组件原生配置,后续AWS SSO元数据自动更新也可正常适配。
参考处理代码:// 读取AWS SSO原始元数据 string rawMetadata = await new HttpClient().GetStringAsync("AWS_SSO_METADATA_URL"); // 移除空NameIDFormat标签 string processedMetadata = Regex.Replace(rawMetadata, @"<md:NameIDFormat\s*/>", string.Empty); // 加载处理后的元数据 var idp = new IdentityProvider(new EntityId("你的AWS SSO EntityID"), spOptions) { Metadata = new MetadataLoader().Load(XmlDictionaryReader.CreateTextReader(Encoding.UTF8.GetBytes(processedMetadata), XmlDictionaryReaderQuotas.Max)) }; - 方案2:开启组件空NameIdFormat忽略配置(适用v2.9.0+版本)
2.9.0及以上版本的Sustainsys/Saml2已原生支持忽略空NameIDFormat标签的配置,直接开启即可正常加载AWS SSO原始元数据,无需做任何XML修改。
参考配置代码:builder.Services.AddSaml2(opt => { // 开启空NameIdFormat忽略开关 opt.MetadataSerializerOptions.IgnoreEmptyNameIdFormat = true; // 其余IdP配置保持不变,直接加载原始AWS SSO元数据即可 opt.IdentityProviders.Add(new IdentityProvider( new EntityId("https://portal.sso.us-east-2.amazonaws.com/saml/assertion/XXX"), opt.SPOptions) { LoadMetadata = true, MetadataLocation = "你的AWS SSO元数据地址" }); });
两种方案均兼容AWS SSO默认返回的urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified格式NameID,不需要额外配置即可正常完成SAML认证流程。
内容的提问来源于stack exchange,提问作者PradipB
相关产品推荐
相关产品推荐

