asp.netcore定时刷新第三方token(代码片段)

dotNET跨平台 dotNET跨平台     2022-10-21     702

关键词:

前言

在《ASP.NET Core 自动刷新JWT Token》中我们实现了为客户端自动提供最新的Token。

但是,当我们的 ASP.NET Core 应用需要调用第三方 API 时,如何更优雅地刷新第三方提供的 Token 呢?

思路

我们可以在启动时就获取第三方提供的 Token 并保存到全局变量,然后在 Token 过期时间内定时获取第三方最新的 Token 并更新全局变量。

这样每次调用 HttpClient 访问第三方 API 时,都是使用的准备好的 Token, 保证没有过期。

实现

创建一个后台服务 BackgroundService,然后在其 ExecuteAsync 方法中创建一个定时器 PeriodicTimer,定时刷新 Token:

public class RefreshTokenService : BackgroundService, IDisposable

    private readonly ITokenManager tokenManager;

    public RefreshTokenService(ITokenManager tokenManager)
    
        this.tokenManager = tokenManager;
    

    protected async override Task ExecuteAsync(CancellationToken stoppingToken)
    
         tokenManager.Token = await GetToken();

        //30 分钟刷新一次
        var timer = new PeriodicTimer(TimeSpan.FromMinutes(30));

        while (await timer.WaitForNextTickAsync(stoppingToken))
        
            tokenManager.Token = await GetToken();
        
    

    private async Task<string>  GetToken()
    
        //调用第三方服务获取Token
    

接口ITokenManager定义如下,用于存储 Token:

public interface ITokenManager

    string Token  get; set; 

最后,我们在启动时进行依赖注入:

builder.Services.AddSingleton<ITokenManager,TokenManager>();

builder.Services.AddHostedService<RefreshTokenService>();

结论

现在,任何注入ITokenManager的类,都能始终获得有效的 Token 了。

添加微信号【MyIO666】,邀你加入技术交流群

ASP.NET Core 中基于令牌的身份验证(刷新)

】ASP.NETCore中基于令牌的身份验证(刷新)【英文标题】:TokenBasedAuthenticationinASP.NETCore(refreshed)【发布时间】:2015-08-1307:42:52【问题描述】:我正在使用ASP.NETCore应用程序。我正在尝试实现基于令牌的身份验证,但不知道如何使... 查看详情

微信开发怎么获取access

...access_token的使用及生成方式说明:1、为了保密appsecrect,第三方需要一个access_token获取和刷新的中控服务器。而其他业务逻辑服务器所使用的access_token均来自于该中控服务器,不应该各自去刷新,否则会造成access_token覆盖而影响... 查看详情

无感刷新token

...间比服务器时间慢时,拦截会失败。方法二(可行)写个定时器,定时刷新token接口缺点:浪费资源,消耗性能,不建议采用。方法三(推荐)在响应拦截器中拦截,判断token返回过期后,调用刷新token接口思考:我在遇到同样问题... 查看详情

asp.netcore定时任务保持存活,不会被回收。asp.netcore回收事件(代码片段)

核心类,继承IHostedService,处理启动和退出方法publicinterfaceIHostedService //启动程序时触发TaskStartAsync(CancellationTokencancellationToken); //关闭时触发。IIS应用程序池回收时触发TaskStopAsync(CancellationTokencancellatio 查看详情

在 ASP.NET Core 3 中使用 id_token

】在ASP.NETCore3中使用id_token【英文标题】:Useid_tokenwithASP.NETCore3【发布时间】:2020-03-1322:41:37【问题描述】:在ASP.NETCore3应用程序中,我需要处理来自id_token和access_token的信息。id_token有会员信息,有时需要这些信息来制定政策。... 查看详情

ASP.Net Core 3.0 JWT Bearer Token 没有 SecurityTokenValidator 可用

】ASP.NetCore3.0JWTBearerToken没有SecurityTokenValidator可用【英文标题】:ASP.NetCore3.0JWTBearerTokenNoSecurityTokenValidatoravailable【发布时间】:2019-10-1820:26:59【问题描述】:我使用ASP.NetCore3.0API和EntityFrameworkCore作为UserStorage。启动.cs:publi 查看详情

asp.netcore2.2+quartz.net实现web定时任务(代码片段)

原文:ASP.NETCore2.2+Quartz.Net实现web定时任务   作为一枚后端程序狗,项目实践常遇到定时任务的工作,最容易想到的的思路就是利用Windows计划任务/wndowsservice程序/Crontab程序等主机方法在主机上部署定时任务程序/脚本。... 查看详情

