使用 JWT 令牌的 dotnet 核心身份验证系统的奇怪行为
Odd behaviour with dotnet core authentication system using JWT tokens
我已经测试我的 Web API 身份验证系统一段时间了,遇到了一些非常奇怪的事情。
这是我遵循的步骤:
1 - 我注册了一个用户,系统提供了一个 JWT 令牌
2 - 我尝试使用令牌调用 API 操作,一切都按预期进行
3 - 现在,我删除我的数据库并使用 Add-Migration 命令重新重建它
4 - 我的数据库中没有用户,但如果我使用之前生成的令牌(从第 1 点开始)调用 API 操作,它会被接受为正确授权的令牌。请记住,我的数据库是干净的。没有用户,没有代币等注册。
有人能猜到这里发生了什么吗?
令牌所有者可以访问您的 API,直到令牌未过期。这是 JWT 令牌实现的默认行为。您无需检查数据库中的用户及其权限。令牌中的所有内容。所以这就像一个缓存。但是,如果您想要立即更改用户权限和访问参数,您有 3 种方法:
- 减少令牌的生命周期;
- 解析token数据时,编写中间件,查询数据库用户;
- 从门户注销用户以强制使用新令牌重新登录;
大多数业务规则允许用户延迟访问更新或强制他们重新登录。
我已经测试我的 Web API 身份验证系统一段时间了,遇到了一些非常奇怪的事情。
这是我遵循的步骤:
1 - 我注册了一个用户,系统提供了一个 JWT 令牌
2 - 我尝试使用令牌调用 API 操作,一切都按预期进行
3 - 现在,我删除我的数据库并使用 Add-Migration 命令重新重建它
4 - 我的数据库中没有用户,但如果我使用之前生成的令牌(从第 1 点开始)调用 API 操作,它会被接受为正确授权的令牌。请记住,我的数据库是干净的。没有用户,没有代币等注册。
有人能猜到这里发生了什么吗?
令牌所有者可以访问您的 API,直到令牌未过期。这是 JWT 令牌实现的默认行为。您无需检查数据库中的用户及其权限。令牌中的所有内容。所以这就像一个缓存。但是,如果您想要立即更改用户权限和访问参数,您有 3 种方法:
- 减少令牌的生命周期;
- 解析token数据时,编写中间件,查询数据库用户;
- 从门户注销用户以强制使用新令牌重新登录;
大多数业务规则允许用户延迟访问更新或强制他们重新登录。