有没有办法在Node.js中不每次都发送API密钥的请求?

huangapple go评论52阅读模式
英文:

Is there a way to not send API key with the request everytime in Nodejs?

问题

我已为特定用户创建了一个API密钥,如下所示:

var uuid = require('node-uuid');

var createUniqueId = function() {
    return 'User:' + uuid.v4();
};

然而,在这个级别,我在每个请求的标头中请求API密钥,我担心这可能不是最佳实践。是否有一种方法可以在一段时间内对用户进行身份验证,如果时间到期,则再次请求API密钥,或者我应该继续在每个查询中请求API密钥。

英文:

I have made an API key for certain users like this :

var uuid = require('node-uuid');

var createUniqueId = function() {
    return 'User:' + uuid.v4();
};

Yet at this level I request the API key in the header with each request and I fear this might not be the best practice. Is there a way to authenticate the user for certain amount of time and if the time expires the API key is request again or should I stick with asking for API key with each query.

答案1

得分: 1

为了在一定时间内实现身份验证并避免在每个查询中请求API密钥,您可以考虑使用JSON Web Tokens(JWT)。JWT是身份验证的流行方法之一,可以提供无状态身份验证机制。

这里是您可以实现基于JWT的身份验证的高级概述:

  • 用户身份验证:

    当用户登录或进行身份验证时,在服务器端生成JWT,并将用户的唯一标识符包含在令牌的负载中。使用仅服务器知道的秘密密钥对令牌进行签名。

  • 令牌过期:

    在JWT负载中包含一个过期时间(exp)声明,指示令牌应该在何时过期。在生成令牌时,根据您的要求设置适当的过期时间。

  • 令牌存储:

    在生成令牌后,将其存储在客户端(例如,本地存储或Cookie)中。客户端将在每个后续API请求的标头中包含JWT。

  • 令牌验证:

    在服务器端,验证每个API请求标头中的JWT。确保使用秘密密钥验证令牌的签名。检查过期时间以查看令牌是否已过期。

  • 令牌刷新:

    如果令牌已过期,服务器可以使用适当的错误状态代码(例如,401未经授权)响应。客户端应用程序可以处理此错误并提示用户重新进行身份验证。

在重新进行身份验证时,服务器将生成新的JWT,客户端将更新存储的令牌。通过使用具有过期时间的JWT,您可以在一定时间内对用户进行身份验证,并避免在每个查询中请求API密钥。但请注意,客户端仍然需要在令牌的有效生命周期内为每个API请求的标头发送JWT。

使用JSON Web Tokens保护Node.js RESTful API

英文:

To implement authentication for a certain amount of time and avoid requesting the API key with each query, you can consider using JSON Web Tokens (JWT). JWT is are a popular method for authentication and can provide a stateless authentication mechanism.

Here's a high-level overview of how you can implement JWT-based authentication:

  • User Authentication:

> When a user logs in or authenticates, generate a JWT on the server-side and include the user's unique identifier in the payload of the token.
Sign the token using a secret key known only to the server.

  • Token Expiration:

>Include an expiration time (exp) claim in the JWT payload, indicating the time when the token should expire.
When generating the token, set an appropriate expiration time based on your requirements.

  • Token Storage:

>After generating the token, store it on the client-side (e.g., in local storage or a cookie).
The client will include the JWT in the header of each subsequent API request.

  • Token Verification:

>On the server-side, verify the JWT in each API request's header.
Ensure the token's signature is valid using the secret key.
Check the expiration time to see if the token has expired.

  • Token Refresh:

>If the token has expired, the server can respond with an appropriate error status code (e.g., 401 Unauthorized).
The client-side application can handle this error and prompt the user to re-authenticate.

Upon re-authentication, the server will generate a new JWT, and the client will update the stored token.
By using JWTs with an expiration time, you can authenticate the user for a certain period and avoid requesting the API key with each query. However, note that the client will still need to send the JWT in the header for each API request within the token's valid lifespan.

Securing Node.js RESTful APIs with JSON Web Tokens

huangapple
  • 本文由 发表于 2023年5月25日 02:05:04
  • 转载请务必保留本文链接:https://go.coder-hub.com/76326313.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定