首页 > 解决方案 > 如何在 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拨打电话并且令牌过期时,我该怎么做才能自动刷新令牌?我是不是忘了在配置中添加一些东西?

标签: apiasp.net-corecookiestokenopenid-connect

解决方案


这篇较早的帖子可能会给您一些想法——来自之前遵循相同概念的 MS 技术堆栈。

您可能对 SlidingExpiration 选项有一些运气。传统上,由于 2 种不同类型的 Authorize 属性,这一直是一个有问题的领域。

更宽点

使用最简单的代码和最佳的 UI 控制来实现最基于标准的解决方案的更简洁的架构是避免在同一个服务器端组件中混合 Web 和 API 代码。

当然,这可能不在您当前项目的范围内,但对于下一个您可能会考虑:

  • 一个验证令牌的 ASP.Net Core Web API
  • 作为单页应用程序实现的无 cookie 的 Web UI
  • Web 静态内容托管
  • UI 将令牌发送到 API
  • UI 静默更新令牌,不涉及后端

如果有兴趣看看我的 Azure AD 示例:


推荐阅读