c# - 动态更改过期身份验证 cookie .net 核心身份
问题描述
我有带有 .NET Core Identity 的 .NET Core 3.1 Web API 应用程序。在Startup.cs
我有以下代码:
services.ConfigureApplicationCookie(options =>
{
options.ExpireTimeSpan = TimeSpan.FromHours(2);
});
但是对于某些用户,我有不同的到期时间值。
我可以动态覆盖 auth cookie 的过期时间吗?如果是,最好的方法是什么?也许有一个选项SignInManager<...>
或UserManager<...>
允许覆盖这个值?
解决方案
Identity 的 Cookie 是 AspNetCore.Identity.Application,其 ExpireTimeSpan 由HandleSignInAsync设置。
您可以使用 cookie 的OnSigningIn
事件为特定用户动态设置过期时间:
services.ConfigureApplicationCookie(opt => {
opt.Events.OnSigningIn = async (signinContext) => {
// you can use the pricipal to query claims
var email = signinContext.Principal.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Name).Value;
if ("xxxx@hotmail.com".Equals(email))
{
// set the expiration time according to claims dynamically
signinContext.Properties.ExpiresUtc = DateTimeOffset.Now.AddSeconds(100);
signinContext.CookieOptions.Expires = signinContext.Properties.ExpiresUtc?.ToUniversalTime();
}
else
{
signinContext.Properties.ExpiresUtc = DateTimeOffset.Now.AddMinutes(60);
signinContext.CookieOptions.Expires = signinContext.Properties.ExpiresUtc?.ToUniversalTime();
}
};
});
推荐阅读
- c# - ContentDialog.ShowAsync 不响应点击
- powershell - Docker 保持 powershell 环境变化
- javascript - 无法使用 jQuery 和 Ajax 插入数据库
- node.js - Howto Koa 路由器 PUT 做得对
- optimization - 即使代码没有错误,我也无法模拟 CPLEX 模型
- angular - Angular 5 CORS PUT 错误 - 无法加载
- sql - SQLite3 中的外键不匹配
- ssh - 无法通过 SSH 连接到 Google Cloud/Compute Engine 上的服务器
- c# - 使用嵌套泛型类型调用方法
- javascript - 如何用firebase函数做一个api