首页 新闻 会员 周边

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

0
悬赏园豆:40 [已解决问题] 解决于 2019-12-05 14:38

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验证失败的信息。

问题补充:

在配置文体已经配置不验证 Token 的 Issuer 和 Audience了。
ValidIssuer = jwtSettings.Issuer, //false
ValidateIssuer = jwtSettings.ValidateIssuer,

                //颁发给谁
                ValidAudience = jwtSettings.Audience, //false
                ValidateAudience = jwtSettings.ValidateAudience,
Adming的主页 Adming | 初学一级 | 园豆:119
提问于:2019-06-21 09:58
< >
分享
最佳答案
0

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

收获园豆:40
会长 | 专家六级 |园豆:12401 | 2019-06-21 10:12

如果是http请求放置的token不对,一开始就应该验证通不过。就是没找到内置的AddJwtBearer(Microsoft.AspNetCore.Authentication.JwtBearer)怎么打印日志,我把日志打印等级调到最低,连验证失败这种基本信息都没有输出。

Adming | 园豆:119 (初学一级) | 2019-06-21 10:19
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册