WordPress REST API 認証プラグインは、WordPress REST API への不正アクセスからのセキュリティを提供します。
の検索結果 :
×OAuth 2.0 API へのアクセスを認証するために最も選択される方法です。 OAuth 2.0 を使用すると、ユーザーの電子メール アドレスやパスワードを外部アプリケーションに提供する必要がなくても認証が可能になります。 WordPress REST API OAuth 2.0 認証のこの方法では、OAuth 2.0 プロトコル フローを使用してセキュリティ アクセス トークンまたは ID トークン (JWT トークン) を取得し、そのトークンは WordPress REST API エンドポイントの認証に使用されます。 WordPress REST API エンドポイントへのアクセス要求が行われるたびに、そのアクセス トークン/ID トークン (JWT トークン) に対して認証が行われ、その API ベアラー トークンの検証に基づいて、その API のリソースが認証されます。リクエストによるアクセスが許可されます。
OAuth 2.0 認証方法を使用して提供されるトークンは高度に暗号化されており安全であるため、セキュリティが侵害されることはありません。これは、WordPress REST API エンドポイントを認証/保護するための最も安全な方法です。この方法は JWT 認証方法に似ていますが、OAuth 2.0 プロトコルのさまざまな利点により、はるかに安全です。
WordPress REST API 認証プラグインは、WordPress REST API への不正アクセスからのセキュリティを提供します。
ユースケース: WordPress REST API 経由で WordPress 認証情報に基づいて外部プラットフォームで WordPress ユーザーを登録するか、ユーザーを認証 /login します。
アプリケーションにログイン フォームがあり、WordPress ログイン資格情報に基づいてユーザーを認証したいとします。その場合、REST API メソッドの OAuth 2.0 認証がそれを実現するのに役立ちます。このプラグインは、WordPress ログイン API を提供します。そのユーザーの WordPress 資格情報をこの API に簡単に渡すことができ、検証に基づいて認証と応答を受け取ります。
また、REST API メソッドでの OAuth 2.0 認証の実装は、WordPress ユーザーの管理者資格情報を使用して WordPress にユーザーを登録するためにも使用できます。プラグイン OAuth 2.0 トークン エンドポイントを使用すると、管理者機能を持つ WordPress ユーザー資格情報を渡すことができ、生成されたトークンは管理者権限を持ち、管理者権限が必要なユーザー登録などの操作を実行するために使用できます。トークンを取得したら、このトークンを wordPress '/users' API で使用し、REST API リクエスト経由で WordPress にユーザーを登録できます。
ユースケース: WordPress REST API エンドポイントを安全に認証/保護するか、管理者ユーザーの資格情報を使用せずに WordPress にユーザーを登録します。
WordPress ユーザー資格情報を渡さずに WordPress REST API にアクセスしたい場合、または WordPress の管理者ユーザー資格情報を渡す必要なく、代わりにプラグインによって提供されるクライアント資格情報を渡してユーザーを WordPress に安全に登録したい場合、この方法は次のとおりです。ユーザーの資格情報が侵害される可能性がない完璧なソリューションです。
このプラグインは、トークンを提供する OAuth 2.0 ID プロバイダー (サーバー) と、トークンに基づいてこれらの WordPress REST API エンドポイントを認証するための REST API オーセンティケーターの両方として機能します。したがって、トークンを取得するための最大限のセキュリティが提供され、そのトークンを REST API リクエストの認証に使用できます。
1. プラグインのトークンを取得するために、適切なパラメーターを使用して REST API リクエストが作成されます。私たちのプラグインは OAuth 2.0 ID プロバイダーとして機能し、アクセス トークンを提供します。
2. リソースにアクセスするための実際の REST API リクエストは、トークン タイプをベアラーとして Authorization ヘッダーに渡された最後のステップから受け取ったアクセス トークンを使用して行われます。プラグインは、トークンの有効性に基づいて API を認証するオーセンティケーターとして機能するようになりました。トークンが正常に検証された場合、API リクエスタはリソースへのアクセスを許可されます。それ以外の場合、検証が失敗した場合はエラー応答が返されます。
関連する使用例:
これでプラグインのセットアップ部分は正常に完了しました。以下は、実際のセキュリティ アクセス/JWT トークンが取得され、WordPress REST API にアクセスするためにさらに使用される部分です。
Request: POST https://<domain-name>/wp-json/api/v1/token
Body:
grant_type =<password>
username =<wordpress username>
password = <wordpress password>
client_id =<client id>
Sample curl Request Format-
curl -d "grant_type=password&username=<wordpress_username>&password=<wordpress_password>&client_id=<client_id>"
-X POST http://<wp_base_url>/wp-json/api/v1/token
-H 'app-name:TheAppName'
Request: POST https://<domain-name>/wp-json/api/v1/token
Body:
grant_type = <refresh_token>
refresh_token = <Refresh Token>
Sample curl Request Format-
curl -d "grant_type=refresh_token&refresh_token=<refresh_token>&client_id=<client_id>&client_secret=<client_secret>"
-X POST http://<wp_base_url>/wp-json/api/v1/token
-H 'app-name:TheAppName'
Request: GET https://<domain-name>/wp-json/wp/v2/posts
Header: Authorization :Bearer <access_token /id_token>
Request: POST https://<domain-name>/wp-json/api/v1/token
Body:
grant_type = <client_credentials>
client_id = <client id>
client_secret = <client secret>
Sample curl Request Format-
curl -d "grant_type=client_credentials&client_id=<client_id>&client_secret=<client_secret>"
-X POST http://<wp_base_url>/wp-json/api/v1/token
-H 'app-name:TheAppName'
Request: POST https://<domain-name>/wp-json/api/v1/token
Body:
grant_type = <refresh_token>
refresh_token = <Refresh Token>
Sample curl Request Format-
curl -d "grant_type=refresh_token&refresh_token=<refresh_token>&client_id=<client_id>&client_secret=<client_secret>"
-X POST http://<wp_base_url>/wp-json/api/v1/token
-H 'app-name:TheAppName'
Request: GET https://<domain-name>/wp-json/wp/v2/posts
Header: Authorization : Bearer <access_token /id_token>
1. リフレッシュトークン -
トークン エンドポイント リクエストでアクセス トークンまたは JWT トークンとともにリフレッシュ トークンである文字列を受信する場合は、このオプションを有効にできます。これにより、ユーザーは以前に許可されたのと同じリソースにアクセスできるようになります。新しいトークンが作成されると、ユーザーは元の許可を超えるアクセス権を取得できなくなります。リフレッシュ トークンを使用すると、認可サーバーは、トークンの有効期限についてユーザーを関与させることなく、アクセス トークンに短い期間 (有効期間) を使用できるようになります。セキュリティを強化するために間もなく期限切れになるアクセス トークン/JWT トークンを、このトークンを使用して再生成できます。
2. トークンの取り消し -
このオプションを有効にすると、既存のアクセス トークン/JWT トークンを取り消して無効にすることができるため、特定のトークンを WP REST API の認証に使用できなくなります。 RESTful API は、最初にアプリケーションの資格情報を検証し、取り消し要求を行ったアプリケーションに対してトークンが発行されたかどうかを検証します。検証が成功しなかった場合、特定のリクエストは拒否され、アプリケーションにエラーが表示されます。 API はトークンを無効にし、失効後はトークンを再度使用することはできません。失効リクエストごとに、同じ種類の認可付与に対して発行されたトークンが無効になります。
var client = new RestClient("http://<wp_base_url>/wp-json/api/v1/token ");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AlwaysMultipartFormDatatrue;
request.AddHeader("app-name", "TheAppName");
request.AddParameter("grant_type", "client_credentials");
request.AddParameter("client_id", "<client_id>");
request.AddParameter("client_secret", "<client_secret>");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder().build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM)
.addFormDataPart("grant_type", "client_credentials");
.addFormDataPart("client_id", "<client_id>");
.addFormDataPart("client_secret", "<client_secret>");
.build();
Request request = new Request.Builder()
.url("http://<wp_base_url>/wp-json/api/v1/token ")
.method("POST", null)
.addHeader("app-name", "TheAppName")
.build();
Response responseclient.newCall(request).execute();
var form = new FormData();
form.append("grant_type", "client_credentials");
form.append("client_id", "<client_id>");
form.append("client_secret", "<client_secret>");
var settings = {
"url": "http://<wp_base_url>/wp-json/api/v1/token ",
"method": "POST",
"timeout": 0,
"headers": {"app-name": "TheAppName"}
"processData": false,
"mimeType": "multipart/form-data",
"contentType": false,
"data": form
};
$.ajax(settings).done(function (response) {
console.log(response);
});
<?php
$curl = curl_init();
curl_setopt_array($curl, array
(
CURLOPT_URL => 'http://%3Cwp_base_url%3E/wp-json/api/v1/token',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => array( 'app-name: TheAppName' )
CURLOPT_POSTFIELDS => array('grant_type' => 'client_credentials','client_id' => '<client_id>','client_secret' => '<client_secret>'),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import http.client
import mimetypes
from codecs import encode
conn = http.client.HTTPSConnection("<wp_base_url>")
dataList= []
boundary = 'wL36Yn8afVp8Ag7AmP8qZ0SA4n1v9T'
dataList.append(encode('--' + boundary))
dataList.append(encode('Content-Disposition: form-data; name=grant_type;'))
dataList.append(encode('Content-Type: {}'.format('text/plain')))
dataList.append(encode(''))
dataList.append(encode("client_credentials"))
dataList.append(encode('--' + boundary))
dataList.append(encode('Content-Disposition: form-data; name=client_id;'))
dataList.append('Content-Type: {}'.format('text/plain')))
dataList.append(encode(''))
dataList.append(encode("<client_id>"))
dataList.append(encode('--'+ boundary))
dataList.append(encode('Content-Disposition: form-data; name=client_secret;'))
dataList.append(encode('Content-Type: {}'.format('text/plain')))
dataList.append(encode(''))
dataList.append(encode("<client_secret<"))
dataList.append(encode('--'+boundary+'--'))
dataList.append(encode(''))
body = b'\r\n'.join(dataList)
payload= body
headers = {
'Content-type': 'multipart/form-data; boundary={}'.format(boundary),
'app-name': 'TheAppName'
}
conn.request("POST", "/wp-json/api/v1/token ", payload, headers)
res= conn.getresponse()
data = res.read()
print (data.decode("utf-8"))
var client = new RestClient("http://<wp_base_url>/wp-json/api/v1/token ");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AlwaysMultipartFormData true;
request.AddHeader("app-name", "TheAppName");
request.AddParameter("grant_type", "password");
request.AddParameter("username", "<wordpress_username>");
request.AddParameter("password", "<wordpress_password>");
request.AddParameter("client_id", "<client_id>");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder().build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM)
.addFormDataPart("grant_type", "password");
.addFormDataPart("username", "<wordpress_username>");
.addFormDataPart("password", "<wordpress_password>");
.addFormDataPart("client_id", "<client_id>");
.build();
Request request = new Request.Builder()
.url("http://<wp_base_url>/wp-json/api/v1/token ")
.method("POST", null)
.addHeader("app-name", "TheAppName")
.build();
Response responseclient.newCall(request).execute();
var form = new FormData();
form.append("grant_type", "password");
form.append("username", "<wordpress_username>");
form.append("password", "<wordpress_password>");
form.append("client_id", "<client_id>");
var settings = {
"url": "http://<wp_base_url>/wp-json/api/v1/token ",
"method": "POST",
"timeout": 0,
"headers": {"app-name": "TheAppName"}
"processData": false,
"mimeType": "multipart/form-data",
"contentType": false,
"data": form
};
$.ajax(settings).done(function (response) {
console.log(response);
});
<?php
$curl = curl_init();
curl_setopt_array($curl, array
( CURLOPT_URL => 'http://%3Cwp_base_url%3E/wp-json/api/v1/token%20',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => array( 'app-name: TheAppName' )
CURLOPT_POSTFIELDS => array('username' => '<wordpress_username>','password' => '<wordpress_password>'),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import http.client
import mimetypes
from codecs import encode
conn = http.client.HTTPSConnection("<wp_base_url>")
dataList= []
boundary = 'wL36Yn8afVp8Ag7AmP8qZ0SA4n1v9T'
dataList.append(encode('--' + boundary))
dataList.append(encode('Content-Disposition: form-data; name=grant_type;'))
dataList.append(encode('Content-Type: {}'.format('text/plain')))
dataList.append(encode(''))
dataList.append(encode("password"))
dataList.append(encode('--' + boundary))
dataList.append(encode('Content-Disposition: form-data; name=username;')
dataList.append('Content-Type: {}'.format('text/plain')))
dataList.append(encode(''))
dataList.append(encode("<wordpress_username>"))
dataList.append(encode('--'+ boundary))
dataList.append(encode('Content-Disposition: form-data; name=password;'))
dataList.append(encode('Content-Type: {}'.format('text/plain')))
dataList.append(encode(''))
dataList.append(encode("<wordpress_password<"))
dataList.append(encode('--'+boundary))
dataList.append(encode('Content-Disposition: form-data; name=client_id;'))
dataList.append(encode('Content-Type: {}'.format('text/plain')))
dataList.append(encode(''))
dataList.append(encode("<client_id>"))
dataList.append(encode('--'+boundary+'--'))
dataList.append(encode(''))
body = b'\r\n'.join(dataList)
payload= body
headers = {
'Content-type': 'multipart/form-data; boundary={}'.format(boundary),
'app-name': 'TheAppName'
conn.request("POST", "/wp-json/api/v1/token ", payload, headers)
res= conn.getresponse()
data = res.read()
print (data.decode("utf-8"))
var client = new RestClient("http://<wp_base_url>/wp-json/api/v1/token ");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AlwaysMultipartFormDatatrue;
request.AddHeader("app-name", "TheAppName");
request.AddParameter("grant_type", "refresh_token");
request.AddParameter("client_id", "<client_id>");
request.AddParameter("client_secret", "<client_secret>");
request.AddParameter("refresh_token", "<refresh_token>");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder().build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM)
.addFormDataPart("grant_type", "refresh_token");
.addFormDataPart("client_id", "<client_id>");
.addFormDataPart("client_secret", "<client_secret>");
.addFormDataPart("refresh_token", "<refresh_token>");
.build();
Request request = new Request.Builder()
.url("http://<wp_base_url>/wp-json/api/v1/token ")
.method("POST", null)
.addHeader("app-name", "TheAppName")
.build();
Response responseclient.newCall(request).execute();
var form = new FormData();
form.append("grant_type", "refresh_token");
form.append("client_id", "<client_id>");
form.append("client_secret", "<client_secret>");
form.append("refresh_token", "<refresh_token>");
var settings = {
"url": "http://<wp_base_url>/wp-json/api/v1/token ",
"method": "POST",
"timeout": 0,
"headers": {"app-name": "TheAppName"}
"processData": false,
"mimeType": "multipart/form-data",
"contentType": false,
"data": form
};
$.ajax(settings).done(function (response) {
console.log(response);
});
<?php
$curl = curl_init();
curl_setopt_array($curl, array
(
CURLOPT_URL => 'http://%3Cwp_base_url%3E/wp-json/api/v1/token',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => array( 'app-name: TheAppName' )
CURLOPT_POSTFIELDS => array('grant_type' => 'refresh_token','client_id' => '<client_id>','client_secret' => '<client_secret>','refresh_token' => '<refresh_token>'),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import http.client
import mimetypes
from codecs import encode
conn = http.client.HTTPSConnection("<wp_base_url>")
dataList= []
boundary = 'wL36Yn8afVp8Ag7AmP8qZ0SA4n1v9T'
dataList.append(encode('--' + boundary))
dataList.append(encode('Content-Disposition: form-data; name=grant_type;'))
dataList.append(encode('Content-Type: {}'.format('text/plain')))
dataList.append(encode(''))
dataList.append(encode("refresh_token"))
dataList.append(encode('--' + boundary))
dataList.append(encode('Content-Disposition: form-data; name=client_id;'))
dataList.append('Content-Type: {}'.format('text/plain')))
dataList.append(encode(''))
dataList.append(encode("<client_id>"))
dataList.append(encode('--'+ boundary))
dataList.append(encode('Content-Disposition: form-data; name=client_secret;'))
dataList.append(encode('Content-Type: {}'.format('text/plain')))
dataList.append(encode(''))
dataList.append(encode("<client_id>"))
dataList.append(encode('--'+ boundary))
dataList.append(encode('Content-Disposition: form-data; name=refresh_token;'))
dataList.append(encode('Content-Type: {}'.format('text/plain')))
dataList.append(encode(''))
dataList.append(encode("<refresh_token<"))
dataList.append(encode('--'+boundary+'--'))
dataList.append(encode(''))
body = b'\r\n'.join(dataList)
payload= body
headers = {
'Content-type': 'multipart/form-data; boundary={}'.format(boundary),
'app-name': 'TheAppName'
conn.request("POST", "/wp-json/api/v1/token ", payload, headers)
res= conn.getresponse()
data = res.read()
print (data.decode("utf-8"))
var client = new RestClient("http://<wp_base_url>/wp-json/wp/v2/posts");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
request.AddHeader = ("Authorization", "Bearer < access_token / id_token >");
request.AddHeader = ("app-name", "TheAppName");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder().build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = RequestBody.create(mediaType, "");
Request request = new Request.Builder()
.url("http://<wp_base_url>//wp-json/wp/v2/posts")
.method("GET", body)
.addHeader = ("Authorization", "Bearer < access_token / id_token >");
.addHeader = ("app-name", "TheAppName");
.build();
Response responseclient.newCall(request).execute();
var settings = {
"url": "http://<wp_base_url>/wp-json/wp/v2/posts ",
"method": "GET",
"timeout": 0,
"headers": {
"Authorization": "Bearer < access_token / id_token >",
"app-name": "TheAppName"
},
};
$.ajax(settings).done(function (response) {
console.log(response);
});
<?php
$curl = curl_init();
curl_setopt_array($curl, array
(
curl_setopt_array($curl, array(
CURLOPT_URL => 'http://%3Cwp_base_url%3E/wp-json/wp/v2/posts%20',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Authorization: Bearer < access_token / id_token >',
'app-name: TheAppName'
);
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import http.client
conn = http.client.HTTPSConnection("<wp_base_url>")
payload = "
headers = {
'Authorization': 'Bearer < access_token / id_token >',
'app-name': 'TheAppName',
}
conn.request("GET", "/wp-json/wp/v2/posts ", payload, headers)
res= conn.getresponse()
data = res.read()
print (data.decode("utf-8"))
a) OAuth 2.0 パスワードの付与方法:
b) OAuth 2.0 クライアント認証情報の付与方法:
c) 実際のリソースを取得するための REST API リクエスト:
この機能を使用すると、ユーザーのロールに基づいて REST API アクセスを制限できます。 REST API の要求されたリソースへのアクセスを許可するロールをホワイトリストに登録できます。したがって、ユーザーによって REST API リクエストが行われるたびに、ユーザーのロールがフェッチされ、そのロールがホワイトリストに登録されている場合にのみリソースへのアクセスが許可されます。
それを構成する方法は?
注: ロールベースの制限機能は、Basic 認証 (ユーザー名: パスワード)、JWT 方式、および OAuth 2.0 (パスワード付与) に対して有効です。
この機能では、デフォルトの「Authorization」ヘッダーではなくカスタム ヘッダーを選択するオプションが提供されます。
ヘッダーに「カスタム名」を付けるとセキュリティが強化されるため、誰かがヘッダーを「Authorization」として REST API リクエストを作成した場合、その人は API にアクセスできなくなります。
それを構成する方法は?
この機能を使用すると、REST API をホワイトリストに登録して、認証なしで直接アクセスできるようになります。したがって、これらのホワイトリストに登録された REST API はすべて公開されています。
それを構成する方法は?
この機能は、時間ベースのトークンを使用して WordPress REST API エンドポイントを認証する JWT および OAuth 2.0 メソッドに適用できます。この機能を使用すると、トークンの有効期限が切れると無効になるように、トークンのカスタム有効期限を設定できます。
それを構成する方法は?
メールでお問い合わせください apisupport@xecurify.com お客様の要件に関する迅速なガイダンス(電子メール/会議経由)が必要です。当社のチームは、お客様の要件に応じて最適なソリューション/プランの選択をお手伝いします。
助けが必要? 私たちはここにいます!
このプライバシーに関する声明は、個人情報の取り扱い方法を説明する miniorange の Web サイトに適用されます。 Web サイトにアクセスすると、ブラウザ上の情報が主に Cookie の形式で保存または取得されることがあります。 この情報はあなた、あなたの設定、またはデバイスに関するものであり、主にサイトを期待どおりに動作させるために使用されます。 この情報はお客様を直接特定するものではありませんが、よりパーソナライズされた Web エクスペリエンスを提供することができます。 カテゴリの見出しをクリックして、Cookie の処理方法を確認してください。 当社のソリューションのプライバシーに関する声明については、以下を参照してください。 プライバシーポリシーをご覧ください。.
必要な Cookie は、サイト ナビゲーション、ログイン、フォームへの入力などの基本機能を有効にすることで、Web サイトを十分に利用できるようにするのに役立ちます。この機能に使用される Cookie には個人を特定できる情報は保存されません。 ただし、Web サイトの一部の部分は Cookie がないと正しく動作しません。
これらの Cookie は、訪問者、ソース、ページのクリックとビューなどを含む、Web サイトのトラフィックに関する集約情報のみを収集します。これにより、当社は、最も人気のあるページと最も人気のないページ、およびアクション可能な要素でのユーザーのインタラクションについてさらに詳しく知ることができるため、当社は、当社のウェブサイトおよび当社のサービスのパフォーマンスを向上させます。