Fro*_*art 11 json jwt json-web-token
是否可以在JWT中存储用户凭据(用户名/密码)(所以sign它和verify以后产生的令牌)?
我听说了
不,在JWT中发送密码是不安全的.这是因为JWT声明只是简单编码,并且可以被看到它们的任何人轻松解码.将任何敏感信息存储在返回给用户的JWT中是不安全的
但我不知道为什么JWT网站建议将其用于身份验证:
什么时候应该使用JSON Web令牌?
以下是JSON Web令牌有用的一些场景:
身份验证:这是使用JWT的最常见方案.一旦用户登录,每个后续请求将包括JWT,允许用户访问该令牌允许的路由,服务和资源.Single Sign On是一种现在广泛使用JWT的功能,因为它的开销很小,并且能够在不同的域中轻松使用
gab*_*ssi 14
JWT是身份验证的结果.例如
JWT令牌里面有什么?
好吧,最简单的JWT包含有关符号的信息(我不能在这里详细输入,因为我不是安全专家),它允许在收到JWT请求时检查符号是否已损坏.
此信息可以通过数字签名进行验证和信任
除此之外,JWT允许发送有效载荷.
更正式的是,JWT由以下人员组成:
例如,如果我使用我的凭据用户名:密码为gabriel:giussi向身份验证服务发送请求,它将检查此凭据,如果它们可以,则可以创建以下JWT.

然后对于每个请求,我将编码包含我的用户名和服务的JWT
简而言之:是的,如果您在放入 JWT 的有效负载之前对数据进行加密,并在 JWT 验证后对其进行解密以使用它,那么在 JWT 中传递/接收敏感数据是可以的。
在一般情况下,您不需要在 JWT 中保留用户凭据,因为 JWT 本身就是动态生成的凭据,表示 JWT 第一次生成时提供的登录名/密码(或其他身份验证方式)。
1.1 然而,您可以传递不像纯登录名/密码那么敏感但仍然包含 JWT 验证时所需的有价值信息的内容。它可以是用户 ID(在子声明中,如果需要,可以进行散列处理)或访问级别代码等。
不过,如果您愿意,可以使用 JWT 传递敏感信息。如下所示,这一切都很简单。
2.1 对于敏感数据,您可以在 JWT 的有效负载中使用特定的私有声明,例如:
{
// These are registered claims: (see https://www.rfc-editor.org/rfc/rfc7519#section-4.1)
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
// There can be some public claims you are not afraid to expose to the world
// these are omitted here for brevity (see https://www.rfc-editor.org/rfc/rfc7519#section-4.2).
"omitted": "for brevity",
// And here can go some private claims you wish to include in the payload, e.g.:
"sensitiveInfo": {
"username": "admin",
"password": "12345",
"account_balance": 10000,
"etc": "something else"
}
}
Run Code Online (Sandbox Code Playgroud)
2.2sensitiveInfo有效负载密钥默认情况下仅采用 base64 编码(因此任何获得 JWT 的人都可以轻松读取)。为了确保其安全,您可以使用一些外部模块对其进行加密(例如crypto,或者使用您选择的bcryptNodeJS 或PHP 技术)。
2.3 在这种情况下:
jwt.verify())后,您将获得密钥中包含加密数据的解码后的有效负载sensitiveInfo。您现在只需解密数据并按计划使用它即可。就是这个。
| 归档时间: |
|
| 查看次数: |
10461 次 |
| 最近记录: |