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
相关产品推荐
相关产品推荐

