c#.net核心标识服务器4 SustainSys Saml2证书问题
我在尝试将idp添加到身份验证服务时遇到问题 我的客户正在使用forgerock登录,并希望我们在SAML中使用SSO 我在一个旧项目中使用了Jitbit的简单SAML2.0 ASP.NET组件 但我正在用identityserver4在.net core中重新设计我的应用程序,并希望利用sustainsys实现的额外优势 SSO登录的类型是带有ACS回调的简单重定向 我所掌握的资料如下: SamlEndpoint-要重定向到的URL EntityId-我的实体Id AcsUrl-要返回到的URL 证书(字符串)(取自元数据,该元数据不公开) 我已尝试做以下工作: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
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);