点击上方蓝字关注我们
环境:
.netcore 3.1.1.0
一、cookie认证的期限配置
有两个地方可以进行配置,一个是在startup
的AddCookie()
设置,另一个是在/Account/Login
Action中的HttpContext.SignInAsync()
里进行设置。
1.1 AddCookie()
配置项
在这里主要配置两个:ExpireTimeSpan和SlidingExpiration,前者表示一次登录有效的期限,默认是14天,后者表示是否启用滑动窗口,如果启用了那么在cookie快到期的时候会重新颁发个cookie。它们的使用方法如下:
它们的默认设置的源码如下:
1.2 HttpContext.SignInAsync()
配置项
这个地方是用来向web应用中注册登录信息的地方,可以指定IssuedUtc、ExpiresUtc、AllowRefresh和IsPersistent四项,它们表示的意思如下:
IssuedUtc 凭证颁发的日期(一般不用设置)
ExpiresUtc 凭证的有效截止日期(一般不用设置)
AllowRefresh 快到期时是否刷新凭证
IsPersistent 是否将凭证保存到cookie中
它的使用方法如下:
二、认证处理逻辑
2.1 访问登录接口时
第一步:读取request中的cookie,此时肯定读取不到。
第二步:用户代码验证username和pwd后执行
HttpContext.SignInAsync()
方法第三步:
CookieAuthenticationHandler
处理登录逻辑
2.2 登录后访问[Authorize]的Action
第一步:从request中读取cookie并解密成ticket,注意:在这个地方有两个有效期拦截,首先就是浏览器自身根据cookie的有效期进行过滤,再一个就是ticket记录的有效期过滤,只要有一个不通过就不会拿到正确的ticket。
第二步:检查cookie是否需要刷新,判断的依据是:
1.首先判断AddCookie的时候设置了
SlidingExpiration=true
2.然后判断SigninAsync中设置了
AllowRefresh=true
3.最后计算当前的时间是否已经超过了认证开始时间和认证结束时间的一半,如下图所示:
第三步:如果需要刷新就更新认证开始时间和认证结束时间,改变前后如下图所示:
三、总结使用方法
如果要开启cookie认证,那么你应该:
1). 在AddCookie()
中设置ExpireTimeSpan
,虽然也可以不设置,但是建议自己设置一下,默认的一次登录是14天内有效
2).在HttpContext.SignInAsync()
中设置IsPersistent=true
如果要开启滑动登录窗口,那么除了上面设置的你还需要:
1).在AddCookie
中设置SlidingExpiration=true
2).在HttpContext.SignInAsync()
中设置AllowRefresh=true
代码示例:
四、附CookieAuthenticationHandler
的源码
其实认证处理的代码都在
CookieAuthenticationHandler
里面了,这里直接全部粘贴过来:
- THE END -
?

●C#会不会成为移动开发最便捷语言?
●C# 委托、泛型委托与Lambda表达式
● .Net平台下的B/S开发框架
●C#多线程读写同一文件处理
●C#使用 MQTTnet 快速实现 MQTT 通信
●socket网口通信通用实例