如果服务集合中未配置.pfx文件,Sustainsys.Saml2注销将无法工作



在我的一个项目中,我正在使用Sustainsys.Saml2库和使用identityserver4的asp.net核心应用程序,我找不到合适的配置文档,因此将启动配置如下:

.AddSaml2(option =>
{
option.Notifications.SelectIdentityProvider =
(id, data) => GetProvider(option, tenant); // here we are passing dynamic provider  
option.SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme;
option.SignOutScheme = IdentityServerConstants.DefaultCookieAuthenticationScheme;
option.SPOptions.EntityId = new Sustainsys.Saml2.Metadata.EntityId(samlEntityId);
});
private static IdentityProvider GetProvider(IOptions options, Web.Application.Service.ITenantHandler tenant)
{
TenantDetail tenantDetail = tenant.GetTenantDetail();
var entityId = tenantDetail.SSOSettings.ADFSRelyingPartyUrl;
var idp =
new IdentityProvider(new EntityId(entityId), options.SPOptions)
{
LoadMetadata = true,
MetadataLocation = $"{tenantDetail.SSOSettings.ADFSMetaDataUrl}",
WantAuthnRequestsSigned = false,
DisableOutboundLogoutRequests = false,
AllowUnsolicitedAuthnResponse = false,
Binding = Sustainsys.Saml2.WebSso.Saml2BindingType.HttpRedirect,
};
idp.SigningKeys.AddConfiguredKey(new X509Certificate2(tenantDetail.SSOSettings.SigningCertificate));
var existingEntityProvider = options.IdentityProviders.KnownIdentityProviders.FirstOrDefault(x => x.EntityId.Id == entityId);
if (existingEntityProvider != null)
options.IdentityProviders.Remove(existingEntityProvider.EntityId);
options.IdentityProviders.Add(idp);
options.SPOptions.ServiceCertificates.Add(new ServiceCertificate
{
Certificate = new X509Certificate2(tenantDetail.SSOSettings.SigningCertificate, tenantDetail.SSOSettings.SigningPassword),
Use = CertificateUse.Signing,
Status = CertificateStatus.Current,
});

return idp;
}

此配置适用于以下情况

  • 如果我们在第行添加.pfx文件选项。SPOptions.ServiceCertificates.Add((;此处.cer文件不是接受,因为它也需要私钥
  • 如果我不配置此行选项。SPOptions.ServiceCertificates.Add((;意味着没有证书,则注销在检查时不起作用serviceCertificate,然后使用IDP初始化注销

我的问题是

  • 是否可以仅按照我们的客户端配置.cer文件由于安全原因没有共享pfx文件
  • 如果可能的话,使用.cer文件,那么我需要在哪里进行更改?请提出建议

要启用注销功能,需要一个带有私钥的证书才能对出站注销请求进行签名。所以你需要一个.pfx.

但是您在这里混淆了两个不同的证书。您从IdentityProvider获得的.cer文件是代表其签名密钥的文件。他们永远不应该把私钥(.pfx文件(给你。

ServiceCertificate是代表您的应用程序的证书。这是你可以自己产生的东西。它不需要是一个购买的证书,你可以创建一个自签名。然后与IdentityProvider共享库生成的元数据(可在/Saml2访问(-他们需要在配置中注册该元数据。您也可以共享证书的.cer文件。永远不要共享.pfx.

最新更新