如何在OpenIddict中为UI用户与API客户端设置不同AccessToken有效期?
为不同授权类型设置差异化AccessToken有效期
要实现授权码流(UI用户)和客户端凭证流(API客户端)的AccessToken有效期区分,不能依赖全局的SetAccessTokenLifetime,可以通过OpenIddict的令牌创建事件动态调整有效期,具体实现如下:
修改OpenIddict服务配置
在AddServer的配置中,添加事件处理器拦截令牌创建过程,根据请求的授权类型设置对应有效期:
services.AddOpenIddictCoreWithEntityFramework() .AddServer(options => { // 设置全局默认有效期(供授权码流的UI用户使用) options.SetAccessTokenLifetime(TimeSpan.FromMinutes(15)); options.SetRefreshTokenLifetime(TimeSpan.FromMinutes(refreshTokenLifetimeInMinutes)); // 添加令牌创建事件处理器 options.AddEventHandler<OpenIddictServerEvents.HandleTokenCreation>(context => { // 判断当前请求的授权类型 if (context.Request.GrantType == OpenIddictConstants.GrantTypes.ClientCredentials) { // 为API客户端设置长有效期,例如2小时 context.AccessTokenLifetime = TimeSpan.FromHours(2); } // 授权码流请求将沿用全局默认的15分钟有效期 return default; }); });
扩展说明
- 如果需要按客户端ID做更细粒度的区分,可通过
context.ClientId判断后设置有效期:if (context.ClientId == "your-api-client-id") { context.AccessTokenLifetime = TimeSpan.FromHours(2); } - 全局
SetAccessTokenLifetime的值会作为兜底默认值,当请求不匹配自定义条件时生效。
内容的提问来源于stack exchange,提问作者Oleksiy
相关产品推荐
相关产品推荐

