我在.net-core中使用cookieauthentication实现了一个实现。
但是,我遇到以下问题: 当我没有登录并且设置AuthorizationAttribute时访问页面时,它只显示一个空白页面,而不是将我重定向到登录页面。
Fiddler告诉我,我收到了401未经授权的回复。 Location Header设置为/ Home,但浏览器会忽略,因为状态代码为401。
cookie实现如下所示:
app.UseCookieAuthentication(new CookieAuthenticationOptions()
{
AuthenticationScheme = CookieAuthenticationDefaults.AuthenticationScheme,
AutomaticAuthenticate = true,
AutomaticChallenge = true,
LoginPath = new PathString("/Home"),
LogoutPath = new PathString("/logout"),
AccessDeniedPath = new PathString("/accessdenied")
});
AuthorizationAttribute工作正常,因为我可以在登录后立即访问该页面。
根据我的理解,AutomaticChallenge = true应该处理这个问题。这是错的吗?
答案 0 :(得分:1)
您遇到AutomaticChallenge选项的问题。此选项导致IISIntegration和Cookie中间件之间发生冲突,请参阅详细说明here。
如果您使用[授权],解决方案是将以下代码添加到ConfigureServices(IServiceCollection services)
内的startup.cs
services.AddAuthorization(options =>
{
options.DefaultPolicy = new AuthorizationPolicyBuilder("Cookies").RequireAuthenticatedUser().Build();
});
我测试了它并且它有效!