api - 如何在 ASP.NET Core 3.0 中为 API 请求自动刷新令牌?
问题描述
我有一个ASP NET Core 3.0
应用程序,我正在使用它Azure Active Directory
进行身份验证。Se 下面的autentication配置
services.AddAuthentication(options =>
{
options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
})
.AddOpenIdConnect(options =>
{
options.Authority = auth.Authority;
options.ResponseType = OpenIdConnectResponseType.IdToken;
options.SignedOutRedirectUri = auth.SignedOutRedirectUri;
options.CallbackPath = auth.CallbackPath;
options.ClientId = auth.ClientId;
})
.AddCookie(options =>
{
options.AccessDeniedPath = "/Home/AccessDenied/";
options.ExpireTimeSpan = TimeSpan.FromMinutes(20);
});
当cookie
我在 20 分钟不活动后更改页面时,它会自动重新生成,但如果我调用API Controller
. 当我AJAX
拨打电话并且令牌过期时,我该怎么做才能自动刷新令牌?我是不是忘了在配置中添加一些东西?
解决方案
这篇较早的帖子可能会给您一些想法——来自之前遵循相同概念的 MS 技术堆栈。
您可能对 SlidingExpiration 选项有一些运气。传统上,由于 2 种不同类型的 Authorize 属性,这一直是一个有问题的领域。
更宽点
使用最简单的代码和最佳的 UI 控制来实现最基于标准的解决方案的更简洁的架构是避免在同一个服务器端组件中混合 Web 和 API 代码。
当然,这可能不在您当前项目的范围内,但对于下一个您可能会考虑:
- 一个验证令牌的 ASP.Net Core Web API
- 作为单页应用程序实现的无 cookie 的 Web UI
- Web 静态内容托管
- UI 将令牌发送到 API
- UI 静默更新令牌,不涉及后端
如果有兴趣看看我的 Azure AD 示例:
推荐阅读
- ffmpeg - FFmpeg amix-filter 总是做“音量标准化”。如何预防它以及它可能的缺点是什么?
- excel - 如果在行中找不到值,则循环跳到下一个
- reactjs - ReactJS 将参数从兄弟组件传递到兄弟组件
- c# - 未在 asp.net core 3.1 Web 应用程序中显示的代码引用
- reactjs - 仅在类中而不在函数中导入组件
- python-3.x - 无法在 Windows 上运行任何 pipenv 命令
- excel - 不使用计数器进行优化
- javascript - 从 Javascript 对象数组创建 HTML 列表
- node.js - 如何修改 smartly.ai 模板
- c# - 电子交易:请求访问令牌,我得到签名无效