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

.NET框架/.NET Core生成SAP应用签名SAML断言及项目查询

在.NET环境生成SAP用的签名SAML断言

核心结论

完全可以在.NET Framework和.NET Core环境中生成符合SAP要求的SAML断言,并使用私钥完成签名。

可用工具与库

Sustainsys.Saml2

你提到的Stub IDP项目大概率是Sustainsys.Saml2早期的示例项目,现在该项目的核心功能已整合到官方主库中,无需单独寻找Stub IDP仓库,直接使用主库即可实现断言生成与签名:

  • .NET Framework:通过NuGet包Sustainsys.Saml2引用
  • .NET Core/.NET 5+:使用Sustainsys.Saml2.AspNetCore2(适配ASP.NET Core)或Sustainsys.Saml2核心包

其他可选库

  • ITfoxtec.Identity.Saml2:成熟的SAML 2.0库,对.NET全平台支持友好,可轻松生成签名断言

实现步骤(以Sustainsys.Saml2为例)

  1. 安装依赖包

    • .NET Framework:Install-Package Sustainsys.Saml2
    • .NET Core:Install-Package Sustainsys.Saml2.AspNetCore2
  2. 生成并签名SAML断言
    以下是简化代码示例,需根据SAP的具体配置调整断言属性:

    using Sustainsys.Saml2;
    using Sustainsys.Saml2.Configuration;
    using Sustainsys.Saml2.Saml2P;
    using System.Security.Cryptography.X509Certificates;
    
    // 加载用于签名的私钥证书(可从文件或密钥库读取)
    var signingCert = new X509Certificate2("path-to-private-key.pfx", "cert-password");
    
    // 配置IDP元数据(需匹配SAP SP的要求)
    var idpConfig = new IdentityProvider(new EntityId("your-idp-entity-id"))
    {
        SigningKeys = { new X509Certificate2SecurityKey(signingCert) }
    };
    
    // 创建断言
    var assertion = new Saml2Assertion(new EntityId("your-idp-entity-id"))
    {
        Subject = new Saml2Subject(new Saml2NameIdentifier("user-id", NameIdentifierFormats.Unspecified)),
        Conditions = new Saml2Conditions
        {
            NotBefore = DateTime.UtcNow.AddMinutes(-5),
            NotOnOrAfter = DateTime.UtcNow.AddMinutes(10),
            AudienceRestrictions = { new Saml2AudienceRestriction(new EntityId("sap-sp-entity-id")) }
        },
        // 添加SAP要求的属性(比如用户姓名、邮箱等)
        AttributeStatements = {
            new Saml2AttributeStatement {
                Attributes = {
                    new Saml2Attribute("FirstName", "John"),
                    new Saml2Attribute("LastName", "Doe")
                }
            }
        }
    };
    
    // 对断言进行签名
    assertion.Sign(idpConfig.SigningKeys.First());
    
    // 将断言序列化为XML字符串,用于发送给SAP
    var xml = assertion.ToXml();
    

SAP适配注意事项

  • 确认SAP Service Provider的实体ID、断言消费者服务(ACS)地址等元数据信息,确保断言中的受众、目标地址匹配
  • SAP通常要求NameID格式为urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress或特定格式,需根据SAP配置调整
  • 签名算法需与SAP要求一致(通常为http://www.w3.org/2001/04/xmldsig-more#rsa-sha256)

关于Sustainsys Stub IDP

早期的Stub IDP是Sustainsys.Saml2的测试用示例IDP项目,现在该示例已整合到Sustainsys.Saml2的官方仓库示例中,你可以直接基于主库的核心API自行实现类似Stub IDP的功能,或参考官方示例项目中的IDP实现代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 05:45:34