搜尋
首頁web前端js教程使用基本驗證設定和使用WP REST API

在本系列的介紹部分中,我們快速回顧了 REST 架構以及它如何幫助我們創建更好的應用程式。然後,我們探索了 WordPress 中 REST API 的歷史,並向自己介紹了最新的新增功能:WP REST API 外掛程式。我們建立了一個用於測試外掛程式的基本工作環境,其中包括外掛程式安裝和用於發送請求或查看伺服器回應的 HTTP 用戶端。

在本系列的當前部分中,我們將在伺服器上設定基本身份驗證協議,以發送經過身份驗證的請求,以透過 REST API 執行各種任務。

具體來說,在這一部分我們將會:

  • 查看使用 REST API 外掛程式時可用的各種驗證方法
  • 在伺服器上設定基本驗證
  • 使用 Postman 發送經過驗證的請求
  • 使用 JavaScript 框架傳送經過驗證的請求
  • 使用命令列發送經過身份驗證的請求
  • 使用 WP HTTP API 傳送經過驗證的請求

但是讓我們先看一下身份驗證本身。

什麼是身份驗證?

就其最基本的定義而言,身分驗證是確定個人身分的過程。

根據網路百科:

識別個人的流程,通常是基於使用者名稱和密碼。在安全系統中,身分驗證與授權不同,授權是根據個人身分授予個人存取系統物件的過程。身份驗證僅確保個人是他或她聲稱的人,但沒有說明個人的存取權限。

在談論 WP REST API 時,擁有足夠權限的使用者可以執行各種 CRUD 任務,例如建立貼文、檢索網站的所有使用者或撤銷使用者的權限。但對於所有這些操作,使用者必須向伺服器證明他/她的身份,這就是身份驗證發揮作用的地方。

如果沒有適當的身份驗證,懷有惡作劇野心的人很容易對網站進行破壞,因此身份驗證提供了必要的安全層來限制用戶的權限和可以執行的操作。

使用 WP REST API 進行身份驗證

WP REST API 提供了三個驗證選項,每個選項都有特定的用途。這些選項是:

  • 基本身份驗證
  • OAuth 身份驗證
  • cookie 驗證

目前,使用 WordPress 進行驗證的本機方式是透過 cookie 進行驗證。這就是 WordPress 確定使用者身分及其可以執行的操作的方式。要將上面列出的其他兩種驗證方法與 WP REST API 結合使用,我們需要安裝 GitHub 上的 WP REST API 團隊提供的相應插件。希望這兩種方法也能透過 REST API 外掛本身包含在 WordPress 核心中。

基本驗證是最基本的 HTTP 驗證類型,其中登入憑證與請求標頭一起傳送。

基本驗證的工作原理

在基本驗證中,用戶端要求需要身份驗證的 URL。伺服器透過傳送 401-Not Authorized 程式碼請求用戶端(或用戶代理程式)驗證自身身分。作為回報,客戶端傳回相同的請求,但使用 Base64 編碼字串形式的登入憑證,格式為 使用者名稱:password。該字串在 Authorization 標頭欄位中傳送,如下所示:

Authorization: Basic {base64_encode(username:password)}

因此,如果使用者名稱是 tutsplus 且密碼是 123456,則以下標頭欄位將隨請求一起傳送:

Authorization: Basic dHV0c3BsdXM6MTIzNDU2

由於base64編碼的字串很容易被解碼,因此這種方法在開放網路上使用非常不安全。因此,當伺服器和客戶端之間的連接可信任時,此方法只能用於調試和開發目的。

安裝外掛程式

如上所述,WP REST API 團隊在 GitHub 上提供了該外掛程式。因此,我們需要做的就是將其複製到 plugins 目錄中並啟動它。

前往您的 /wp-content/plugins/ 目錄並複製您可能需要 sudo 權限來執行命令的插件。為此,請發出以下命令:

$ sudo git clone https://github.com/WP-API/Basic-Auth.git

終端將要求您輸入密碼。輸入您的密碼並將儲存庫克隆到一個目錄中。

克隆外掛後,透過 WP 管理員啟動它。基本的 HTTP 驗證方法現在可以與 REST API 外掛程式一起使用。

