加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 服务器上的JWT登录流程和令牌验证

发布时间:2020-12-15 02:13:21 所属栏目:Java 来源:网络整理
导读:在服务器上验证令牌的正确方法是什么? 我在我的应用程序中使用jwt令牌机制,这是它现在如何工作: 客户端使用用户名和密码登录 服务器检查用户名和密码,并使用RSA创建令牌 公钥和私钥,并使用有效负载向客户端发送新令牌 包含用户的电子邮件地址,然后存储相同
在服务器上验证令牌的正确方法是什么?

我在我的应用程序中使用jwt令牌机制,这是它现在如何工作:

>客户端使用用户名和密码登录
>服务器检查用户名和密码,并使用RSA创建令牌
公钥和私钥,并使用有效负载向客户端发送新令牌
包含用户的电子邮件地址,然后存储相同的令牌
数据库.
>服务器上的任何后续资源请求,客户端发送
然后,jwt令牌服务器使用可用的令牌检查令牌
基于用户登录的电子邮件地址的数据库.
>然后将资源提供给客户端.

我想我在这里遗漏了一些东西.阅读其他博客文章,我看到该标记应该用密钥验证.

我有几个问题:

>我不确定是否应该根据公钥检查令牌
私钥
>在向客户端发送jwt令牌时,我必须发送公钥
客户端在有效负载中,因为我正在使用RSA机制?所以对于每个请求
对于资源,我必须解码令牌并检查公钥
反对私钥?
>在哪些情况下,我需要在数据库中存储令牌?或者是
根本不需要在数据库中存储令牌?
>恶意在客户端获取令牌时会发生什么
并用它登录?

注意:我使用vanilla java和jax-rs(rest)作为后端,使用angularjs作为前端.谢谢

解决方法

>服务器必须使用私钥对JWT进行签名.然后,客户端可以在收到令牌时使用公钥以及服务器本身对其进行验证.
>在发送令牌之前,客户端必须知道公钥.
>自JWT签名以来,您无需在数据库中存储访问令牌.您只需使用签名进行验证即可.如果令牌是使用任何其他私钥生成的,则无法使用您的公钥进行验证.
>攻击者无法使用访问令牌登录.如果存在恶意获取令牌的风险,则必须为令牌设置较短的到期时间并使用 refresh token获取新令牌.刷新令牌应该保留在服务器端.如果刷新令牌被泄露,则可以使其无效(用户应该能够撤销对该客户端的访问).或者,您可以向JWT注入安全随机数,并将该号码存储在服务器端,以防止用户.当用户发送令牌时,您必须在JWT中对数据库中的安全随机数进行验证.然后,您可以通过更改数据库中的安全随机数使令牌无效.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读