Files
archived-doc-pt-br/features/http-auth.xml
Leonardo Lara Rodrigues 70a8e0d887 sync with en rev
2026-03-06 13:51:29 -03:00

129 lines
5.1 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: cd4180557a185469a64a7eb26f7be98d0a5f1ebb Maintainer: leonardolara Status: ready --><!-- CREDITS: rfoliveira,ae,leonardolara -->
<chapter xml:id="features.http-auth" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>Autenticação HTTP com PHP</title>
<simpara>
Pode-se utilizar a função
<function>header</function> para enviar uma mensagem de <literal>"Authentication Required"</literal>
para o navegador cliente, causando o aparecimento de uma janela para a entrada de Nome de Usuário/Senha.
Uma vez que o usuário preencha um nome de usuário e uma senha,
a URL contendo o script PHP será chamada mais uma vez com as
<link linkend="reserved.variables">variáveis predefinidas</link>
<varname>PHP_AUTH_USER</varname>, <varname>PHP_AUTH_PW</varname>,
e <varname>AUTH_TYPE</varname> para determinar o nome de usuário, senha e
tipo da autenticação, respectivamente. Estas variáveis predefinidas são encontradas
no array <varname>$_SERVER</varname>. <emphasis>Somente</emphasis>
o método de autenticação "Basic" é suportado. Consulte a função
<function>header</function> para mais informações.
</simpara>
<para>
Um exemplo de fragmento de script que forçaria a autenticação
do cliente em uma página:
</para>
<para>
<example>
<title>Exemplo de Autenticação HTTP "Basic"</title>
<programlisting role="php">
<![CDATA[
<?php
if (!isset($_SERVER['PHP_AUTH_USER'])) {
header('HTTP/1.1 401 Unauthorized');
header('WWW-Authenticate: Basic realm="My Realm"');
echo 'Texto enviado caso o usuário clique no botão Cancelar';
exit;
} else {
echo "<p>Olá, {$_SERVER['PHP_AUTH_USER']}.</p>";
echo "<p>Você digitou {$_SERVER['PHP_AUTH_PW']} como sua senha.</p>";
}
?>
]]>
</programlisting>
</example>
</para>
<note>
<title>Compatibilidade</title>
<para>
Por favor, seja cauteloso ao codificar as linhas do cabeçalho HTTP. Para garantir máxima
compatibilidade com todos os clientes, a palavra-chave "Basic" deve ser escrita com um
"B" maiúsculo, a string realm deve ser envolvida por aspas duplas (nunca por aspas simples),
e apenas um espaço deve preceder o código <emphasis>401</emphasis> na linha do cabeçalho
<emphasis>HTTP/1.1 401</emphasis>. Parâmetros de autenticação precisam ser separados por
vírgula.
</para>
</note>
<para>
Ao invés de simplesmente exibir <varname>PHP_AUTH_USER</varname>
e <varname>PHP_AUTH_PW</varname>, como no exemplo acima,
talvez queira verificar a validade do nome de usuário e senha.
Talvez enviando uma consulta a um banco de dados, ou procurando
o usuário em um arquivo dbm.
</para>
<note>
<title>Configuração do Apache</title>
<para>
O PHP usa uma diretiva chamada <literal>AuthType</literal>
para determinar se a autenticação externa está em efeito.
</para>
</note>
<simpara>
Perceba, entretanto, que a diretiva citada acima não previne que alguém que
controle uma URL não autenticada roube senhas de
URLs autenticadas no mesmo servidor.
</simpara>
<note>
<title>Comportamento do navegador</title>
<simpara>
A autenticação básica HTTP é realmente básica e não foi projetada para suportar
logouts. Como o HTTP é um protocolo sem estado, a maioria dos navegadores armazena em cache as
credenciais fornecidas assim que um código de status <literal>2xx</literal> é detectado,
e as envia em todas as requisições, até que o navegador seja fechado. Não há
uma maneira definida para um servidor solicitar uma nova solicitação de credenciais.
Ao longo dos anos, várias soluções alternativas para isso se espalharam como conselhos na internet,
mas todas dependem de como diferentes navegadores optaram por lidar com casos extremos indefinidos
(ou mesmo violações do padrão HTTP). É melhor evitar essas
soluções alternativas e não usar a autenticação básica para nada sério.
</simpara>
</note>
<note>
<title>Configuração do IIS</title>
<simpara>
Para que a autenticação HTTP funcione no servidor IIS com a versão CGI do
PHP, a diretiva php.ini <link linkend="ini.cgi.rfc2616-headers">cgi.rfc2616_headers</link>
deve ser definida como <literal>0</literal> (o valor padrão) e a configuração do IIS
em "<literal>Directory Security</literal>" (ou "Segurança do Diretório" / "Autenticação") deve ser editada.
Clique em "<literal>Edit</literal>" (ou "Editar") e marque apenas "<literal>Anonymous Access</literal>" (ou "Acesso Anônimo"),
deixando todos os outros campos desmarcados.
</simpara>
</note>
</chapter>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->