post

Corrigir problema de permissão REST API WordPress Bitnami EC2

Recentemente ao instalar uma instancia na amazon web service (AWS) utilizando o empacotador da Bitmani, me deparei com um problema quando precisei usar a REST API json do wordpress para criar posts de um ambiente externo, mesmo com os dados todos corretos, o servidor estava barrando o acesso do usuário por não reconhecer os dados de autorização enviados pelo “header”, retornando um erro de “Sem permissão para criar posts com este usuário” com status de “erro 401”.

{
    "code": "rest_cannot_create",
    "message": "Sem permissão para criar posts com este usuário.",
    "data": {
        "status": 401
    }
}

Para habilitar a REST API do WordPress com autenticação, o primeiro passo seria instalar um plugin chamado de Basic Auth para wordpress.

1. Instalando o plugin

O plugin pode ser obtido neste link ( https://github.com/WP-API/Basic-Auth ), copiando todo o código dentro do arquivo “basic-auth.php” ou fazendo o download do zip em “clone or download > download zip”.

Pagina do plugin Basic Auth para REST API WordPress no site Github.com

Navegue até a pasta de plugins do wordpress (…/wp-content/plugins), crie um diretório chamado “Basic-Auth”, e adicione ou crie o arquivo “basic-auth.php”.

Segue processo realizado via linha de comando:

$ cd /opt/bitnami/apps/wordpress/htdocs/wp-content/plugins
$ git clone https://github.com/WP-API/Basic-Auth.git
$ cd Basic-Auth
$ sudo rm -rf .git

OBS: O processo a cima foi feito com o terminal git para windows (https://gitforwindows.org/), você pode também fazer o download manual ou copiar o conteúdo do arquivo manualmente para seu servidor.

2. Definindo permissões

Rode o código no terminal para conceder permissões corretas para o usuário que esta gerenciando o seu servidor.

$ sudo chown bitnami:daemon -R /opt/bitnami/apps/wordpress/htdocs/wp-content/plugins/Basic-Auth
$ sudo chmod g+w -R  /opt/bitnami/apps/wordpress/htdocs/wp-content/plugins/Basic-Auth

3. Ative o plugin

Acesse o painel administrativo do wordpress, vá em “Plugins > Plugins Instalados”, localize o plugin (deve estar com o nome de “JSON Basic Authentication”), e clique em ativar.

4. Modificar as configurações do Apache

Acesse o arquivo de configurações principal do apache server configurado pelo empacotador da Bitnami da seguinte maneira:

$ sudo vim /opt/bitnami/apps/wordpress/conf/httpd-app.conf

Ao abrir o arquivo, navegue até o final, assim que localizar um trecho de código como este:

    RewriteEngine On
    #RewriteBase /wordpress/
    RewriteRule ^index\.php$ - [S=1]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . index.php [L]

Adicione acima dele as seguintes linhas:

RewriteEngine on
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]

Seu código deve ficar mais ou menos assim:

RewriteEngine on
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]
    
    RewriteEngine On
    #RewriteBase /wordpress/
    RewriteRule ^index\.php$ - [S=1]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . index.php [L]

Salve o arquivo clicando na tecla “esc” do seu teclado, para iniciar o dialogo e digite exatamente como abaixo:

:wq

5. Reinicie o apache

Para reiniciar o apache server do empacotador Bitnami WordPress, você deve digitar o seguinte comando em seu terminal:

$ sudo /opt/bitnami/ctlscript.sh restart apache

Após o apache server reiniciar, seu site wordpress já esta habilidade para receber requisições via REST API.

Esta explicação foi retirada do canal oficial de duvidas da Bitnami.

Confira o link: https://community.bitnami.com/t/wordpress-rest-api-basic-authentication-header-not-working/59090/6

BÔNUS

Como posso criar meu primeiro post com a REST API ?

Segue link de um bom exemplo em PHP (https://gist.github.com/andrewahead4/489e6422feb5be901143)

Não cheguei a testar o código mas parece que esta tudo certo.

Outra maneira de sempre testar uma API sem precisar iniciar servidor ou preparar ambiente é usar o Postman (https://www.getpostman.com/).