新建一个空的 没有验证的新项目
在Startup添加代码如下
public void ConfigureServices(IServiceCollection services)
{
// 添加 Cook 服务
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(options =>
{
options.SlidingExpiration = true;
options.Cookie.HttpOnly = true;
options.Cookie.SameSite = SameSiteMode.Lax;
options.Cookie.Path = "/";
options.LoginPath = "/Home/Index";
options.LogoutPath = "/Home/Index";
});
services.AddMvc();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseBrowserLink();
}
else
{
app.UseExceptionHandler("/Home/Error");
}
// 使用Cook的中间件
app.UseAuthentication();
app.UseStaticFiles();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
登录方法代码如下
var user = new ClaimsPrincipal(
new ClaimsIdentity(new[]
{
new Claim(ClaimTypes.Name, "username"),
}
, "Basic"));
await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, user, new Microsoft.AspNetCore.Authentication.AuthenticationProperties
{
IsPersistent = true,
ExpiresUtc = DateTimeOffset.Now.Add(TimeSpan.FromDays(7)) // 有效时间
});
在需要验证权限的地方 头部加上这个属性 [Authorize]
运行起来 没问题
查看浏览器cookies
如下图
过期时间是 没问题 是 几天之后的
但是 问题来了 页面 开着 不动 差不多 还不到一小时 在操作 竟然 退出了
再次查看浏览器 cookies 发现 上图的东西还在
那么为什么 cookies 都还在 竟然退出 没权限 是不是的设置什么 求解
ps 特地测试了下 之前的 。net franwork 版本的mvc项目 是没问题的
cookie发送到过去了吗?如果发送过去了,或许是解密cookie的时候导致的,查一下log。
[Authorize] 这个是自带的验证 没有自己做任何处理 加这个的 就退出了
@conan_lin: log呢,查一下log。
@Blackheart: 哪里的日志 ? 没有日志啊
@conan_lin: 配置一下log,会记录下来详细的请求信息。
@Blackheart: 请求的cookies 一样的 没错
@conan_lin: 查log啊,,,你怎么运行的,selfhost?iisexpress?还是iis?log会记录下来cookie验证失败的具体原因是什么。比如“Cookies was not authenticated. Failure message: Unprotect ticket failed”这类错误提示。
@Blackheart: 没有对应的错误 cookies 一直存在的 只是跳转到了 登录页
options.ExpireTimeSpan = TimeSpan.FromMinutes(1440);
一样的
解决了嘛 ,我也遇到了
– Sumi-eCrow 1年前