使用 ITfoxtec.Identity.Saml2 登录用户
Use ITfoxtec.Identity.Saml2 to login user
我正在尝试使用 IdentityServer4 和 ITfoxtec.Identity.Saml2 库实现 SAML2.0 身份验证。
第一步是通过 LDAP 连接登录,这部分运行良好,我收到了用户声明。
下一步是使用 AD FS 集成登录
我主要遵循了本教程
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 FS 端
更多信息,ITfoxtec.Identity.Saml2 documentation and a ASP.NET Core sample.
我不确定你在哪里看到错误。它是在 IdentityServer4 应用程序中还是在 AD FS 中?
您显示的配置读取 AD FS 元数据并设置 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 Connect 并且可以连接到具有 SAML 2.0 的 AD FS。 FoxIDs 处理 OpenID Connect 和 SAML 2.0 之间的转换。实际上,FoxIDs 也使用 ITfoxtec.Identity.Saml2 库。
我正在尝试使用 IdentityServer4 和 ITfoxtec.Identity.Saml2 库实现 SAML2.0 身份验证。
第一步是通过 LDAP 连接登录,这部分运行良好,我收到了用户声明。
下一步是使用 AD FS 集成登录
我主要遵循了本教程
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 FS 端
更多信息,ITfoxtec.Identity.Saml2 documentation and a ASP.NET Core sample.
我不确定你在哪里看到错误。它是在 IdentityServer4 应用程序中还是在 AD FS 中?
您显示的配置读取 AD FS 元数据并设置 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 Connect 并且可以连接到具有 SAML 2.0 的 AD FS。 FoxIDs 处理 OpenID Connect 和 SAML 2.0 之间的转换。实际上,FoxIDs 也使用 ITfoxtec.Identity.Saml2 库。