使用 Postman 發送經過驗證的請求

大多數 HTTP 用戶端本身就支援使用基本驗證方法傳送請求,Chrome 版 Postman 也是如此。若要傳送經過驗證的請求,請前往網址列下方的授權標籤:

使用基本身份验证设置和使用WP REST API

#

现在从下拉菜单中选择基本身份验证。系统将要求您输入用户名和密码。输入您的凭据后,点击更新请求按钮。

使用基本身份验证设置和使用WP REST API

更新身份验证选项后,您将在标头选项卡中看到更改,并且现在包括一个标头字段,其中包含编码的用户名和密码字符串:

使用基本身份验证设置和使用WP REST API

这就是我们如何使用 Postman 设置基本身份验证。现在您可以发送测试请求,例如删除帖子,这需要身份验证:

DELETE http://dev-server/wp-json/wp/v2/posts/52

其中 dev-server 是您的开发服务器的路径。

如果一切顺利,服务器将返回200 OK状态代码,表明id为52的帖子已被删除:

使用基本身份验证设置和使用WP REST API

不用担心我们在这里提出的请求 - 我们将在以后的部分中更详细地讨论它该系列。

从命令行发送经过身份验证的请求

我们可以使用命令行使用此方法发送经过身份验证的请求。考虑以下与上述请求等效的 curl

curl --request DELETE -I --user  admin:password http://dev-server/wp-json/wp/v2/posts/52

服务器将发送以下响应,表明一切正常:

HTTP/1.1 200 OK
Date: Fri, 28 Aug 2015 20:02:43 GMT
Server: Apache/2.4.6 (CentOS) PHP/5.6.12
X-Powered-By: PHP/5.6.12
Set-Cookie: PHPSESSID=k0rg6mcbsie7ufvoav219lqre0; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
X-Content-Type-Options: nosniff
Link: <http://localserver/wordpress-api/demo-post-28/>; rel="alternate"; type=text/html
Allow: GET, POST, PUT, PATCH, DELETE
Transfer-Encoding: chunked
Content-Type: application/json; charset=UTF-8

--request 选项指定要使用的请求方法,在我们的示例中为 DELETE。您还可以使用 -X 作为 --request 选项的替代选项。

-I 选项仅获取服务器发送的 HTTP 标头。 -I 的替代选项是 --head 选项。

使用 JavaScript 发送经过身份验证的请求

如果您使用客户端 JavaScript 框架(例如 jQuery)与启用了 WP API 的 WordPress 站点进行远程交互,则可以在 AJAX 请求中发送授权标头。考虑通过 jQuery.ajax() 方法发送的以下 DELETE 请求:

$.ajax({
    url: 'http://dev-server/wp-json/wp/v2/posts/52',
	method: 'DELETE',
	crossDomain: true,
	beforeSend: function ( xhr ) {
    	xhr.setRequestHeader( 'Authorization', 'Basic ' + Base64.encode( 'username:password' ) );
	},
	success: function( data, txtStatus, xhr ) {
		console.log( data );
		console.log( xhr.status );
	}
});

其中 Base64 是用于编码和解码 Base64 字符串的对象。在上面的 jQuery.ajax() 方法调用之前,其定义如下:

