authentication - 在浏览器上验证 JWT
问题描述
我一直在阅读有关JWT的内容,我知道它包含三个部分,即header
、payload
和signature
。
我保留了标头中使用的散列算法,有效载荷中的基本信息,例如。有效载荷中的名称、年龄、角色、到期等,然后将这两者都进行 base64 编码,然后使用标头中指定的算法进行哈希处理以获得 JWT
- 我有一个可以使用
username
和登录的前端password
。 - 登录请求发送到对其进行身份验证并返回 JWT 的服务器。假设使用的算法是 HS256,它是一种对称密钥算法。
- 因此,服务器将拥有
secret key
生成 JWT 的用途。 - 作为登录请求响应的一部分,浏览器将拥有 JWT。
- 现在这个 JWT 可能会在途中被篡改,所以在使用它之前,我应该验证 JWT 的真实性。
- 为了验证,我需要密钥。
问题:
- 我如何
secret key
在前端得到这个? - 有效负载可以保留有关用户的任何信息(不是任何敏感信息,例如密码)。既然JWT中途可以被篡改,那么在前端不验证JWT的情况下使用payload信息是不是很危险呢?
解决方案
接收 JWT 的服务器是验证令牌的服务器。如果有人修改了令牌,验证将失败并且访问将被拒绝,因为(希望)服务器之外的任何人都不知道秘密,因此无法创建有效的令牌。如果客户知道秘密,特别是。在浏览器/js 环境和对称散列算法中,这是一个很大的安全风险,有人可能会窃取秘密并创建具有有效签名的新令牌。
推荐阅读
- ios - 从 Mac 读取 iPhone 日志文件内容
- powershell - 如何使用调整后的设置在 /silent 模式下运行安装
- angular - 如何将 Angular 6 部署到 Azure Web App - 您没有权限
- xml - 通过匹配标签值删除xml中的前/后行
- ios - 如何使用 Firestore 中的集合和子集合在数组中创建数组?
- java - 调用访问器方法的方法可以是访问器方法吗
- java - 制作字符串所需的旋转次数
- c# - 获取蓝牙 COM 端口
- php - 为什么自定义 404 PHP 错误页面仅适用于涉及不存在目录的 URL,无论文件是否存在?
- ios - 如何检查我的联系人列表成员是否像 whatsapp 一样在我的应用程序中注册?