JavaScript AJAX 调用中的安全 REST API 令牌

Posted

技术标签:

【中文标题】JavaScript AJAX 调用中的安全 REST API 令牌【英文标题】:Secure REST API token in a JavaScript AJAX call 【发布时间】:2020-10-15 08:40:58 【问题描述】:

我需要将数据从第 3 方 REST API 提取到 WordPress 页面中。这是一个搜索应用程序,所以我想避免页面刷新并尽可能通过 AJAX 加载结果。

API 设置如下:

需要用户/密码才能获取不记名令牌(POST 请求,单独的端点) 对 API 的每个 GET 请求都需要不记名令牌 令牌每 30 天过期一次

在前端应用程序中保护登录凭据和令牌的最佳做法是什么?

即使使用 wp_remote_post 在服务器上处理身份验证,我如何将令牌值传递给 javascript 而不将其暴露在浏览器中?

【问题讨论】:

【参考方案1】:

由于您在 Q 中提到的确切原因,最好在服务器端构建一个包装器。您不想在前端公开您的不记名令牌!

add_action('rest_api_init', function () 
  register_rest_route('user5050800/v1', '/search', [
    'methods' => 'GET',
    'callback' => 'search_wrapper',
  ]);
);

function search_wrapper(WP_REST_Request $request) 
  try 
    // make the req
    wp_remote_post($request->get_query_params()); // or something
   catch (\WP_Error $e) 
    // figure out if it's a 403, or if you might need to make an additional req to get a new token and try again
  

【讨论】:

以上是关于JavaScript AJAX 调用中的安全 REST API 令牌的主要内容,如果未能解决你的问题,请参考以下文章

Javascript 或 jQuery 中的线程安全队列

通过(ajax/javascript)发布到 django 视图打印空查询集

javascript React中的后端AJAX调用

如何通过javascript中的ajax调用传递blob值?

JavaScript 跨域调用:从 HTTP 调用到 HTTPS

从 JavaScript 向不同文件夹中的 C# 控制器进行 ajax 调用