jwt token 过期时间(asp.net core)

】jwttoken过期时间(asp.netcore)【英文标题】:jwttokenexpirationtime(asp.netcore)【发布时间】:2018-12-2209:25:25【问题描述】:我想延长JWT令牌的生命周期,但我不能。我尝试用谷歌搜索这件事,发现对JwtBearerOptions.TokenValidationParameters.Cl... 查看详情

在 ASP.NET Core 中使用基于本地存储的 JWT-Token 更改用户密码(ASP.Identity)

】在ASP.NETCore中使用基于本地存储的JWT-Token更改用户密码(ASP.Identity)【英文标题】:ChangeUserpassword(ASP.Identity)withlocalstoragebasedJWT-TokeninASP.NETCore【发布时间】:2021-08-0214:01:13【问题描述】:美好的一天,我是一个刚起步的C#开发... 查看详情

ASP.net Core 2.0 JWT 令牌刷新

】ASP.netCore2.0JWT令牌刷新【英文标题】:ASP.netCore2.0JWTTokenRefresh【发布时间】:2018-03-3007:54:24【问题描述】:我已经实现了JWTBearerAuth和IdentityCookieAuth,一个用于UI,另一个用于.NETCore2.0项目中的RESTAPI。到目前为止,一切都适用于JW... 查看详情

ocelot和identityserver4初体验(代码片段)

...授权机制。系统产生一个短期的token,用来代替密码,供第三方应用使用。使用Ocelot实现路由功能的初体验:打开VS2019,新建一个ASP.NETCore空白项目,名为&ldqu 查看详情

在 ASP.NET Core 中处理过期的刷新令牌

】在ASP.NETCore中处理过期的刷新令牌【英文标题】:HandlingExpiredRefreshTokensinASP.NETCore【发布时间】:2019-02-1000:27:28【问题描述】:解决此问题的代码见下文我正在尝试寻找最佳和最有效的方法来处理在ASP.NETCore2.1中已过期的刷新令... 查看详情

ASP.NET 核心中是不是支持刷新令牌?

...刷新令牌?【英文标题】:IsthereanysupportofrefreshtokeninASP.NETcore?ASP.NET核心中是否支持刷新令牌?【发布时间】:2019-09-2321:10:12【问题描述】:我需要ASP.NETCore应用程序中的刷新令牌。目前,我已经实现了刷新/访问令牌。在我的实... 查看详情

ASP.NET 核心 1.0。 Bearer Token,无法访问自定义声明

...心1.0。BearerToken,无法访问自定义声明【英文标题】:ASP.NETCore1.0.BearerToken,cannotaccesscustomclaims【发布时间】:2016-05-0410:50:14【问题描述】:我正在尝试使用ASP.NETCore1.0为SPA设置承载身份验证。我几乎可以使用OpenIdConnectServer为JwtToke... 查看详情

如何解决自动刷新在 ASP.NET Core 5 中静默失败的问题?

】如何解决自动刷新在ASP.NETCore5中静默失败的问题?【英文标题】:HowdoItroubleshootauto-refreshfailingsilentlyinASP.NETCore5?【发布时间】:2020-11-2317:10:18【问题描述】:我读到了Auto-refreshcapabilityintroducedinASP.NETCore5with.NET5。我将我的Blazor... 查看详情

前端如何实现token的无感刷新

...会造成体验不好的问题,因此,需要体验好的话,就需要定时去刷新token,并替换之前的token。要做到token的无感刷新,主要有3种方案:方案一:后端返回过期时间,前 查看详情

asp.netcore中identityserver4实战之角色授权详解(代码片段)

...yServer4基于角色的授权详解。IdentityServer4历史文章目录Asp.NetCoreIdentityServer4中的基本概念Asp.NetCore中IdentityServer4授权中心之应用实战Asp.NetCore中IdentityServer4授权中心之自定义授权模式Asp.NetCore中IdentityServer4授权原理及刷新Token的应用... 查看详情

分享我的第一个asp.netcore开发过程

...的跨平台功能,所以就研究一下,中间有不少坑,有很多第三方类库还不支持.netcore,就连微软自己也是三天两头的变,vs2015和vs2017开发就不一样,有的能生成发布,有的不能生成发布。我的最终目标是把项目部署到docker上,再... 查看详情