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

ServiceStack实现IRequireRefreshToken时JWT认证报错咨询

ServiceStack JWT认证报错分析(实现IRequireRefreshToken接口后)

问题场景

在ServiceStack中使用Asp.Net标准ApplicationUser时,JWT认证功能正常,可正常获取Token。但修改ApplicationUser使其继承IdentityUser并实现IRequireRefreshToken接口,同时添加RefreshToken、RefreshTokenExpiry字段,重建数据库后请求JWT时出现以下错误:

System.MissingMethodException: Method not found: 'System.Threading.Tasks.Task`1<Int32> Microsoft.EntityFrameworkCore.RelationalQueryableExtensions.ExecuteUpdateAsync(System.Linq.IQueryable`1<!!0>, System.Linq.Expressions.Expression`1<System.Func`2<Microsoft.EntityFrameworkCore.Query.SetPropertyCalls`1<!!0>,Microsoft.EntityFrameworkCore.Query.SetPropertyCalls`1<!!0>>>, System.Threading.CancellationToken)'.
   at ServiceStack.Auth.IdentityJwtAuthProvider`2.<>c__DisplayClass113_0.<<CreateRefreshTokenAsync>g__UpdateUser|0>d.MoveNext()
   at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[TStateMachine](TStateMachine& stateMachine)
   at ServiceStack.Auth.IdentityJwtAuthProvider`2.<>c__DisplayClass113_0.<CreateRefreshTokenAsync>g__UpdateUser|0(DbContext dbContext)
   at ServiceStack.Auth.IdentityJwtAuthProvider`2.CreateRefreshTokenAsync(TUser user, IRequest req) in /home/runner/work/ServiceStack/ServiceStack/ServiceStack/src/ServiceStack.Extensions/Auth/IdentityJwtAuthProvider.cs:line 597
   at ServiceStack.Auth.IdentityJwtAuthProvider`2.CreateRefreshTokenAsync(TUser user, IRequest req) in /home/runner/work/ServiceStack/ServiceStack/ServiceStack/src/ServiceStack.Extensions/Auth/IdentityJwtAuthProvider.cs:line 597
   at ServiceStack.Auth.IdentityJwtAuthProvider`2.ExecuteAsync(AuthFilterContext authContext) in /home/runner/work/ServiceStack/ServiceStack/ServiceStack/src/ServiceStack.Extensions/Auth/IdentityJwtAuthProvider.cs:line 422
   at ServiceStack.Auth.AuthenticateService.PostAsync(Authenticate request) in /home/runner/work/ServiceStack/ServiceStack/ServiceStack/src/ServiceStack/Auth/AuthenticateService.cs:line 380
   at ServiceStack.Host.ServiceRunner`1.ExecuteAsync(IRequest req, Object instance, TRequest requestDto) in /home/runner/work/ServiceStack/ServiceStack/ServiceStack/src/ServiceStack/Host/ServiceRunner.cs:line 149

排查后确认:移除IRequireRefreshToken接口后功能恢复正常,仅实现该接口时触发错误。

问题原因

这不属于ServiceStack的Bug,而是EF Core版本兼容性问题:

  • ExecuteUpdateAsync是EF Core 7.0及以上版本才引入的批量更新API
  • 当用户类实现IRequireRefreshToken接口时,ServiceStack的IdentityJwtAuthProvider会调用此方法来更新用户的RefreshToken和过期时间
  • 若项目引用的EF Core版本低于7.0,就会出现找不到方法的MissingMethodException

解决方法

  • 将项目中所有EntityFrameworkCore相关NuGet包(包括EntityFrameworkCore、EntityFrameworkCore.Relational等)升级到7.0或更高版本
  • 确保所有EF Core包版本保持一致,避免版本冲突

升级完成后重新编译并测试,JWT认证即可正常生成RefreshToken并更新用户数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 16:18:22