ASP. NET Identity Cook ie через домен и субдомены в. Net и Core 2.2 - PullRequest
0 голосов
/ 28 февраля 2020

Я пытаюсь сделать удостоверение личности ie в подобласти, подобной домену.

Если у меня три пользователя,

  • user1
  • user2
  • user3

После того, как любой пользователь вошел в систему, он может получить доступ к другому поддомену с тем же поваром ie, когда пользователь регистрируется впервые.

Пример: если пользователь user1 вошел в систему, он может ввести субдомен user2.domain.com или субдомен user3.domain.com с тем же именем user1 cook ie. и так далее для любых пользователей.

enter image description here

Проблема: После входа в систему с user1 и go для user2 удостоверение личности ie не существует, почему ?? Я использовал asp. net mvc Core2.2 и Entity Framework 2.6

public void ConfigureServices(IServiceCollection services)
    {
        services.AddDataProtection()
        .PersistKeysToFileSystem(GetKyRingDirectoryInfo())
        .SetApplicationName("SharedCookieApp");

        services.ConfigureApplicationCookie(options => {
            options.Cookie.Name = ".AspNet.SharedCookie";
            options.Cookie.Path = "/";
        });

        services.AddAuthentication().AddCookie(options =>
         {
             options.Cookie.Name = ".SharedCookie";
             options.Cookie.Domain = "localhost:44390";
             options.DataProtectionProvider =
                 DataProtectionProvider.Create(new DirectoryInfo("keyRingPath"));
         });

        services.Configure<CookiePolicyOptions>(options =>
        {
            options.CheckConsentNeeded = context => true;
            options.MinimumSameSitePolicy = SameSiteMode.Lax;
        });

        services.AddDbContext<ApplicationDbContext>(options =>
            options.UseSqlServer(
                Configuration.GetConnectionString("uStoreOnlineConnection")));

        services.AddDefaultIdentity<ExtendIdentityUser>(options =>
        {
            options.Password.RequiredLength = 8;
            options.Password.RequireUppercase = false;
            options.Password.RequireNonAlphanumeric = false;
            options.Password.RequiredUniqueChars = 0;
            options.Password.RequireLowercase = false;
        }).AddDefaultUI(UIFramework.Bootstrap4)
        .AddEntityFrameworkStores<ApplicationDbContext>();

        services.AddScoped<IUnitOfWork, UnitOfWork>();
        services.AddScoped<IExtendIdentityUser, ExtendIdentityUserRepository>();

        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

    }

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
            app.UseDatabaseErrorPage();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
            app.UseHsts();
        }
        //app.UseRewriter(new RewriteOptions().Add(new RouteSubDomainRule("localhost:44390", RouteSubDomainBehavior.Rewrite)));
        app.UseHttpsRedirection();
        app.UseStaticFiles();
        app.UseCookiePolicy();
        app.UseAuthentication();

        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
        });
    }

    private DirectoryInfo GetKyRingDirectoryInfo()
    {
        string applicationBasePath = System.AppContext.BaseDirectory;
        DirectoryInfo directoryInof = new DirectoryInfo(applicationBasePath);
        string keyRingPath = Configuration.GetSection("AppKeys").GetValue<string>("keyRingPath");
        do
        {
            directoryInof = directoryInof.Parent;
            DirectoryInfo keyRingDirectoryInfo = new DirectoryInfo($"{directoryInof.FullName}{keyRingPath}");
            if (keyRingDirectoryInfo.Exists)
            {
                return keyRingDirectoryInfo;
            }
        }
        while (directoryInof.Parent != null);
        throw new Exception($"key ring path not foun");
    }
...