如何配置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
相关产品推荐
相关产品推荐

