I have been thinking about this topic and studying the sample you referred me to and have come to the conclusion that what I really want to do in my AspNetZero app is different than what I originally thought I wanted to do.
I think that what I really need to do is use the Azure AD "Password SSO" integration pattern described here:
https://docs.microsoft.com/en-us/azure/active-directory/manage-apps/configure-password-single-sign-on-non-gallery-applications
With this approach, I am thinking that my SaaS customers will set up my application as an "Enterprise Application" in Azure AD and configure it to do Password SSO with my AspNetZero app.
It appears that this approach will allow Azure AD to store the user name and password from my AspNetZero app in order to facilitate SSO.
The only requirement for the AspNetZero SaaS app is that it supports forms authentication - which it does.
Using this approach, my thinking as far as "onboarding" of a new tenant and that tenant's users is currently something like this:
Do you think I am on the right track here? If so, it doesn't sound to me like there is any work for me to do in AspNetZero to make it ready for this approach to SSO. Correct?
The application we are developing is a multi-tenant application using the Single Deployment - Single Database model for multi-tenancy.
One of the features of the application for a tenant is the ability to create and schedule background jobs that handle data processing functions they need to do. So, we have to provide an interface that will give them CRUD capabilities for all of their background jobs.
What would be the recommended approach to using Hangfire in this type of multi-tenant application? All of the Abp dbs are "tenant-aware", but the Hangfire dbs are not, as best as I can tell.
Can you give me some guidance on the approach you would take to developing this capability in an Abp-based application?
Yeah, i got it to work by adding this code to AccountController.cs:
The View for the Login page already had a check for the DisableTenantChange property of the ViewBag. So, no change in Login.cshtml was necessary.
As far as your documentation goes, later that day it occurred to me that I was probably being too hard on you. I was just frustrated that I was having to keep digging on my own. Then I realized that is one of the reasons that there is a job description named "Developer". :)
Continuing to grind on this and it is now looking like I made the change to the wrong Module class.
I changed PhoneBookDemoWebCoreModule.cs.
It looks like I should have changed PhoneBookDemoWebMvcModule.cs, instead.
(Whew, this N-layer architecture of ASP.Net Zero\Abp, can sure get confusing at times.)
In the WebMvcModule I ended up commenting out this existing line:
and replacing it with this line:
Its working now in staging and production. The "Tenant Switcher" is still showing on the Sign In page, but surely I can figure out how to remove it.
You guys have extensive documentation, true, but your architecture is so complex that it seems that there are still a lot of under-documented areas. I would say this is one.
I'm working through the Phonebook example and can't get subdomain tenant resolution during SignIn to work in either a staging or production environment.
I've tried defining the MultiTenancy.DomainFormat Property in the module class:
That matches with the configuration of the WebSiteRootAddress in appsettings.Staging.json and appsettings.Production.json:
Multi-tenancy works in general with this setup, but only by using the "Tenant Switcher", which is not what I want in production.
I just want the application to match the subdomain in the Url to the value of TenantId in the Tenant table in the database, and execute the login credentials against the users that belong to that tenant.
Secondarily, I prefer that the Tenanet Switcher control not even show up on the Sign In page in production (assuming subdomain tenant resolution is working properly).
I figured out how to get past this error, but the addition of the MultiTenancy.DomainFormat property does not seem to make any difference in getting the application to resolve tenant based on subdomain. So, I still need help with figuring that out.
For anyone that runs across this ticket later on, here is what my problem was when getting the ComponentNotFoundException:
I need to to a type to the Depends On attribute at the top of the module. I needed to add this:
which the required this:
using Abp.Web
Now the application will load again from the staging server. But, still no success in getting tenant resolution via subdomain.
I'm going to open another ticket on the subdomain resolution problem since that wasn't the primary subject of this ticket.
In my testing of the Phonebook demo application, I have been unable to get automatic subdomain-based tenant resolution to work in either a staging or production environment.
I thought it would just work automatically, but it didn't. So, I read some more on this page in the Abp documentation:
https://aspnetboilerplate.com/Pages/Documents/Multi-Tenancy#switching-between-host-and-tenants
Based on that page, I added this line to my PhoneBookDemoCoreModule.cs file:
Everything builds fine with that line, but then after publishing the Mvc project to my staging and production web servers, I get this error when trying browse to the application:
<br> This is how I have my appsettings.staging.json and appsettings.production.json files configured:
If I remove the Configuration.Modules.AbpWebCommon().MultiTenancy.DomainFormat line from the module and re-publish, everything works fine again, in terms of multitenancy - just no automatic tenant identification based on subdomain.
Ok, thanks for pointing me in the right direction.
Gave that a try, but still no luck.
I think the problem is that I don't have the address of a symbol server that has the Abp symbols.
Does Volosoft maintain a symbol server for Abp packages?
If so, what is the address of the symbol server?
I am working on coming up to speed on ASP.NET Zero and Abp. I am currently working through the PhonebookDemo tutorial using ASP.NET Core 2.2 MVC.
I followed the instructions on this page of your Abp documentation to make sure VS 2017 has source link enabled:
https://aspnetboilerplate.com/Pages/Documents/Debugging
Here is what my settings look like:
When I debug the MVC project it tells me that the Abp symbols are not loaded:
<br> Is there a symbol server for Abp somewhere that I need to be pointing to?