Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#.net核心标识服务器4 SustainSys Saml2证书问题_C#_.net_Identityserver4_Core_Sustainsys Saml2 - Fatal编程技术网

c#.net核心标识服务器4 SustainSys Saml2证书问题

c#.net核心标识服务器4 SustainSys Saml2证书问题,c#,.net,identityserver4,core,sustainsys-saml2,C#,.net,Identityserver4,Core,Sustainsys Saml2,我在尝试将idp添加到身份验证服务时遇到问题 我的客户正在使用forgerock登录,并希望我们在SAML中使用SSO 我在一个旧项目中使用了Jitbit的简单SAML2.0 ASP.NET组件 但我正在用identityserver4在.net core中重新设计我的应用程序,并希望利用sustainsys实现的额外优势 SSO登录的类型是带有ACS回调的简单重定向 我所掌握的资料如下: SamlEndpoint-要重定向到的URL EntityId-我的实体Id AcsUrl-要返回到的U

我在尝试将idp添加到身份验证服务时遇到问题

我的客户正在使用forgerock登录,并希望我们在SAML中使用SSO

我在一个旧项目中使用了Jitbit的简单SAML2.0 ASP.NET组件

但我正在用identityserver4在.net core中重新设计我的应用程序,并希望利用sustainsys实现的额外优势

SSO登录的类型是带有ACS回调的简单重定向

我所掌握的资料如下: SamlEndpoint-要重定向到的URL EntityId-我的实体Id AcsUrl-要返回到的URL 证书(字符串)(取自元数据,该元数据不公开)

我已尝试做以下工作:

services.AddAuthentication()
            .AddSaml2(Saml2Defaults.Scheme,
                   options =>
                   {
                       options.SPOptions.EntityId = new EntityId("{MyEntityId}");
                       options.SPOptions.ReturnUrl = new Uri($"ACS URL");
                       options.SPOptions.AuthenticateRequestSigningBehavior = Sustainsys.Saml2.Configuration.SigningBehavior.Never;
                       //options.SPOptions.ServiceCertificates.Add(new ServiceCertificate { 
                       //    Use = CertificateUse.Signing, 
                       //    Certificate = new X509Certificate2(bytes), 
                       //    Status = CertificateStatus.Current 
                       //});
                       var idp =
                           new IdentityProvider(new EntityId("IDP ID"), options.SPOptions)
                           {                                   
                               Binding = Sustainsys.Saml2.WebSso.Saml2BindingType.HttpRedirect,
                               LoadMetadata = false,
                               AllowUnsolicitedAuthnResponse = true, 
                               SingleSignOnServiceUrl = new Uri("Redirect URL") 
                           };
                       options.IdentityProviders.Add(idp);
                   });
我得到的例外是: System.Configuration.ConfigurationErrorsException:“Idp上缺少签名证书配置。”

但是我看不到如何添加我的证书?由于它没有私钥/公钥:

从元数据

<ds:X509Data>                    
    <ds:X509Certificate>
        MIIDYTCCAk..........7tOxUus=                    
    </ds:X509Certificate>                
</ds:X509Data>

Miidytcak…………7弓形虫=
寻找一个方向正确的方向,因为我没有找到它

如果我尝试添加证书(上面已注释掉),则不会得到任何私钥


干杯伙计们

这个问题似乎是一个“鸡和蛋”的问题,在构建
IdentityProvider的新实例时,为
LoadMetadata
赋值并不是一个“安全”的操作

IdentityProvider的
set
属性方法也会对新构造的
IdentityProvider
实例调用
Validate()
。在本例中,您可以在这里看到调用的
Validate()
方法: . 不用太担心,因为私有支持字段
loadMetadata
,已经是
false
(默认值)

这里的问题是,在调用
Validate()
之前,您尚未获得添加IdP签名证书(
IdP.SigningKeys.add(…)
)的能力

您需要:

  • 创建您的
    idp
    ,不要设置
    LoadMetadata
  • 添加签名密钥或进行所需的任何其他配置设置
  • 如果需要,您可以显式设置
    LoadMetadata
    (在您的情况下是可选的,因为它已经是
    false
  • 这将解决此错误并让您上路

    顺便说一句,您的签名证书需要有私钥。我建议生成类似PFX(PKCS#12、PKCS#8等)的文件,您可以使用设置的密码将该文件直接导入
    X509Certificate2
    ,确保使用
    MachineKeySet | Exportable
    设置选项,以便可以访问您的私钥:例如

    byte[]pfx=null;//TODO:获取您的实际证书,从文件、数据库、内存等读取。
    var signingCert=新X509Certificate2(
    pfx,
    “密码”,
    X509keystrageFlags.Exportable | X509keystrageFlags.MachineKeySet);