WordPress REST API 인증 플러그인은 WordPress REST API에 대한 무단 액세스로부터 보안을 제공합니다.
검색 결과 :
×WordPress REST API 기본 인증을 사용하면 사용자 이름, 비밀번호 또는 클라이언트 자격 증명에서 생성된 API 토큰을 검증하여 WordPress REST API에 대한 액세스를 확인할 수 있습니다.
WordPress REST API 엔드포인트에 대한 액세스 요청이 이루어질 때마다 연결된 토큰에 대한 인증을 거칩니다. 이후 특정 API 요청에 대한 리소스에 대한 액세스는 이 API 토큰의 성공적인 검증에 따라 결정됩니다. 보안을 유지하기 위해 액세스 토큰은 암호화되어 보안/데이터 위반을 방지합니다.
WordPress REST API 인증 플러그인은 WordPress REST API에 대한 무단 액세스로부터 보안을 제공합니다.
1. 사용자 자격 증명을 기준으로:
Android/iOS 앱이 있고 사용자에게 모바일 앱에 개인 피드나 블로그를 게시할 수 있는 기능을 제공했다고 가정해 보겠습니다.
이 경우 모바일 앱의 요청을 인증해야 합니다.
사용자 이름과 비밀번호가 포함된 WordPress 기본 인증 REST API가 이 경우에 가장 적합한 인증 방법입니다. 사용자 권한이나 기능과 관련된 REST API를 통해 WordPress 작업을 수행하는 것이 도움이 될 것입니다.
사용자 세션이 생성되고 WordPress 기능을 기반으로 REST API 콘텐츠에 액세스하거나 원하는 작업을 수행할 수 있습니다.
2. 클라이언트 자격 증명 기반:
Android 또는 iOS 애플리케이션이 있고 REST API 엔드포인트를 통해 WordPress 콘텐츠와 상호작용하고 싶다고 가정해 보세요. 그러나 침입자가 WP 사이트에 무단으로 액세스할 수 있는 잠재적인 노출을 방지하기 위해 WP 사용자 자격 증명을 활용하는 것을 꺼려합니다.
이러한 시나리오에서는 클라이언트 ID와 클라이언트 비밀을 활용하여 WP 사용자 자격 증명을 보호하는 WordPress 기본 인증 Rest API를 사용하는 것이 좋습니다.
이 방법을 사용하면 각 요청에 플러그인에서 제공하는 클라이언트 ID와 클라이언트 비밀번호만 포함하면 됩니다. 결과적으로 클라이언트 ID와 비밀번호가 각 API 요청의 기본 인증 헤더 내에서 암호화된 형식으로 전송되므로 보안이 손상되지 않습니다. 그런 다음 이러한 자격 증명의 유효성을 검사하고 유효성 검사에 성공하면 WP API 기본 인증이 요청된 API에 대한 액세스 권한을 부여합니다.
사용자 이름 및 비밀번호를 사용한 REST API 기본 인증:
클라이언트 ID 및 클라이언트 비밀번호를 사용한 REST API 기본 인증:
Request: GET https://<domain-name>/wp-json/wp/v2/posts
Header: Authorization: Basic base64encoded <client-id:client-secret>
Sample Request Format-
Example => Client ID : pSYQsKqTndNVpNKcnoZd and Client Secret : SrYPTViHdCbvkWyTfWrSltavTMeJjaOHCye
Sample curl Request Format-
curl -H "Authorization:Basic base64encoded <clientid:clientsecret>"
-X POST http://<wp_base_url>/wp-json/wp/v2/users
-d"username=test&email=test@test.com&password=test&name=test"
base64_encode(‘pSYQsKqTndNVpNKcnoZd:SrYPTViHdCbvkWyTfWrSltavTMeJjaOHCye’) will results into
‘cFNZUXNLcV RuZE5WcE5LY25vWmQ6U3JZUFRWaUhkQ2J2a1d5VGZXclNsdGF2VE1lSmphT0hDeWU=’ as output.
Sample request: GET https://<domain-name>/wp-json/wp/v2/posts
Header: Authorization :Basic eGw2UllOdFN6WmxKOlNMRWcwS1ZYdFVrbm5XbVV2cG9RVFNLZw==
사용자 이름 및 비밀번호를 사용한 REST API 기본 인증:
Request: GET https://<domain-name>/wp-json/wp/v2/posts
Header: Authorization: Basic base64encoded <username:password>
Sample Request Format-
Example => username : testuser and password : password@123
Sample curl Request Format-
curl -H "Authorization:Basic base64encoded <username:password>"
-X POST http://<wp_base_url>/wp-json/wp/v2/posts -d "title=sample post&status=publish"
base64_encode(‘testuser:password@123’) will results into ‘eGw2UllOdFN6WmxKOlNMRWcwS1ZYdFVrbm5XbVV2cG9RV FNLZw==’ as output.
Sample request: GET https://<domain-name>/wp-json/wp/v2/posts
Header: Authorization : Basic eGw2UllOdFN6WmxKOlNMRWcwS1ZYdFVrbm5XbVV2cG9RVFNLZw==
var client = new RestClient("http://<wp_base_url>/wp-json/wp/v2/posts ");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AlwaysMultipartFormData = true;
request.AddParameter("title", "Sample Post");
request.AddParameter("status", "publish");
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("title","Sample Post")
.addFormDataPart("status", "publish")
.build();
Request request = new Request.Builder()
.url("http://<wp_base_url>/wp-json/wp/v2/posts ")
.method("POST", body)
.build();
Response responseclient.newCall(request).execute();
var form = new FormData();
form.append("title","Sample Post");
form.append("status", "publish");
var settings = {
"url": "http://<wp_base_url>/wp-json/wp/v2/posts ",
"method": "POST",
"timeout": 0,
"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/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 => 'POST',
CURLOPT_POSTFIELDS => array('title' => 'Sample Post','status' => 'publish'),
));
$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=title;'))
dataList.append(encode('Content-Type: {}'.format('text/plain')))
dataList.append(encode(''))
dataList.append(encode("Sample Post"))
dataList.append(encode('--' + boundary))
dataList.append(encode('Content-Disposition: form-data; name=status;'))
dataList.append('Content-Type: {}'.format('text/plain')))
dataList.append(encode(''))
dataList.append(encode("publish"))
dataList.append(encode('--'+boundary+'--'))
dataList.append(encode(''))
body = b'\r\n'.join(dataList)
payload= body
headers = {
'Content-type': 'multipart/form-data; boundary={}'.format(boundary)
}
conn.request("POST", "/wp-json/wp/v2/posts ", 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.POST);
request.AddHeader("Authorization", "Basic base64encoded < clientid:clientsecret > ");
request.AlwaysMultipartFormData = true;
request.AddParameter("username", "test");
request.AddParameter("email", "test@test.com");
request.AddParameter("password", "test");
request.AddParameter("name", "test");
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("username","test")
.addFormDataPart("email","test@test.com")
.addFormDataPart("password","test")
.addFormDataPart("name","test")
.build();
Request request = new Request.Builder()
.url("http://<wp_base_url>/wp-json/wp/v2/posts ")
.method("POST", body)
.addHeader ("Authorization", "Basic base64encoded < clientid:clientsecret > ")
.build();
Response responseclient.newCall(request).execute();
var form = new FormData();
form.append("username", "test");
form.append("email", "test@test.com");
form.append("password", "test");
form.append("name", "test");
var settings = {
"url": "http://<wp_base_url>/wp-json/wp/v2/posts ",
"method": "POST",
"timeout": 0,
"headers": {
"Authorization": "Basic base64encoded < clientid:clientsecret > "
},
"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/wp/v2/users',
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_POSTFIELDS => array('username' => 'test','email' => 'test@test.com','password' => 'test','name' => 'test'),
CURLOPT_HTTPHEADER => array(
'Authorization: Basic base64encoded < clientid:clientsecret > '
),
))
$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=username;'))
dataList.append(encode('Content-Type: {}'.format('text/plain')))
dataList.append(encode(''))
dataList.append(encode("test"))
dataList.append(encode('--' + boundary))
dataList.append(encode('Content-Disposition: form-data; name=email;'))
dataList.append('Content-Type: {}'.format('text/plain')))
dataList.append(encode(''))
dataList.append(encode("test@test.com"))
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("test"))
dataList.append(encode('--' + boundary))
dataList.append(encode('Content-Disposition: form-data; name=name;'))
dataList.append(encode('Content-Type: {}'.format('text/plain')))
dataList.append(encode(''))
dataList.append(encode("test"))
dataList.append(encode('--'+boundary+'--'))
dataList.append(encode(''))
body = b'\r\n'.join(dataList)
payload= body
headers = {
'Authorization': 'Basic base64encoded < clientid:clientsecret > ',
'Content-type': 'multipart/form-data; boundary={}'.format(boundary)
}
conn.request("POST", "/wp-json/wp/v2/posts ", payload, headers)
res= conn.getresponse()
data = res.read()
print (data.decode("utf-8"))
Postman을 사용하여 REST API 요청을 수행하려면 아래 단계를 따르세요.
a) 사용자 이름-비밀번호의 경우
예:
사용자 이름: testuser 및 비밀번호:password@123의 경우 base64로 인코딩된 값은 'dGVzdHVzZXI6cGFzc3dvcmRAMTIz'입니다.
b) 클라이언트 ID 및 클라이언트 비밀번호의 경우
이 기능을 사용하면 사용자 역할에 따라 REST API 액세스를 제한할 수 있습니다. REST API를 통해 요청된 리소스에 액세스하도록 허용되는 역할을 지정할 수 있는 옵션이 있습니다. 결과적으로 사용자가 REST API 요청을 하면 해당 역할이 확인되고 해당 역할이 화이트리스트에 포함된 경우에만 리소스에 대한 액세스 권한이 부여됩니다.
그것을 구성하는 방법?
참고 : 역할 기반 제한 기능은 기본 인증(사용자 이름: 비밀번호), JWT 방식, OAuth 2.0(비밀번호 부여)에 유효합니다.
이 기능은 기본값 대신 개인화된 헤더를 선택하는 기능을 제공합니다. '권한 부여' 머리글. 이를 통해 사용자 정의 기본 설정에 따라 헤더 이름을 지정할 수 있어 보안이 강화됩니다. 결과적으로 누군가가 다음과 같은 헤더를 사용하여 REST API 요청을 시도하면 '권한 부여,' API에 액세스할 수 있습니다.
그것을 구성하는 방법?
이 기능을 사용하면 특정 REST API를 화이트리스트로 지정하여 인증 없이 직접 액세스할 수 있습니다. 결과적으로 화이트리스트에 등록된 모든 REST API는 공개적으로 액세스할 수 있게 됩니다.
그것을 구성하는 방법?
이 기능은 기본 인증 방법 내에서 제공되며, 여기서 토큰은 일반적으로 기본적으로 Base64 인코딩을 사용하여 암호화됩니다. 그러나 고급 옵션을 사용하면 매우 안전한 HMAC 암호화 방법을 사용하여 토큰을 암호화할 수 있어 매우 높은 수준의 보안이 보장됩니다.
메일을 보내주세요 oauthsupport@xecurify.com 귀하의 요구 사항에 대한 빠른 안내(이메일/회의를 통해)를 원하시면 저희 팀이 귀하의 요구 사항에 따라 가장 적합한 솔루션/계획을 선택하도록 도와드릴 것입니다.
도움이 필요하다? 우리는 바로 여기에 있습니다!
본 개인 정보 보호 정책은 당사가 개인 정보를 처리하는 방법을 설명하는 미니오렌지 웹사이트에 적용됩니다. 귀하가 웹사이트를 방문하면 해당 웹사이트는 대부분 쿠키 형태로 귀하의 브라우저에 정보를 저장하거나 검색할 수 있습니다. 이 정보는 귀하, 귀하의 기본 설정 또는 귀하의 장치에 관한 것일 수 있으며 대부분 사이트가 귀하가 기대하는 대로 작동하도록 하는 데 사용됩니다. 이 정보는 귀하를 직접적으로 식별하지는 않지만 귀하에게 보다 개인화된 웹 경험을 제공할 수 있습니다. 카테고리 제목을 클릭하면 당사가 쿠키를 처리하는 방법을 확인할 수 있습니다. 당사 솔루션의 개인정보 보호정책은 다음을 참조하세요. 개인 정보 보호 정책.
필수 쿠키는 사이트 탐색, 로그인, 양식 작성 등과 같은 기본 기능을 활성화하여 웹사이트를 완벽하게 사용할 수 있도록 도와줍니다. 해당 기능에 사용되는 쿠키는 개인 식별 정보를 저장하지 않습니다. 그러나 웹사이트의 일부 부분은 쿠키 없이는 제대로 작동하지 않을 수 있습니다.
이러한 쿠키는 방문자, 소스, 페이지 클릭 및 조회수 등을 포함하여 웹사이트 트래픽에 대해 집계된 정보만 수집합니다. 이를 통해 당사는 실행 가능한 요소에 대한 사용자의 상호 작용과 함께 가장 인기 있는 페이지와 가장 인기 없는 페이지에 대해 더 많이 알 수 있으므로 이를 통해 당사는 웹사이트와 서비스의 성능을 개선합니다.