C# 添加多个租户
将多个客户端添加到配置中的首选方式是什么。我们有一些客户希望继续使用ADF,因此他们有不同的端点/元数据 目前,我尝试在启动时从数据库读取配置,然后为每个数据库注册一个新的Saml12 authC# 添加多个租户,c#,identityserver4,sustainsys-saml2,C#,Identityserver4,Sustainsys Saml2,将多个客户端添加到配置中的首选方式是什么。我们有一些客户希望继续使用ADF,因此他们有不同的端点/元数据 目前,我尝试在启动时从数据库读取配置,然后为每个数据库注册一个新的Saml12 auth private static void AddSaml2Client(AuthenticationBuilder builder, DomainProvider provider, string Saml2LocalEndpoint) {
private static void AddSaml2Client(AuthenticationBuilder builder, DomainProvider provider, string Saml2LocalEndpoint)
{
var settings = JsonHelpers.ParseJsonStringToObject<Saml2Setting>(provider.Settings);
if (settings == null
|| string.IsNullOrEmpty(settings.MetadataLocation)
|| string.IsNullOrEmpty(settings.ProviderEndPoint))
{
Log.Error($"Missing or invalid settings for SAML2 client on {provider.DomainName}");
return;
}
builder.AddSaml2(provider.Name.Trim(), provider.Name.Trim(), options =>
{
options.SPOptions.EntityId = new EntityId(Saml2LocalEndpoint);
options.IdentityProviders.Add(new IdentityProvider(
new EntityId(settings.ProviderEndPoint), options.SPOptions)
{
MetadataLocation = settings.MetadataLocation,
LoadMetadata = settings.LoadMetadata,
});
});
}
private static void AddSaml2Client(AuthenticationBuilder、DomainProvider提供程序、字符串SAML2LocalLendPoint)
{
var settings=JsonHelpers.ParseJsonStringToObject(provider.settings);
如果(设置==null
||string.IsNullOrEmpty(settings.MetadataLocation)
||string.IsNullOrEmpty(settings.ProviderEndPoint))
{
Log.Error($“缺少{provider.DomainName}上SAML2客户端的设置或设置无效”);
返回;
}
builder.AddSaml2(provider.Name.Trim(),provider.Name.Trim(),options=>
{
options.SPOptions.EntityId=新的EntityId(Saml2LocalEndpoint);
options.IdentityProviders.Add(新IdentityProvider(
新EntityId(settings.ProviderEndPoint)、options.SPOptions)
{
MetadataLocation=settings.MetadataLocation,
LoadMetadata=settings.LoadMetadata,
});
});
}
当我将两个不同的客户端添加到配置中时,一个工作正常,但另一个返回时出现了未处理的异常:没有实体id为的Idphttp://xxxxx 未找到
错误
当你设置SPOptions时,有几点我还是有点模糊。EntityId这应该是我的端点(我估计是)还是客户
另外,在创建AddSaml2时,该方案指的是什么,我在任何文档中都看不到
谢谢
AddSaml2
,则会添加Saml2处理程序的多个实例。每个模块都需要有一个唯一的模块路径
。您在没有实体id为的Idp时看到的错误…
就是由此引起的。第一个处理程序抛出一个错误,因为现在有另一个处理程序知道Idp,所以它不会抛出错误。唯一的Modulepath
值将解决此问题SPOptions.EntityId
是您的标识符,应设置为每个实例的ModulePath
的完整URL。请注意,从逻辑上讲,您正在创建多个Saml2 SP—每个调用AddSaml2
一个SP,因此每个SP都应该具有唯一的ID最后,还有另一个选项-使用一个调用
AddSaml2
并添加多个身份提供者。这将把所有不同的SAML2 IDP放在一个身份验证方案下。但是,由于您已使用IdentityServer4
标记了该问题,因此我不建议使用它-IdSrv4希望每个用户显示的身份验证选项对应于一个方案。因此,请使用多个代码添加SAML2
。我只是想提一下,以使文章完整。看来这就解决了问题,正如你所说,我遗漏了ModulePath部分。在等待客户将其端点更改为confirmyep时,我确实遇到了另一个问题,即响应似乎缺少一些数据,但我非常确定这是一个客户机配置问题。谢谢你的帮助