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

如何配置OpenIddict在访问令牌中包含iat声明?

解决JWT访问令牌缺失iat声明的问题

服务端配置修改

要添加iat(签发时间)声明,需在OpenIdConnectServer的事件处理中手动注入该声明,具体通过重写OnCreateAccessToken事件实现:

修改你的中间件配置,更新options.Provider的初始化逻辑,加入事件处理代码:

app.UseOpenIdConnectServer(options =>
{
    options.Issuer = new Uri(Config.IssuerUrl);
    options.AllowInsecureHttp = false;
    options.ApplicationCanDisplayErrors = true;
    options.TokenEndpointPath = new PathString(Paths.TokenPath);
    options.AuthorizationEndpointPath = new PathString(Paths.AuthorizePath);
    options.UserinfoEndpointPath = new PathString(Paths.UserInfoPath);
    options.LogoutEndpointPath = new PathString(Paths.LogoutPath);
    options.SigningCredentials.AddCertificate(certificate);
    options.AccessTokenHandler = new JwtSecurityTokenHandler();
    options.AccessTokenLifetime = TimeSpan.FromMinutes(60);
    options.UseSlidingExpiration = true;

    // 重写OnCreateAccessToken事件添加iat声明
    options.Provider = new OpenIdConnectServerProvider
    {
        OnCreateAccessToken = context =>
        {
            // 添加iat声明,值为当前UTC时间的Unix时间戳(秒),符合JWT标准格式
            context.AccessToken.Claims.Add(new Claim(
                "iat", 
                DateTimeOffset.UtcNow.ToUnixTimeSeconds().ToString(), 
                ClaimValueTypes.Integer64));
            return Task.CompletedTask;
        }
    };
});

注意事项:

  • iat的取值必须是UTC时间对应的Unix时间戳(秒),确保符合JWT规范
  • 指定ClaimValueTypes.Integer64声明类型,避免客户端解析时出现类型不匹配问题

客户端配置说明

对于使用Microsoft.Owin.Security.OpenIdConnect.OpenIdConnectAuthenticationMiddleware的ASP.NET MVC客户端,无需额外配置。该中间件在验证JWT令牌时会自动识别并处理iat这类标准声明,客户端侧不需要做特殊设置。

内容的提问来源于stack exchange,提问作者Paul

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 18:27:45