WordPress 使用 JWT Authentication 或 Nonces 验证 WordPress REST API

当前位置: 首页 » 文章 » WordPress » WordPress 使用 JWT Authentication 或 Nonces 验证 WordPress REST API

分类: WordPress 684阅读阅读模式

1、Nonces 认证

WordPress REST API 插件支持 3 种用户认证方式,分别是:Cookie 认证、oAuth 认证和基本 HTTP 认证。通过 WordPress REST API 获取信息时,这种认证是不需要的,直接获取就可以了。只有在发送信息 (POST)到 API 的时候才需要用户认证,否则将返回 HTTP 403 未授权错误。

Nonces 认证的原理是使用 wp nonces 来确 保POST 请求是合法的站内请求,而不是其他客户端发送的。

创建 Nonces

通过 wp_create_nonce 自动生成 nonce Cookie 信息,下方代码插入主题中的 function.php 最后一空行

  1. function wpb_hook_javascript() {
  2. ?>
  3. <script>
  4.   var WP_API_Settings = {
  5.     "root": "<?php echo esc_url_raw( rest_url() );?>",
  6.     "nonce": "<?php echo wp_create_nonce( 'wp_rest' );?>"
  7.   };
  8. </script>
  9. <?php
  10. }
  11. add_action('wp_head', 'wpb_hook_javascript');

可以看到页面头部增加了脚本代码。

 

Nonces 用户身份验证

在请求时,请求头附加上 Nonce 示例如下

  1. header["X-WP-Nonce"] = WP_API_Settings.nonce;

 

 

 

2、JWT 认证

WordPress 提供的标准身份认证方式是基于 Cookie 的认证,只要用户登录了仪表盘,WordPress 就会自动帮我们设置好认证 Cookie。REST API 中使用 Nonces 技术来避免 CSRF 问题,如果我们在 WordPress 站点内使用 REST API 处理用户请求,可以使用基于 Nonces 的认证方法,但是如果需要开发一个脱离了 WordPress 模版的单页面应用,就无法获取 WordPress 设置 Nonce 随机数了,这种情况下,则需要用到 基于 JWT 的身份验证

 

安装 JWT Authentication for WP REST API 插件

WordPress 内核并不支持基于 JWT 的身份验证,需要安装 JWT Authentication for WP REST API 插件为 WordPress REST API 增加基于 JWT 的身份验证服务端。

直接在 WordPress 仪表盘搜索该插件、安装启用即可。安装插件之前,确保 WP REST API 没有被禁用,否则该插件不起任何作用。

 

 

主机环境要求

1.PHP 版本>= 5.3.0

2.主机启用了 HTTP 授权头支持,如果你使用的共享主机没有启用,请联系主机提供商启用

 

 

配置

JWT  需要一个密钥来对令牌进行签名,要确保这个密钥是唯一的,不要泄漏这个密钥。在 wp-config.php 里面增加以下内容即可。

  1. define('JWT_AUTH_CORS_ENABLE', true);
  2. define('JWT_AUTH_SECRET_KEY', 'your-top-secrect-key');

替换里面的your-top-secrect-key 为 64 位密钥,可以使用 WordPress 密钥生成服务来生成这个密钥:WordPress 密钥生成服务 。

 

 

JWT 用户身份验证

启用并配置好 JWT Authentication 插件后,访问 WP REST API 多了两个端口

  1. /wp-json/jwt-auth/v1/token 用于验证用户名、密码,并返回 Token
  2. /wp-json/jwt-auth/v1/token/validate 用于验证 Token 是否正确

通过发送账号密码到 /wp-json/jwt-auth/v1/token 获取到 token 后,把 token 保存起来,下次请求数据时,附带到请求头中去

  1. header['Authorization'] = 'Bearer ' + ‘请求返回的 token’;

 

JWT Authentication 插件会拦截每次 API 请求,查找授权头,如果授权头存在,JWT Authentication 会解码 Token、对 Token 进行验证,然后根据验证结果返回对应的状态码和授权信息。

具体的返回状态请查看 JWT Authentication for WP REST API 插件页面。

 

相关文章

评论一下

【注意1】:首次评论使用表情将会进入审核状态。
【注意2】:无意义回复、乱打文字内容将会进入审核状态。
【注意3】:涉及辱骂、色情、政治、毒品、赌博内容将会进入审核状态。
【注意】:首次评论使用表情将会进入审核状态。
暂无评论