You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ABP.IO Blazor WebAssembly实现DomainTenantResolver免选租户登录

基于ABP.IO Blazor WebAssembly的免选租户登录实现方案

子域名DomainTenantResolver方案(推荐最优方案)问题修复

你之前仅添加回调地址后租户用户无法登录,核心原因是IdentityServer端未正确从域名解析租户,且认证请求未携带租户标识,按以下步骤修复即可:

  • 第一步:调整服务端租户解析器优先级,在IdentityServer/API宿主服务的模块类ConfigureServices方法中添加如下配置,保证域名解析优先级最高:
Configure<AbpTenantResolveOptions>(options =>
{
    // 开发环境配置,将localhost替换为生产环境根域名即可,格式为{0}.你的根域名
    options.TenantResolvers.Insert(0, new DomainTenantResolveContributor("{0}.localhost"));
});
  • 第二步:替换单租户回调地址为通配符配置,无需每个租户单独插入数据库,直接在IdentityServer客户端配置的RedirectUris、PostLogoutRedirectUris中添加通配符地址:https://*.localhost/authentication/login-callback、https://*.localhost/authentication/logout-callback,ABP原生支持通配符匹配。
  • 第三步:Blazor端配置OIDC请求携带租户标识,在WebAssembly项目的Program.cs中修改OIDC配置,跳转认证时自动传递解析到的子域名租户:
builder.Services.AddOidcAuthentication(options =>
{
    builder.Configuration.Bind("OAuth", options.ProviderOptions);
    options.ProviderOptions.Events = new OpenIdConnectEvents
    {
        OnRedirectToIdentityProvider = context =>
        {
            var hostSegments = context.Request.Host.Host.Split('.');
            if (hostSegments.Length >=3) // 匹配子域名格式
            {
                context.ProtocolMessage.SetParameter("__tenant", hostSegments[0]);
            }
            return Task.CompletedTask;
        }
    };
});

QueryString租户传参方案问题修复

该方案参数无法传递的核心原因是默认的RemoteAuthenticatorView不会自动携带URL中的租户参数,修改你的Authenticate组件代码即可:

@page "/authentication/{action}"
@using Microsoft.AspNetCore.Components.WebAssembly.Authentication
@inject NavigationManager NavManager
<RemoteAuthenticatorView Action="@Action" OnRedirectToStartLogin="InjectTenantParam" />

@code{
    [Parameter] public string Action { get; set; }

    private void InjectTenantParam(RedirectContext context)
    {
        if (NavManager.TryGetQueryString<string>("__tenant", out var tenantId))
        {
            context.Properties.Items["__tenant"] = tenantId;
        }
    }
}

修改后无需调整服务端默认配置,ABP默认已启用QueryStringTenantResolveContributor,可自动识别请求中的__tenant参数。

内容的提问来源于stack exchange,提问作者dlboutwe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 10:18:04