ASP에서 인증되지 않은 경우 로그인으로 리디렉션합니다.NET 코어
이전 ASP에서.NET MVC, 사용자가 인증되지 않은 경우 로그인 작업으로 리디렉션하는 옵션이 있습니다.
저는 ASP와 같은 것이 필요합니다.NET Core, 그래서 I:
- ASP를 만들었습니다.Visual Studio 템플릿의 NET Core 프로젝트
- 추가된
[Authorize]
어떤 자의적인 행동으로. - 브라우저에서 해당 보기를 열었습니다.
구성하지 않았기 때문에 리디렉션을 기대하지 않습니다.그러나 자동으로 로그인 작업으로 리디렉션됩니다!
이 옵션은 어디서/어떻게 설정됩니까?
현재 aspnet core 버전(2.1.0)에서는 이 기능이 변경되었으므로 다음 확장을 사용할 수 있습니다.
services.ConfigureApplicationCookie(options => options.LoginPath = "/login");
또는
services
.AddAuthentication()
.AddCookie(options =>
{
options.LoginPath = "/login";
options.LogoutPath = "/logout";
});
2.0으로 마이그레이션하는 방법에 대한 자세한 내용은 이 문서를 참조하십시오.
리디렉션이 내 앱에서 전혀 작동하지 않았고 여기 있는 솔루션 중 수정된 것은 없지만 사용 중입니다.Status Code Pages
실행:
app.UseStatusCodePages(async context =>
{
var response = context.HttpContext.Response;
if (response.StatusCode == (int)HttpStatusCode.Unauthorized ||
response.StatusCode == (int)HttpStatusCode.Forbidden)
response.Redirect("/Authentication");
});
app.UseMvc(...
다음을 사용하여 경로를 구성할 수 있습니다.CookieAuthenticationOptions
학급.
이런 거.
app.UseCookieAuthentication(new CookieAuthenticationOptions {
LoginPath = new PathString("/Login/"),
AuthenticationType = "My-Magical-Authentication",
// etc...
},
});
쿠키 인증 처리기에 대한 업데이트된 링크입니다.
관심이 있는 모든 사용자는 AddIdentity 서비스 공급자를 통해 이 작업을 수행할 수도 있습니다.
services.AddIdentity<User, IdentityRole>(options =>
{
options.Cookies.ApplicationCookie.AutomaticAuthenticate = true;
options.Cookies.ApplicationCookie.AutomaticChallenge = true;
options.Cookies.ApplicationCookie.LoginPath = "/Auth/Login";
})
.AddEntityFrameworkStores<MehandiContext>()
.AddDefaultTokenProviders();
그리고 여기서 설명하는 것처럼: https://stackoverflow.com/a/41643105/5784635
저는 2017년 4월에 이것을 시도했고 그리고."Microsoft.AspNetCore.Identity.EntityFrameworkCore": "1.1.0"
리다이렉트가 되지 않아요. 저는 그것을 사용해야 했습니다.1.0.1
버전
시작 파일의 이 코드 블록은 에서 작동합니다.Net Core 3.1
services.ConfigureApplicationCookie(options =>
{
// Cookie settings
options.Cookie.HttpOnly = true;
options.ExpireTimeSpan = TimeSpan.FromMinutes(5);
options.LoginPath = "/Identity/Account/Login";
options.AccessDeniedPath = "/Identity/Account/AccessDenied";
options.SlidingExpiration = true;
});
닷넷 코어가 쿠키 인증을 구성하는 방법은 아이덴티티 프레임워크를 사용하는 것입니다.새로운 프로젝트의 경우 명령줄로 이동하여 다음과 같은 작업을 수행하는 것이 좋습니다.
dotnet new mvc -o ExampleProject --auth Individual
Startup.cs 에서 다음 방법을 다음과 같이 수정하여 인증 프로세스를 완전히 제어할 수 있습니다.
public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
services.AddIdentity<IdentityUser, IdentityRole>()
// services.AddDefaultIdentity<IdentityUser>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1)
.AddRazorPagesOptions(options =>
{
options.AllowAreas = true;
options.Conventions.AuthorizeAreaFolder("Identity", "/Account/Manage");
options.Conventions.AuthorizeAreaPage("Identity", "/Account/Logout");
});
services.ConfigureApplicationCookie(options =>
{
options.LoginPath = $"/Identity/Account/Login";
options.LogoutPath = $"/Identity/Account/Logout";
options.AccessDeniedPath = $"/Identity/Account/AccessDenied";
});
// using Microsoft.AspNetCore.Identity.UI.Services;
services.AddSingleton<IEmailSender, EmailSender>();
}
참조: https://learn.microsoft.com/en-us/aspnet/core/security/authentication/scaffold-identity?view=aspnetcore-2.2&tabs=visual-studio#full
개인적으로 선호하는 인증은 IdentityServer4의 하이브리드 흐름으로, 단일 로그온을 사용하여 여러 애플리케이션을 구성할 수 있는 범위를 제공합니다.
배치는 구성 미들웨어 파이프라인에서 중요해야 합니다.
app.UseSession();
app.UseAuthentication();
app.UseStatusCodePages(context => {
var response = context.HttpContext.Response;
if (response.StatusCode == (int)HttpStatusCode.Unauthorized ||
response.StatusCode == (int)HttpStatusCode.Forbidden)
response.Redirect("/Login");
return Task.CompletedTask;
});
app.UseClaimsMiddleware();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Login}/{action=Index}/{id?}");
endpoints.MapRazorPages();
});
위의 코드는 spnet core 3.1에서 Identity Authentication을 사용하는 경우에 잘 작동합니다.
- 먼저 다음 코드를 Startup.cs 파일에 추가해야 합니다.
services.ConfigureApplicationCookie(options =>
{
options.Cookie.Name = ".AspNetCore.Identity.Application";
options.AccessDeniedPath = "/User/PageNotAllowed";
});
- 컨트롤러에서 사용자 계정 관리를 담당하는 작업 생성(내 경우 User 클래스)
public IActionResult PageNotAllowed()
{
return View();
}
- 마지막 단계는 다음을 생성하기만 생성하면 됩니다.
PageNotAllowed
당신의 취향에 맞게 보세요.
기본적으로 "로그인" 페이지는 "계정" 폴더에 배치되어야 하고 페이지는 "계정/로그인"과 같이 "로그인"이라고 불러야 하기 때문에 응용프로그램이 로그인 페이지의 위치를 알고 있는 이유
따라서 "계정" 폴더를 "계정 폴더"와 같은 다른 폴더로 변경하면 페이지를 찾을 수 없다는 http 404가 표시됩니다.
로그인 페이지가 "Program.cs " 파일로 이동할 위치를 명시적으로 지정하려면 다음 "LoginPath" 정의를 추가합니다.
builder.Services.AddAuthentication().AddCookie("YourCookieName", options =>
{
options.Cookie.Name = "YourCookieName";
options.LoginPath = "/Account/Login";
});
위의 예는 .NET 6에서 가져온 것입니다.
언급URL : https://stackoverflow.com/questions/40217623/redirect-to-login-when-unauthorized-in-asp-net-core
'programing' 카테고리의 다른 글
도커 구성을 위해 환경 변수를 전달하는 방법 (0) | 2023.08.29 |
---|---|
브라우저 자동 완성/수정 양식이 Ajax 요청에서 작동하지 않음 (0) | 2023.08.29 |
BLOB 및 CLOB 설명 (0) | 2023.08.29 |
컨텍스트 관리자 커서에 대한 Mariadb Python 모듈 유형 암시 (0) | 2023.08.24 |
jquery를 닫으려면 외부 메뉴를 클릭 (0) | 2023.08.24 |