我正在尝试使用IdentityServer4和ITfoxtec.Identity.Saml2库实现SAML2.0身份验证。
第一步是通过LDAP连接登录,这个部分运行良好,我得到了用户声明。
下一步是使用AD集成登录。
我主要学习本教程
https://developer.okta.com/blog/2020/10/23/how-to-authenticate-with-saml-in-aspnet-core-and-csharp
Saml配置代码如下
services.Configure<Saml2Configuration>(saml2Configuration =>
{
saml2Configuration.AllowedAudienceUris.Add(saml2Configuration.Issuer);
var entityDescriptor = new EntityDescriptor();
entityDescriptor.ReadIdPSsoDescriptorFromUrl(new Uri(Configuration["Saml2:IdPMetadata"]));
if (entityDescriptor.IdPSsoDescriptor != null)
{
saml2Configuration.SingleSignOnDestination = entityDescriptor.IdPSsoDescriptor.SingleSignOnServices.First().Location;
saml2Configuration.SignatureValidationCertificates.AddRange(entityDescriptor.IdPSsoDescriptor.SigningCertificates);
}
else
{
throw new Exception("IdPSsoDescriptor not loaded from metadata.");
}
});
services.AddSaml2();在服务器重定向之后,在显示Idp登录页之前,我有一个错误:“证书在应用程序端没有正确配置”。
这是我第一次讨论SAML协议。任何帮助都是非常感谢的。
编辑:错误在AD端
发布于 2021-03-11 20:26:18
有关更多信息,请访问ITfoxtec.Identity.Saml2 文档和ASP.NET芯样。
我不知道你在哪里看到了错误。它是在IdentityServer4应用程序还是在AD中?
您显示的配置读取AD元数据并设置IdP配置。您还需要加载依赖方配置。
services.Configure<Saml2Configuration>(Configuration.GetSection("Saml2"));并设置依赖方签署证书,例如,如下所示
saml2Configuration.SigningCertificate = CertificateUtil.Load(AppEnvironment.MapToPhysicalFilePath(
Configuration["Saml2:SigningCertificateFile"]), 配置在一起
services.Configure<Saml2Configuration>(Configuration.GetSection("Saml2"));
services.Configure<Saml2Configuration>(saml2Configuration =>
{
saml2Configuration.SigningCertificate = CertificateUtil.Load(AppEnvironment.MapToPhysicalFilePath(
Configuration["Saml2:SigningCertificateFile"]), Configuration["Saml2:SigningCertificatePassword"]);
saml2Configuration.AllowedAudienceUris.Add(saml2Configuration.Issuer);
var entityDescriptor = new EntityDescriptor();
entityDescriptor.ReadIdPSsoDescriptorFromUrl(new Uri(Configuration["Saml2:IdPMetadata"]));
if (entityDescriptor.IdPSsoDescriptor != null)
{
saml2Configuration.SingleSignOnDestination = entityDescriptor.IdPSsoDescriptor.SingleSignOnServices.First().Location;
saml2Configuration.SingleLogoutDestination = entityDescriptor.IdPSsoDescriptor.SingleLogoutServices.First().Location;
saml2Configuration.SignatureValidationCertificates.AddRange(entityDescriptor.IdPSsoDescriptor.SigningCertificates);
}
else
{
throw new Exception("IdPSsoDescriptor not loaded from metadata.");
}
});
services.AddSaml2(); 备注
为了解决像您这样的情况,我创建了FoxIDs,它支持OpenID连接,可以用SAML2.0连接到AD。FoxID处理OpenID连接和SAML2.0之间的转换。实际上,FoxID也使用ITfoxtec.Identity.Saml2库。
https://stackoverflow.com/questions/66587493
复制相似问题