框架下cookie的使用_aspnetcore自带cookie的认证期限分析

本文详细探讨了.NET Core框架下Cookie认证的期限配置,包括在Startup.cs中的设置和Action中的设置,并介绍了认证处理逻辑,特别是登录接口的处理和授权Action的验证流程。此外,还总结了如何开启和配置滑动登录窗口。最后提供了相关源码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

84b2835d3ddc43d88b1535298389e3f7.gif

点击上方蓝字关注我们

4d939c0600eb2f175146d261376fa6ae.gif

环境:

  • .netcore 3.1.1.0

一、cookie认证的期限配置

有两个地方可以进行配置,一个是在startupAddCookie()设置,另一个是在/Account/LoginAction中的HttpContext.SignInAsync()里进行设置。

1.1 AddCookie()配置项

在这里主要配置两个:ExpireTimeSpan和SlidingExpiration,前者表示一次登录有效的期限,默认是14天,后者表示是否启用滑动窗口,如果启用了那么在cookie快到期的时候会重新颁发个cookie。它们的使用方法如下:

ad04c4df22e74eee729ef8d708f18638.png

它们的默认设置的源码如下:

d06585cd9c4573c614a364f13cbd44da.png

1.2 HttpContext.SignInAsync()配置项

这个地方是用来向web应用中注册登录信息的地方,可以指定IssuedUtc、ExpiresUtc、AllowRefresh和IsPersistent四项,它们表示的意思如下:

  • IssuedUtc 凭证颁发的日期(一般不用设置)

  • ExpiresUtc 凭证的有效截止日期(一般不用设置)

  • AllowRefresh 快到期时是否刷新凭证

  • IsPersistent 是否将凭证保存到cookie中

它的使用方法如下:

e8d61fda95948b529465b52ecb6e59fe.png

二、认证处理逻辑

2.1 访问登录接口时

  • 第一步:读取request中的cookie,此时肯定读取不到。

  • 第二步:用户代码验证username和pwd后执行HttpContext.SignInAsync()方法

  • 第三步:CookieAuthenticationHandler处理登录逻辑473909171b5860eecca98256c760f55f.png

2.2 登录后访问[Authorize]的Action

  • 第一步:从request中读取cookie并解密成ticket,注意:在这个地方有两个有效期拦截,首先就是浏览器自身根据cookie的有效期进行过滤,再一个就是ticket记录的有效期过滤,只要有一个不通过就不会拿到正确的ticket。

  • 第二步:检查cookie是否需要刷新,判断的依据是:

    • 1.首先判断AddCookie的时候设置了SlidingExpiration=true

    • 2.然后判断SigninAsync中设置了AllowRefresh=true

    • 3.最后计算当前的时间是否已经超过了认证开始时间和认证结束时间的一半,如下图所示:aae698eee6f22c3358195a3de38461ba.png

  • 第三步:如果需要刷新就更新认证开始时间和认证结束时间,改变前后如下图所示: e1b0c67055d7696b35cd2f0bef7e341f.png

三、总结使用方法

  • 如果要开启cookie认证,那么你应该:
    1). 在AddCookie()中设置ExpireTimeSpan,虽然也可以不设置,但是建议自己设置一下,默认的一次登录是14天内有效
    2).在HttpContext.SignInAsync()中设置IsPersistent=true

  • 如果要开启滑动登录窗口,那么除了上面设置的你还需要:
    1).在AddCookie中设置SlidingExpiration=true
    2).在HttpContext.SignInAsync()中设置AllowRefresh=true

代码示例:e1a5c686d2bca2fac94ad6b2ff47b9bd.pngf860c9314039dde89ea706c5ded83552.png

四、附CookieAuthenticationHandler的源码

其实认证处理的代码都在CookieAuthenticationHandler里面了,这里直接全部粘贴过来:

edfb7034d68c24d049073ccce8230777.png

6a09a7c80cba0287545237371969677a.png

1833b46b3bccdf42cd76eb9c8c4fd2bb.png

e7ee7301b07f1ece274142eb1b93a283.png

18ab1361cb66010ec8def95158eed579.png

6abfe8595b933c74fb8d3c1dfe778bbb.png

056da0cd5576b4cf79d2a4d32e103f46.png

047047cdde504f5adac2f1799ce7e1bf.png

e3c04104bde6f6c3fca243193b338a05.png

- THE END -

?

6714410dc8bb30eeb43ac4a8610b46dc.gif

●C#会不会成为移动开发最便捷语言?

●C# 委托、泛型委托与Lambda表达式

● .Net平台下的B/S开发框架

●C#多线程读写同一文件处理

●C#使用 MQTTnet 快速实现 MQTT 通信

●socket网口通信通用实例

3555bc75884d9999257313ba5b305e02.png

7609ad38b1f8ab83a61257ca84caa22a.png

2dd61abcbbf058258e662578b84129c2.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值