Starts in:
0 DAY
22 HRS
56 MIN
40 SEC
Starts in:
0 D
22 H
56 M
40 S

Activities of "balessi75"

Hi @maliming,

I sent you a direct email with details for reproducing/troubleshooting...

hi

I will check and find a way.

Excellent, thank you @mailiming

Hi @maliming,

We are not having any success. We successfully replaced TenantManagment.razor. From there, it wasn't exactly clear to us on how to correctly add the tenant's domain to the action of ImpersonationForm, so for a proof of concept, we hardcoded the action URL as follows:

Once we did this and then attempted to impersonate the tenant, we are directed to the login screen for that tenant (instead of instantly being logged in as the tenant). When we then try to login to the tenant, we receive the following error:

Impersonating a user within a tenant works fine because everything is under the same sub domain URL.

We also tried overriding the OnPostAsync() method of ImpersonateTenantModel and changed return Redirect("~/"); to direct to the tenant's sub domain URL, and this seems to work, but the 'return to impersonator' link no longer appears and were not sure this is the correct way of implementing tenant impersonation with each tenant having it's own subdomain.

Thanks @maliming,

I will try the page overrides and let you know how that works.

In the meantime, can you explain this in more detail?

This requires sharing cookies between the subdomain and the main domain name.

I have limited experience with cookie management and am wondering if there are possible issues or workarounds to consider.

Our project structure looks like this (from Abp Blazor Server template)

ABP 7.0.1 Commercial / Blazor Server / EF / Separated IDS / Non-tiered

Hi, We extended the tenant entity to add a "Host" column which stores a tenant specific subdomain for each tenant (tenant1.domain.com) by following https://blog.antosubash.com/posts/abp-extend-tenant-with-custom-host

We then implemented the following tenant resolver:

	public override async Task ResolveAsync(ITenantResolveContext context)
	{
            var currentContextAccessor = context.ServiceProvider.GetRequiredService<IHttpContextAccessor>();
            var tenantRepository = context.ServiceProvider.GetRequiredService<IHostTenantRepository>();
      
            var host = currentContextAccessor?.HttpContext?.Request.Host.Host;

	    host = GetSubDomain(host);

            if (tenantRepository != null && !host.IsNullOrWhiteSpace())
            {
                var tenant = await tenantRepository.GetTenantByHost(host);
            
                if (tenant != null)
                {
                	context.TenantIdOrName = tenant.Name;
                }
            }
	}

Everything works as expected as we can login to each tenant with a tenant specific subdomain in the URL.

The problem we are finding though is that if we attempt to impersonate a tenant from the host, we are not redirected to the tenant's URL (tenant1.domain.com) instead we stay at at the host URL with no subdomain (domain.com).

Has this tenant impersonation issue ever come up with a basic tenant resolver based on subdomain? Any guidance, examples, or work arounds will be greatly appreciated as tenant impersonation and a custom tenant resolver are both requirements for us.

Hi @liangshiwei,

I was able to get the "SelfUrl" templated correctly based on our needs by overriding....

Volo.Abp.UI.Navigation.UrlsAppUrlProvider

Thank you, I'll close this issue.

Hi @liangshiwei,

Thanks for verifying, the login issue had to do with something on our end that we corrected.

But we were hoping to get more information about the link sent to emails such as the 'Forgot Password' link.

We tried... "SelfUrl": "https://{{tenantName}}.localhost:44327",

...but that didn't work. How and were does the {{tenantName}} placeholder get put into the SelfUrl? Is there another step? Also, we extended the tenant entity to have a "host" column for subdomain resolution. We tried replacing {{tenantName}} with {{host}} but that didn't work either.

When I go to tenant1.domain.net, I can see while debugging, that the custom tenant resolver finds the proper tenant based on the 'tenant1' sub domain.

The problem is that when I go to sign in, I'm properly authenticated against the tenant 'tenant1', but when the following occurs at the end of the login process...

return Redirect(GetRedirectUrl(returnUrl, returnUrlHash));

...I'm sent back to the domain.net instead of tenant1.domain.net which is the URL I originally accessed to login. This causes the login screen to show up again after properly authenticating against tenant1.domain.net.

The 'returnUrl' parameter comes from Volo.Abp.Account.Public.Web.Pages.Account.AccountPageModel.

Also, when a 'forgot password' email is sent with a confirmation link, the link generated always points back to the domain.net URL instead of the tenant1.domain.net URL that was used when clicking the 'Forgot Password' link.

Thanks @liangshiwei ! That was exactly the problem.

I have another question though relating to this were we are creating a custom tenant resolver that resolves based on subdomain.

Using https://blog.antosubash.com/posts/abp-extend-tenant-with-custom-host We now have the tenant properly being resolved based on subdomain, but every redirect goes back to the main domain without the tenant's current subdomain in the URL.

I'm assuming the redirect information is coming from appsettings.json's "App:SelfUrl" and/or "App:RedirectAllowedUrls" settings. How can the system be aware of the tenant subdomain in the URL when the system is redirecting or a user clicks on a email confirmation link? Any information and/or examples you can share would be greatly appreciated.

Thanks

Showing 141 to 150 of 245 entries
Made with ❤️ on ABP v9.1.0-preview. Updated on November 20, 2024, 13:06