You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 12:36:02