使用 Identity Server 和 SaasKit 发布 securig MultiTenant 应用程序
Posted
技术标签:
【中文标题】使用 Identity Server 和 SaasKit 发布 securig MultiTenant 应用程序【英文标题】:Issue securig MultiTenant Application with Identity Server & SaasKit 【发布时间】:2019-01-14 08:01:06 【问题描述】:我创建了一个多租户 ASP.NET Core Web API 并由 Identity Server 保护。我使用 SaasKit Multitenancy nugget 进行多租户。多租户工作正常。我遇到了身份验证问题。
我为不同的租户使用了不同的主机名。我为每个租户定义了不同的范围,并根据租户的范围检索令牌。对 API 的第一个请求工作正常。但是当第二个租户尝试访问 API 时,它会因受众验证而出错。令牌具有有效受众,但 Web API 仍使用第一个请求的受众。
这是我的 API 中的代码:
services.AddSingleton<IOptionsMonitor<IdentityServerAuthenticationOptions>, IdentityServerTenantProvider>();
services.AddAuthentication(IdentityServerAuthenticationDefaults.AuthenticationScheme)
.AddIdentityServerAuthentication(options =>
options.RequireHttpsMetadata = false;
);
这里是 IdentityServerTenantProvider 的实现
protected override IdentityServerAuthenticationOptions Create(IdentityServerAuthenticationOptions options, string name, string tenant, string tenantHostName)
var currentTenantContext = this._memoryCache.Get(tenantHostName) as TenantContext<PaperSaveAPITenant>;
options.Authority = currentTenantContext.Tenant.Authority;
options.ApiName = currentTenantContext.Tenant.ApiName;
return base.Create(options, name, tenant, tenantHostName);
对于租户 2,它正在设置正确的 API 名称和权限,但在验证令牌 API 时仍然使用第一个租户的 API 名称。
【问题讨论】:
您的问题解决了吗?我也在研究 IdentityServer + 多租户应用程序。如果您能够解决此问题,请分享更多信息。 【参考方案1】:我可以使用以下代码解决它。
services.AddAuthentication(IdentityServerAuthenticationDefaults.AuthenticationScheme)
.AddIdentityServerAuthentication(IdentityServerAuthenticationDefaults.AuthenticationScheme,
jwtOptions =>
,
referenceOptions =>
);
然后为 JwtBearerOptions(用于 JWT 令牌)和 OAuth2IntrospectionOptions(用于参考令牌)注册 IOptionMonitor。我同时使用了这两种令牌,因为我的 API 支持这两种类型的令牌。 (参考和智威汤逊)。如果您只使用其中之一,则无需同时指定两者。
services.AddSingleton<IOptionsMonitor<JwtBearerOptions>, JWTOptionsProvider>();
services.AddSingleton<IOptionsMonitor<OAuth2IntrospectionOptions>, OAuth2IntrospectionOptionsProvider>();
并且您需要创建从 TenantOptionsProvider 继承的“JWTOptionsProvider”类和从 TenantOptionsProvider 继承的“OAuth2IntrospectionOptionsProvider”类
【讨论】:
以上是关于使用 Identity Server 和 SaasKit 发布 securig MultiTenant 应用程序的主要内容,如果未能解决你的问题,请参考以下文章
使用Identity Server 4建立Authorization Server
WIF(使用 Thinktecture Identity Server)和双工 WCF 通道
使用 Identity Server 和 SaasKit 发布 securig MultiTenant 应用程序
FireDAC,阵列DML,SQL Server和IDENTITY_INSERT