var Base64={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encode:function(e){var t="";var n,r,i,s,o,u,a;var f=0;e=Base64._utf8_encode(e);while(f<e.length){n=e.charCodeAt(f++);r=e.charCodeAt(f++);i=e.charCodeAt(f++);s=n>>2;o=(n&3)<<4|r>>4;u=(r&15)<<2|i>>6;a=i&63;if(isNaN(r)){u=a=64}else if(isNaN(i)){a=64}t=t+this._keyStr.charAt(s)+this._keyStr.charAt(o)+this._keyStr.charAt(u)+this._keyStr.charAt(a)}return t},decode:function(e){var t="";var n,r,i;var s,o,u,a;var f=0;e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"");while(f<e.length){s=this._keyStr.indexOf(e.charAt(f++));o=this._keyStr.indexOf(e.charAt(f++));u=this._keyStr.indexOf(e.charAt(f++));a=this._keyStr.indexOf(e.charAt(f++));n=s<<2|o>>4;r=(o&15)<<4|u>>2;i=(u&3)<<6|a;t=t+String.fromCharCode(n);if(u!=64){t=t+String.fromCharCode(r)}if(a!=64){t=t+String.fromCharCode(i)}}t=Base64._utf8_decode(t);return t},_utf8_encode:function(e){e=e.replace(/\r\n/g,"\n");var t="";for(var n=0;n<e.length;n++){var r=e.charCodeAt(n);if(r<128){t+=String.fromCharCode(r)}else if(r>127&&r<2048){t+=String.fromCharCode(r>>6|192);t+=String.fromCharCode(r&63|128)}else{t+=String.fromCharCode(r>>12|224);t+=String.fromCharCode(r>>6&63|128);t+=String.fromCharCode(r&63|128)}}return t},_utf8_decode:function(e){var t="";var n=0;var r=c1=c2=0;while(n<e.length){r=e.charCodeAt(n);if(r<128){t+=String.fromCharCode(r);n++}else if(r>191&&r<224){c2=e.charCodeAt(n+1);t+=String.fromCharCode((r&31)<<6|c2&63);n+=2}else{c2=e.charCodeAt(n+1);c3=e.charCodeAt(n+2);t+=String.fromCharCode((r&15)<<12|(c2&63)<<6|c3&63);n+=3}}return t}};

我在 StackOverflow 上找到了它,它是一种在 JavaScript 中编码和解码 Base64 字符串的跨浏览器方式。

在上述请求中,我们使用 xhr 对象的 setRequestHeader() 方法作为参数传递给 Authorization 标头beforeSend() 方法。

除了上述请求之外,Access-Control-Allow-Headers 标头还应允许服务器上的 Authorization 字段。可以通过在 WordPress .htaccess 文件中添加以下代码行来启用此功能:

Header always set Access-Control-Allow-Headers Authorization Header always set

上述请求完成后,将在浏览器控制台中回显响应,如下图所示:

使用基本身份验证设置和使用WP REST API

服务器返回的200状态响应代码显示id为52已成功删除。

使用 WP HTTP API 发送经过身份验证的请求

如果您通过 WordPress 安装与另一个 WordPress 站点进行远程交互,发送 HTTP 请求的最合适方法是 WP HTTP API。

考虑以下代码,该代码将 DELETE 请求发送到另一个启用了 WP REST API 和基本身份验证的 WordPress 安装:

$wp_request_headers = array(
    'Authorization' => 'Basic ' . base64_encode( 'username:password' )
);

$wp_request_url = 'http://localserver/wordpress-api/wp-json/wp/v2/posts/52';

$wp_delete_post_response = wp_remote_request(
	$wp_request_url,
	array(
		'method'	=> 'DELETE',
		'headers' 	=> $wp_request_headers
	)
);

echo wp_remote_retrieve_response_code( $wp_delete_post_response ) . ' ' . wp_remote_retrieve_response_message( $wp_delete_post_response );

这里我们使用了 wp_remote_request() 函数,它接受两个参数:

  • $url: 请求的URL
  • $args:要传递的附加参数数组

$args 数组中定义的 $method 数组是 DELETE,并且应始终以大写形式书写。 $headers 数组采用随请求传递的所有标头字段的键值对。我们已经传递了 Authorization 密钥,其值为 base64 编码的用户名和密码字符串。

响应将保存在 $wp_delete_post_response 变量中,我们可以将其与 wp_remote_retrieve_response_code()wp_remote_retrieve_response_message() 一起使用功能。这两个函数是 WP HTTP API 中的辅助函数,它们分别从响应中提取状态代码和状态消息。

如果通过上述请求成功删除帖子,则会回显以下文本:

200 OK

这就是 WP REST API 支持的基本身份验证方法。由于其简单性,除非另有说明,我们将在未来的部分中使用相同的身份验证方法来检索、创建或修改数据。

结论

在本系列的当前部分中,我们仔细研究了 WP REST API 支持的基本 HTTP 身份验证方法。但是,它不应该在实时生产环境中使用,因为 Base64 编码的字符串很容易被解码,并且您的凭据可能会落入坏人之手。

