JwtBearer在服务器环境一段时间后就无法验证了,即使重新获取Token的也不能验证。

2019-12-05 13:51发布

asp.net core api 项目(版本2.2),因为是老系统,系统先前一套自定义的身份验证方式,DefaultAuthenticateScheme 和 DefaultChallengeScheme 都为 “Custom”。
自定义身份验证方案类似于这种:
https://github.com/ignas-sakalauskas/CustomAuthenticationNetCore20/tree/master/CustomAuthNetCore20/Authentication
但也有略微不同,总之就是,原先的验证方式有点类型说Session这种,如果用户一段时间不访问就会失效,需要一直客户端一直要向服务器端发送心跳连接,保持登录状态。

后来,因为API接口需要为微信端(其实就是几个移动端页面)提供服务,就另外引用了JwtBearer授权方式。
Token 发放没有使用IdentityServer4,就是简单的用用户名和密码换取一个Token,也没有让Token过期的操作。
发放Token代码如下

ConfigureServices 配置如下

api方法授权如下

现在遇到一个问题,在本地调试环境,工作一切正常。但在服务器环境中。Token只有在重启系统开始后的2分钟左右能验证成功,后面就一直验证不成功,新获取的Token也不能验证。

我把日志记录等级调到最低了,使用AddJwtBearer (Microsoft.AspNetCore.Authentication.JwtBearer)验证也没有打印到任何错误或验证不通过的信息。而且可以明确看到,请求的目标方法已经显示指定了 [Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
应该和原来的自定义方法无关了,但好像从结果看,它好像还是受自定义的(Custom)的,而且,日志也打印了Custom验证失败的信息。

1条回答
爷的心禁止访问
2楼-- · 2019-12-05 14:45

是不是你在http请求里放的token不对呀,建议在验证token的地方写日志打印token出来检查下。

查看更多
登录 后发表回答