我的应用程序有一个登录路径。我jwt tokens用来保护路由,但我无法完全理解secret key.
我认为我需要使用密钥来验证jwt。每当用户登录时,我都会向用户发送JWT Token和发送Secret key。JWT存储在本地存储(手机或应用程序存储)中
我应该怎么处理密钥?我应该同时存储到本地和数据库吗?
登录途径
api.post('/api/login', (req, res) => {
var secretKey;
require('crypto').randomBytes(48, function(err, buffer) {
secretKey = buffer.toString('hex');
//Create JWT and Secret Key
jwt.sign({user}, secretKey, {expiresIn: '30s'}, (err, token) => {
res.json({
access_token : token,
secret_key : secretKey
});
});
});
Run Code Online (Sandbox Code Playgroud)
});
登录后回复
{
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjp7ImlkIjoxLCJ1c2VybmFtZSI6ImV4YW1wbGV1c2VyIiwiZW1haWwiOiJleGFtcGxlQGdtYWlsLmNvbSJ9LCJpYXQiOjE1NTExMTE1ODAsImV4cCI6MTU1MTExMTYxMH0.aSTVC-HcEdrH1KBNtuD_MoLZ8DWnSiM6bCqO4EgJ5zM",
"secret_key": "2e6a98abb5b23339ad14601d3bedc1d23847498cb18daf8cfc98c2a2095ec8f47d80053f6d4e22b8f6419407ac3083dc"}
Run Code Online (Sandbox Code Playgroud)
您的密钥永远不应该提供给其他任何人。您需要将此密钥保密。您可以使用密钥来签署和发行令牌。它也可用于验证令牌,但使用您的密钥来验证令牌通常是一个坏主意,因为您随后需要将密钥发送到验证令牌的服务,这与我前两句话中的建议背道而驰.
如果您的秘密密钥是非对称签名的,您可以基于秘密(私有)密钥以所谓的 JSON Web 密钥的形式生成一个公共密钥(在此处阅读有关 JWK 的信息)。然后可以将该公钥提供给宇宙中的任何人,并且公钥只能用于验证 JWT;公钥不能用于签署新令牌。
这意味着您应该只将密钥存储在一个位置,并且该位置应该在您签署和发布令牌的身份验证服务器上。在此处阅读有关非对称密钥签名的更多信息
| 归档时间: |
|
| 查看次数: |
8463 次 |
| 最近记录: |