WordPress REST API 인증 플러그인은 WordPress REST API에 대한 무단 액세스로부터 보안을 제공합니다.
검색 결과 :
×OAuth 2.0 API에 대한 액세스를 인증하는 데 가장 많이 선택되는 방법입니다. OAuth 2.0을 사용하면 사용자의 이메일 주소나 비밀번호를 외부 애플리케이션에 제공하지 않고도 인증이 가능합니다. 이 WordPress REST API OAuth 2.0 인증 방법에는 보안 액세스 토큰 또는 ID 토큰(JWT 토큰)을 얻기 위해 OAuth 2.0 프로토콜 흐름을 사용하는 작업이 포함되며 해당 토큰은 WordPress REST API 끝점을 인증하는 데 사용됩니다. WordPress REST API 엔드포인트에 대한 액세스 요청이 이루어질 때마다 해당 액세스 토큰/ID 토큰(JWT 토큰)에 대한 인증이 수행되며 해당 API Bearer 토큰의 확인을 기반으로 해당 API에 대한 리소스가 수행됩니다. 요청에 대한 액세스가 허용됩니다.
OAuth 2.0 인증 방법을 사용하여 제공되는 토큰은 고도로 암호화되고 안전하므로 보안이 손상되지 않습니다. WordPress REST API 엔드포인트를 인증/보호하는 가장 안전한 방법입니다. 이 방법은 JWT 인증 방법과 다소 유사하지만 OAuth 2.0 프로토콜의 다양한 이점으로 인해 훨씬 더 안전합니다.
WordPress REST API 인증 플러그인은 WordPress REST API에 대한 무단 액세스로부터 보안을 제공합니다.
사용 사례: WordPress 사용자를 등록하거나 WordPress REST API를 통해 WordPress 자격 증명을 기반으로 외부 플랫폼에서 사용자를 인증/로그인합니다.
애플리케이션에 로그인 양식이 있고 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에 사용자를 안전하게 등록하려는 경우 이 방법은 다음과 같습니다. 사용자 자격 증명이 손상될 가능성이 없는 완벽한 솔루션입니다.
플러그인은 토큰을 기반으로 WordPress REST API 엔드포인트를 인증하기 위해 토큰 및 REST API 인증자를 제공하는 OAuth 2.0 ID 공급자(서버) 역할을 합니다. 따라서 토큰을 얻기 위한 최고의 보안을 제공하며 해당 토큰을 사용하여 REST API 요청을 인증할 수 있습니다.
1. 플러그인에 대한 토큰을 얻기 위해 적절한 매개변수를 사용하여 REST API 요청이 이루어집니다. 우리 플러그인은 OAuth 2.0 ID 공급자 역할을 하며 액세스 토큰을 제공합니다.
2. 리소스에 액세스하기 위한 실제 REST API 요청은 토큰 유형이 Bearer인 Authorization 헤더에 전달된 마지막 단계에서 받은 액세스 토큰을 사용하여 수행됩니다. 이제 플러그인은 토큰 유효성을 기반으로 API를 인증하는 인증자 역할을 합니다. 토큰이 성공적으로 검증되면 API 요청자는 리소스에 액세스할 수 있으며 실패한 검증에서는 오류 응답이 반환됩니다.
관련 사용 사례:
이제 플러그인 설정 부분이 성공적으로 완료되었습니다. 다음은 WordPress REST API에 액세스하기 위해 실제 보안 액세스/JWT 토큰을 얻고 추가로 사용하는 부분입니다.
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
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
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
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
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.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)
.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,
"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_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)
}
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.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)
.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,
"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_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)
}
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.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)
.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,
"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_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)
}
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 >")
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 >")
.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 >"
},
};
$.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 >'
);
));
$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 >'
}
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를 요청할 때마다 해당 역할을 가져오고 해당 역할이 화이트리스트에 있는 경우에만 리소스에 액세스할 수 있습니다.
그것을 구성하는 방법?
참고 : 역할 기반 제한 기능은 기본 인증(사용자 이름: 비밀번호), JWT 방식, OAuth 2.0(비밀번호 부여)에 유효합니다.
이 기능은 기본 'Authorization' 헤더 대신 사용자 정의 헤더를 선택하는 옵션을 제공합니다.
'사용자 정의 이름'으로 이름이 지정된 헤더가 있으므로 보안이 강화되므로 누군가 헤더를 '인증'으로 사용하여 REST API 요청을 하면 API에 액세스할 수 없습니다.
그것을 구성하는 방법?
이 기능을 사용하면 REST API를 화이트리스트에 추가하여 인증 없이 직접 액세스할 수 있습니다. 따라서 화이트리스트에 등록된 모든 REST API는 공개적으로 사용 가능합니다.
그것을 구성하는 방법?
이 기능은 시간 기반 토큰을 사용하여 WordPress REST API 엔드포인트를 인증하는 JWT 및 OAuth 2.0 방법에 적용됩니다. 이 기능을 사용하면 토큰이 만료되면 토큰이 더 이상 유효하지 않도록 토큰에 대한 사용자 지정 만료를 설정할 수 있습니다.
그것을 구성하는 방법?
메일을 보내주세요 apisupport@xecurify.com 귀하의 요구 사항에 대한 빠른 안내(이메일/회의를 통해)를 원하시면 저희 팀이 귀하의 요구 사항에 따라 가장 적합한 솔루션/계획을 선택하도록 도와드릴 것입니다.
도움이 필요하다? 우리는 바로 여기에 있습니다!
본 개인 정보 보호 정책은 당사가 개인 정보를 처리하는 방법을 설명하는 미니오렌지 웹사이트에 적용됩니다. 귀하가 웹사이트를 방문하면 해당 웹사이트는 대부분 쿠키 형태로 귀하의 브라우저에 정보를 저장하거나 검색할 수 있습니다. 이 정보는 귀하, 귀하의 기본 설정 또는 귀하의 장치에 관한 것일 수 있으며 대부분 사이트가 귀하가 기대하는 대로 작동하도록 하는 데 사용됩니다. 이 정보는 귀하를 직접적으로 식별하지는 않지만 귀하에게 보다 개인화된 웹 경험을 제공할 수 있습니다. 카테고리 제목을 클릭하면 당사가 쿠키를 처리하는 방법을 확인할 수 있습니다. 당사 솔루션의 개인정보 보호정책은 다음을 참조하세요. 개인 정보 보호 정책.
필수 쿠키는 사이트 탐색, 로그인, 양식 작성 등과 같은 기본 기능을 활성화하여 웹사이트를 완벽하게 사용할 수 있도록 도와줍니다. 해당 기능에 사용되는 쿠키는 개인 식별 정보를 저장하지 않습니다. 그러나 웹사이트의 일부 부분은 쿠키 없이는 제대로 작동하지 않을 수 있습니다.
이러한 쿠키는 방문자, 소스, 페이지 클릭 및 조회수 등을 포함하여 웹사이트 트래픽에 대해 집계된 정보만 수집합니다. 이를 통해 당사는 실행 가능한 요소에 대한 사용자의 상호 작용과 함께 가장 인기 있는 페이지와 가장 인기 없는 페이지에 대해 더 많이 알 수 있으므로 이를 통해 당사는 웹사이트와 서비스의 성능을 개선합니다.