成功设置并测试 HTTP 基本身份验证方法后,我们准备进一步设置更复杂的身份验证方式 — OAuth 1.0a 方法。我们将在本系列的下一部分中做到这一点,敬请期待!

以上是使用基本驗證設定和使用WP REST API的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
JavaScript是用C編寫的嗎?檢查證據JavaScript是用C編寫的嗎?檢查證據Apr 25, 2025 am 12:15 AM

是的,JavaScript的引擎核心是用C語言編寫的。 1)C語言提供了高效性能和底層控制,適合JavaScript引擎的開發。 2)以V8引擎為例,其核心用C 編寫,結合了C的效率和麵向對象特性。 3)JavaScript引擎的工作原理包括解析、編譯和執行,C語言在這些過程中發揮關鍵作用。

JavaScript的角色:使網絡交互和動態JavaScript的角色:使網絡交互和動態Apr 24, 2025 am 12:12 AM

JavaScript是現代網站的核心,因為它增強了網頁的交互性和動態性。 1)它允許在不刷新頁面的情況下改變內容,2)通過DOMAPI操作網頁,3)支持複雜的交互效果如動畫和拖放,4)優化性能和最佳實踐提高用戶體驗。

C和JavaScript:連接解釋C和JavaScript:連接解釋Apr 23, 2025 am 12:07 AM

C 和JavaScript通過WebAssembly實現互操作性。 1)C 代碼編譯成WebAssembly模塊,引入到JavaScript環境中,增強計算能力。 2)在遊戲開發中,C 處理物理引擎和圖形渲染,JavaScript負責遊戲邏輯和用戶界面。

從網站到應用程序:JavaScript的不同應用從網站到應用程序:JavaScript的不同應用Apr 22, 2025 am 12:02 AM

JavaScript在網站、移動應用、桌面應用和服務器端編程中均有廣泛應用。 1)在網站開發中,JavaScript與HTML、CSS一起操作DOM,實現動態效果,並支持如jQuery、React等框架。 2)通過ReactNative和Ionic,JavaScript用於開發跨平台移動應用。 3)Electron框架使JavaScript能構建桌面應用。 4)Node.js讓JavaScript在服務器端運行,支持高並發請求。

Python vs. JavaScript:比較用例和應用程序Python vs. JavaScript:比較用例和應用程序Apr 21, 2025 am 12:01 AM

Python更適合數據科學和自動化,JavaScript更適合前端和全棧開發。 1.Python在數據科學和機器學習中表現出色,使用NumPy、Pandas等庫進行數據處理和建模。 2.Python在自動化和腳本編寫方面簡潔高效。 3.JavaScript在前端開發中不可或缺,用於構建動態網頁和單頁面應用。 4.JavaScript通過Node.js在後端開發中發揮作用,支持全棧開發。

C/C在JavaScript口譯員和編譯器中的作用C/C在JavaScript口譯員和編譯器中的作用Apr 20, 2025 am 12:01 AM

C和C 在JavaScript引擎中扮演了至关重要的角色,主要用于实现解释器和JIT编译器。1)C 用于解析JavaScript源码并生成抽象语法树。2)C 负责生成和执行字节码。3)C 实现JIT编译器,在运行时优化和编译热点代码,显著提高JavaScript的执行效率。

JavaScript在行動中:現實世界中的示例和項目JavaScript在行動中:現實世界中的示例和項目Apr 19, 2025 am 12:13 AM

JavaScript在現實世界中的應用包括前端和後端開發。 1)通過構建TODO列表應用展示前端應用,涉及DOM操作和事件處理。 2)通過Node.js和Express構建RESTfulAPI展示後端應用。

JavaScript和Web:核心功能和用例JavaScript和Web:核心功能和用例Apr 18, 2025 am 12:19 AM

JavaScript在Web開發中的主要用途包括客戶端交互、表單驗證和異步通信。 1)通過DOM操作實現動態內容更新和用戶交互;2)在用戶提交數據前進行客戶端驗證,提高用戶體驗;3)通過AJAX技術實現與服務器的無刷新通信。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具