在之前的ASP.NET MVC中,如果用户未经过身份验证,则可以选择重定向到登录操作。
我需要与ASP.NET Core相同的东西,所以我:
[Authorize]
添加到某个任意操作我不希望重定向,因为我还没有配置它。但是,它会自动重定向到登录操作!
此选项设置在何处/如何设置?
答案 0 :(得分:8)
使用当前的aspnet核心版本(2.1.0),这已经改变,现在使用可以使用扩展:
services.ConfigureApplicationCookie(options => options.LoginPath = "/login");
或
services
.AddAuthentication()
.AddCookie(options =>
{
options.LoginPath = "/login";
options.LogoutPath = "/logout";
});
您可以详细了解如何迁移到2.0 in this article。
答案 1 :(得分:4)
对于任何有兴趣的人,也可以使用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
版本
答案 2 :(得分:2)
您可以使用CookieAuthenticationOptions
类配置路径。
像这样。
app.UseCookieAuthentication(new CookieAuthenticationOptions {
LoginPath = new PathString("/Login/"),
AuthenticationType = "My-Magical-Authentication",
// etc...
},
});
答案 3 :(得分: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;
});
答案 4 :(得分: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");
});
答案 5 :(得分:0)
放置在配置中间件管道中应该很重要。
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();
});
答案 6 :(得分:-2)
您不需要添加Cookie身份验证。使其保持DRY状态,并使用所需的内容初始化内置的身份验证表单。
第1步:制作具有个人授权的脚手架.NET Core 2.1 Web应用程序:
dotnet new mvc -o YourAppName --auth Individual
第2步:假设您的受保护视图位于名为ClockinController的控制器中,则可以这样指定重定向:
@* from _LoginPartial.cshtml change this line *@
<li><a asp-area="Identity" asp-page="/Account/Login" asp-route-returnUrl="@Url.Action("Index", "Clockin")">Login</a></li>
如果需要为returnUrl添加条件逻辑,则可以选择调用JavaScript函数。