当前位置: 首页 > 知识库问答 >
问题:

使用JWT保护一个安全的API验证客户端

姜煌
2023-03-14

我有一个使用JWT进行身份验证的RESTful API。我从客户端收到的第一个调用是 /login调用,具有以下有效负载(没有标头)

{
     "username" : xxxx,
     "password": wwww
}

服务器验证用户是否已注册,然后将签名的JWT返回给客户端,以便在下一次调用中接收。

我想知道这是否足够安全。我不会在任何地方检查客户端是否向我发送了客户端id/客户端密码(如在OAuth中),因此我无法验证此调用是否来自我的webapp/应用程序,或者是否是我不知道的外部客户端。我想知道使用JWT实现这个行为是否有意义,以及如何实现它。

(我知道如何使用OAuth2进行操作,但我现在不想从JWT身份验证转移)

非常感谢。

共有2个答案

温开畅
2023-03-14

我想我找到了另一个回答我的Stackoverflow问题: JWT(Json网络令牌)观众“aud”和Client_Id——有什么区别?

简而言之,client_id和client_secret应该在发送新的JWT令牌之前发送到服务器进行验证。

谢正初
2023-03-14

如果我理解正确,您应该创建一个类似于以下的函数:

function verify(req, res, next) {
   const token = req.header('x-auth-token');

   if (!token) {
       return res.status(401).json({
           msg: 'No token, auth denied'
       });
  }

   try {
       const decoded = jwt.verify(token, config.get(YOUR_SECRET_GOES_HERE));
       req.user = decoded.user;
       next();
   } catch (err) {
       res.status(401).json({
           msg: 'Token is not valid'
       });
   }
}

对于所有受保护的APIendpoint,您应该这样应用它:

router.get('/anyuserinfo', verify, (req, res) => ... 

就是这样。如果未提供令牌,函数将发送401响应。

 类似资料:
  • 快速入门展示了使用 IdentityServer 保护 API 的最基础的场景。 在这个场景中,我们定义一个 API,同时定义一个 想要访问这个 API 的 客户端。客户端将从 IdentityServer 请求获得一个访问令牌,然后用这个令牌来获得 API 的访问权限。 定义 API 范围(Scopes)用来定义系统中你想要保护的资源,比如 API。 由于当前演练中我们使用的是内存配置 —— 添

  • 本节描述了 如何在 Jersey 客户端设置 SSL 配置(使用 JAX-RS API)。SSL 配置是设置在 ClientBuilder 。这个 client builder 包含了 KeyStore, TrustStore 或者整个 SslContext方法的定义。见下面示例: SSLContext ssl = ... your configured SSL context; Client c

  • 我正在尝试使用swagger codegen maven插件(版本3.0.0)生成的ApiClient,从我的Spring Boot应用程序中使用OAuth2安全的REST API。身份验证服务器(keycoat)提供了一个JWT和刷新令牌,但我不知道如何最好地处理bean中的令牌。现在我的豆子看起来像这样: 问题是:获取令牌和处理刷新令牌的最佳方法是什么? 编辑:为了获得令牌,我想使用客户端ID

  • 问题内容: 我正在尝试使用password-jwt设置JWT身份验证。我认为我已经采取了正确的步骤,但是测试GET不会成功,并且我不知道如何调试它。 这是我所做的: 尽可能直接从文档中设置passport-jwt 向我的用户/ login端点添加了令牌结果 到现在为止一切都很好。我可以登录用户(使用护照本地身份验证),响应是我希望的… {“ user”:{“ _id”:“ 56c8b5bd80d1

  • 使用 HTTPS 保护站点安全 构建 PWA 应用时,HTTPS 是必不可少的条件之一。使用 HTTP 协议的应用存在着一定的安全隐患,这是因为 HTTP 本身不具备加密的功能,通信中使用明文传输请求和响应的内容,内容可能会被窃听,而且 HTTP 缺少对通信双方身份进行校验的环节,也无法证明报文内容的完整性,存在身份伪装和信息被篡改的风险。所以,我们应该严格地使用 HTTPS 协议来保护 PWA

  • 我有一个创建的Spring引导Restapi,我打算从另一个应用程序调用。我如何才能以这样一种方式保护它,我只能从那个应用程序调用我的api。 我在这方面很新,所以我真的不知道怎么做,因为我是SpringSecurity的新手。 谢谢你的建议。