Redirection to Login for unauthorized users

57 Views Asked by At

I implemented Authorization and Authentication.

  1. In Areas, when i navigate to a controller with Authorize attribute, it redirects to /Account/Login whereas I want it to be redirected to /AreaName/Account/Login.
  2. When redirection is triggered to /Account/Login, it automatically triggers Google Authentication and redirects to Signin with Google page.

Below is the implementation to my Program.cs file.

builder.Services.AddIdentity<ApplicationUser, ApplicationRole>(options =>
{
    options.Password.RequireDigit = true;
    options.Password.RequiredLength = 6;
    options.Password.RequireNonAlphanumeric = false;
    options.Password.RequireUppercase = true;
    options.Password.RequireLowercase = false;
    options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(5);
    options.Lockout.MaxFailedAccessAttempts = 5;
    options.User.RequireUniqueEmail = true;
    options.SignIn.RequireConfirmedEmail = true;

})
    .AddEntityFrameworkStores<ApplicationDbContext>()
    .AddDefaultTokenProviders();

builder.Services.ConfigureApplicationCookie(options =>
{
    options.AccessDeniedPath = "/Error/AccessDenied";
    options.Cookie.Name = "sms_db";
    options.Cookie.HttpOnly = false;
    options.Cookie.SameSite = SameSiteMode.None;
    options.Cookie.SecurePolicy = CookieSecurePolicy.Always;
    options.ExpireTimeSpan = TimeSpan.FromMinutes(60);
    //options.LoginPath = "/Account/Index";
    options.ReturnUrlParameter = CookieAuthenticationDefaults.ReturnUrlParameter;
    options.SlidingExpiration = true;
    options.Events = new CookieAuthenticationEvents
    {
        OnRedirectToLogin = redirectContext =>
        {
            // Area's own login page
            const string area = "/Admin";
            if (redirectContext.Request.Path.StartsWithSegments(area))
            {
                var uriBuilder = new UriBuilder(redirectContext.RedirectUri);
                uriBuilder.Path = area + uriBuilder.Path;
                redirectContext.RedirectUri = uriBuilder.ToString();
            }
            return Task.CompletedTask;
        }
    };
});

builder.Services.AddAuthentication(options =>
{
    options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
    options.DefaultChallengeScheme = GoogleDefaults.AuthenticationScheme;
})
    .AddCookie()
   .AddGoogle(options =>
   {
       IConfigurationSection googleAuthNSection = config.GetSection("Authentication:Google");
       options.ClientId = googleAuthNSection["ClientId"] ?? "951287857071-jb9kljdsnckb40cgentmofbghogrb623.apps.googleusercontent.com";
       options.ClientSecret = googleAuthNSection["ClientSecret"] ?? "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";
   });

Alongwith, default [Authorize] attribute in my controllers.

0

There are 0 best solutions below