Ocorrência
Por que não consigo acessar a plataforma via OAuth/Mobile? Esta situação ocorre em ambientes configurados em que o proxy reverso (DMZ) usa conexão segura (HTTPS) e a plataforma utiliza conexão não segura (HTTP).
Em log é apresentado a seguinte mensagem:
signature_invalid: net.oauth.OAuthProblemException: signature_invalid
oauth_problem: signature_invalid
oauth_signature: <ASSINATURA_DA_REQUISIÇÃO>
oauth_signature_base_string: <MÉDOTO>&http%3A%2F%2F...<RESTANTE_DA_REQUISIÇÃO>
Ambiente
TOTVS Fluig Plataforma - Configurações técnicas - A partir da versão 1.6
Causa
Quando é realizada a autenticação usando OAuth é enviada uma chave que foi calculada com base na própria requisição (método, protocolo e parâmetros), este valor é recalculado e validado no servidor.
A partir da atualização 1.6.0 o servidor de aplicação foi atualizado e o subsistema de requisições web foi alterado, consequentemente houve uma modificação no tratamento das requisições. Quando o proxy reverso encaminha a requisição para o conector HTTP o protocolo é alterado também. A diferença no protocolo causa o problema pois, ao calcular localmente o valor da assinatura para comparação, este não é mais equivalente.
Solução
Garantir que a requisição chega ao conector HTTP com o mesmo protocolo do qual a requisição foi originada.
1. Edite o arquivo domain.xml localizado em [diretório_instalação]/appserver/domain/configuration/.
2. Localize o seguinte código:
<subsystem xmlns="urn:jboss:domain:undertow:3.1">
<buffer-cache name="default"/>
<server name="default-server">
<http-listener max-post-size="1073741824" name="default" socket-binding="http"/> <!-- Alterar esta linha -->
<host alias="localhost" name="default-host"><single-sign-on path="/"/><filter-ref name="gzipFilter" predicate="path-suffix['.css'] or path-suffix['.js']"/></host>
</server>
<servlet-container name="default" stack-trace-on-error="local-only">
<jsp-config/>
<websockets/>
</servlet-container>
<filters><gzip name="gzipFilter"/></filters>
</subsystem>
3. Na tag http-listener inclua o atributo proxy-address-forwarding com valor true, conforme mostrado abaixo:
<http-listener max-post-size="1073741824" name="default" socket-binding="http" proxy-address-forwarding="true"/>
Exemplos:
Abaixo seguem os exemplos usando o Apache e nginx:
Para uso no Apache utilize o código abaixo:
<VirtualHost *:443>
...
RequestHeader set X-Forwarded-Host "<Nome externo do servidor>:443"
RequestHeader set X-Forwarded-Proto "https"
...
</VirtualHost>
Para uso no nginx utilize o código abaixo:
server {
...
...
location / {
...
proxy_set_header X-Forwarded-Host $host:443;
proxy_set_header X-Forwarded-Proto https;
...
}
}
Saiba Mais
Consulte as versões de Load Balancer homologadas na Matriz de portabilidade.
0 Comentários