Basic аутентификация по паролю пользователя
С версии 5.6 Basic аутентификация была добавлена в ядро, только для авторизации нужно использовать не пароль пользователя, а Пароль приложения.
Если вам по каким-то причинам все-таки нужно использовать пароль пользователя для авторизации, то нужно будет установить плагин (читайте ниже). Однако, делать этого я не рекомендую, пользуйтесь лучше паролями приложений!
Для включения возможности базовой авторизации через пароли пользователя, нужно установить WordPress плагин Basic Authentication.
При базовой аутентификации клиент вместе с запросом отправляет серверу свой логин и пароль. Эти данные отправляются в заголовке запроса Authorization в виде base64 кода.
Authorization: Basic base64_encode(login:password)
Так например, если логин и пароль admin, нужно добавить такой заголовок:
Authorization: Basic YWRtaW46YWRtaW4=
Так как base64 очень просто раскодировать, такой метод совершенно небезопасен, поэтому обязательно нужно использовать HTTPS (SSL) соединение.
Basic Авторизация в программе Postman
- Перейдите во вкладку Authorization;
- Выберите метод аутентификации Basic Auth;
- Укажите логин и пароль;
- Все! Отправляйте авторизованные запросы.
Basic Авторизация через WP HTTP API
$response = wp_remote_request( 'http://example.com/wp-json/wp/v2/posts/113', [ 'method' => 'DELETE', 'headers' => [ 'Authorization' => 'Basic ' . base64_encode( 'username:password' ) ] ] ); if( 200 == wp_remote_retrieve_response_code( $response ) ) echo 'Пост удален!'; else echo 'Ошибка: Не удалось удалить пост';
Смотрите также: WP HTTP API
Basic Авторизация через JavaScript
Такая авторизация нужна только если отправляется AJAX запрос с одного сайта на другой. Если AJAX запрос происходит внутри сайта, и пользователь уже авторизован, то вместе с запросом будут отправлены куки аутентификации, а это значит что авторизация уже есть, нужно только указать nonce-код (см. выше).
$.ajax({
url: 'http://example.com/wp-json/wp/v2/posts/113',
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 );
}
});
Basic Авторизация через командную строку
curl -X DELETE http://example.com/wp-json/wp/v2/posts/113 -H 'Authorization: Basic a2FtYTprYW1h'
Почему авторизация может не работать?
Если вы отправляете заголовки аутентификации (Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=), но запрос не принимается, то возможно у вас используется Apache в среде CGI. Это значит что Apache вырезает заголовки. Попробуйте добавить следующий код в файл конфигурации Apache или в файл .htaccess:
<IfModule mod_setenvif> SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1 </IfModule>
С Версии WP 5.6 аналогичный код добавляется автоматически (строка 3):
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>