Как заставить приложение Asp.Net Core 3.0 использовать страницу входа в систему Identity - PullRequest
0 голосов
/ 15 октября 2019

Я использую Asp.Net Core 3.0.1, и мне нужно принудительно перенаправить на страницу входа в систему Identity, но проблема после изменения конфигурации запуска по-прежнему перенаправляет меня на страницу / Home / Index, и вот мой класс запускакод:

public class Startup
{
public Startup(IConfiguration configuration)
{
    Configuration = configuration;
}

public IConfiguration Configuration { get; }

// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
    //Conection Provider for Identity
    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(Configuration.GetConnectionString("yourConnection")));

    services.AddIdentity<IdentityUser, IdentityRole>(options => options.SignIn.RequireConfirmedAccount = true)
        .AddEntityFrameworkStores<ApplicationDbContext>()
        .AddDefaultTokenProviders();


    services.AddMemoryCache();


    services.Configure<IdentityOptions>(options =>
    {
        //Password Settings
        options.Password.RequireDigit = true;
        options.Password.RequireLowercase = true;
        options.Password.RequireNonAlphanumeric = true;
        options.Password.RequireUppercase = true;
        options.Password.RequiredLength = 8;
        options.Password.RequiredUniqueChars = 1;

        //Lockout Settings
        options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(5);
        options.Lockout.MaxFailedAccessAttempts = 3;
        options.Lockout.AllowedForNewUsers = true;

        //User settings
        options.User.AllowedUserNameCharacters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+#";
        options.User.RequireUniqueEmail = true;

    });

    //Configure application cookie
    services.ConfigureApplicationCookie(options =>
    {
        options.Cookie.HttpOnly = true;
        options.ExpireTimeSpan = TimeSpan.FromMinutes(1);
        options.LoginPath = "/Login";
        options.LogoutPath = "/Logout";
        options.AccessDeniedPath = "/AccessDenied";
        options.SlidingExpiration = true;
    });


    services.AddMvc(options =>
    {
        options.EnableEndpointRouting = false;
    })
    .SetCompatibilityVersion(Microsoft.AspNetCore.Mvc.CompatibilityVersion.Version_3_0)
    .AddSessionStateTempDataProvider();


    services.AddDistributedMemoryCache();
    services.AddSession(options => {
        options.IdleTimeout = TimeSpan.FromMinutes(1);
    });


    services.AddTransient<IEmailSender, EmailSender>(i =>
        new EmailSender(
            Configuration["EmailSender:Host"],
            Configuration.GetValue<int>("EmailSender:Port"),
            Configuration.GetValue<bool>("EmailSender:EnableSSL"),
            Configuration["EmailSender:UserName"],
            Configuration["EmailSender:Password"]
        ));

    services.AddControllersWithViews();
    services.AddRazorPages(options =>
    {
        options.Conventions.ConfigureFilter(new IgnoreAntiforgeryTokenAttribute());
    });

}


public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IServiceProvider serviceProvider)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
        app.UseDatabaseErrorPage();
    }
    else
    {
        app.UseExceptionHandler("/Home/Error");
        app.UseHsts();
    }
    app.UseHttpsRedirection();
    app.UseStaticFiles();


    app.UseRouting();

    app.UseAuthentication();
    app.UseAuthorization();

    app.UseSession();
    app.UseMvc(routes =>
    {
        //routes.MapRoute(
        //    name: "Identity",
        //    template: "Identity/{controller=Account}/{action=Login}/{id?}");

        routes.MapAreaRoute(
            name: "Identity",
            areaName: "Identity",
            template: "Identity/{controller=Account}/{action=Login}/{id?}");


    });

    app.UseCookiePolicy();

    CreateRoles(serviceProvider).Wait();
    RotativaConfiguration.Setup((Microsoft.AspNetCore.Hosting.IHostingEnvironment) env);

}

Как я могу принудительно запустить мое приложение с / Account / Login в области идентификации?

Вот некоторая ссылкаЯ искал в той же проблеме:

  1. Перенаправление на вход в систему при несанкционированном доступе в ASP.NET Core

  2. https://wakeupandcode.com/authentication-authorization-in-asp-net-core-razor-pages/

  3. https://dotnetcoretutorials.com/2017/09/16/cookie-authentication-asp-net-core-2-0/

Ответы [ 2 ]

0 голосов
/ 15 октября 2019

Я тоже использую netcore 3.0.

Мои различия в вашем коде

        app.UseAuthorization();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllerRoute(
                name: "default",
                pattern: "{controller=Home}/{action=Index}/{id?}");
        });

Мой код работает, когда cookie недействителен. Я использую cookie, как это

services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
                .AddCookie(options =>
                {
                    options.Cookie.Name = "<Your cookiename>";
                    options.LoginPath = "auth/login";//This should login page path
                    options.LogoutPath = "auth/logout";//This should logout page path
                    options.ExpireTimeSpan = TimeSpan.FromDays(1);
                    options.SlidingExpiration = false;
                });

Надеюсь, это поможет:)

0 голосов
/ 15 октября 2019

У меня была такая проблема раньше, в ядре .net 2.2, и я исправил ее в файле launchSettings.json , как вы можете видеть в Документах Microsoft

* 1006. * Кажется, это работает и для версии 3, как вы можете видеть в примере ниже для нескольких сред:
{
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:54339/",
      "sslPort": 0
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_My_Environment": "1",
        "ASPNETCORE_DETAILEDERRORS": "1",
        "ASPNETCORE_ENVIRONMENT": "Staging"
      }
    },
    "EnvironmentsSample": {
      "commandName": "Project",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Staging"
      },
      "applicationUrl": "http://localhost:54340/"
    },
    "Kestrel Staging": {
      "commandName": "Project",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_My_Environment": "1",
        "ASPNETCORE_DETAILEDERRORS": "1",
        "ASPNETCORE_ENVIRONMENT": "Staging"
      },
      "applicationUrl": "http://localhost:51997/"
    }
  }
}

В моем случае мне пришлось добавить "launchUrl": "my url"

Какследующий фрагмент:

{
  "$schema": "http://json.schemastore.org/launchsettings.json",
  "iisSettings": {
    "windowsAuthentication": false, 
    "anonymousAuthentication": true,
    "iisExpress": {
      "launchUrl": "[your url here]"
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "launchUrl": "[your url here]",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }
  }
}
...