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>