11<?xml version =" 1.0" encoding =" utf-8" ?>
2- <!-- EN-Revision: bdf9a4e40204c805f2c2a5c94c2f2f8f5556195a Maintainer: ae Status: ready --><!-- CREDITS: rfoliveira,ae,leonardolara -->
2+ <!-- EN-Revision: cd4180557a185469a64a7eb26f7be98d0a5f1ebb Maintainer: leonardolara Status: ready --><!-- CREDITS: rfoliveira,ae,leonardolara -->
33 <chapter xml : id =" features.http-auth" xmlns =" http://docbook.org/ns/docbook" xmlns : xlink =" http://www.w3.org/1999/xlink" >
44 <title >Autenticação HTTP com PHP</title >
55
2929<![CDATA[
3030<?php
3131if (!isset($_SERVER['PHP_AUTH_USER'])) {
32+ header('HTTP/1.1 401 Unauthorized');
3233 header('WWW-Authenticate: Basic realm="My Realm"');
33- header('HTTP/1.0 401 Unauthorized');
3434 echo 'Texto enviado caso o usuário clique no botão Cancelar';
3535 exit;
3636} else {
@@ -44,13 +44,13 @@ if (!isset($_SERVER['PHP_AUTH_USER'])) {
4444 </para >
4545
4646 <note >
47- <title >Nota sobre compatibilidade </title >
47+ <title >Compatibilidade </title >
4848 <para >
4949 Por favor, seja cauteloso ao codificar as linhas do cabeçalho HTTP. Para garantir máxima
5050 compatibilidade com todos os clientes, a palavra-chave "Basic" deve ser escrita com um
5151 "B" maiúsculo, a string realm deve ser envolvida por aspas duplas (nunca por aspas simples),
5252 e apenas um espaço deve preceder o código <emphasis >401</emphasis > na linha do cabeçalho
53- <emphasis >HTTP/1.0 401</emphasis >. Parâmetros de autenticação precisam ser separados por
53+ <emphasis >HTTP/1.1 401</emphasis >. Parâmetros de autenticação precisam ser separados por
5454 vírgula.
5555 </para >
5656 </note >
@@ -63,16 +63,8 @@ if (!isset($_SERVER['PHP_AUTH_USER'])) {
6363 o usuário em um arquivo dbm.
6464 </para >
6565
66- <para >
67- Cuidado com navegadores Internet Explorer bugados por aí. Eles
68- parecem muito minuciosos sobre a ordem dos cabeçalhos. Enviar
69- o cabeçalho <emphasis >WWW-Authenticate</emphasis > antes do
70- cabeçalho <literal >HTTP/1.0 401</literal > parece resolver isso
71- por enquanto.
72- </para >
73-
7466 <note >
75- <title >Nota de configuração </title >
67+ <title >Configuração do Apache </title >
7668 <para >
7769 O PHP usa uma diretiva chamada <literal >AuthType</literal >
7870 para determinar se a autenticação externa está em efeito.
@@ -84,68 +76,34 @@ if (!isset($_SERVER['PHP_AUTH_USER'])) {
8476 controle uma URL não autenticada roube senhas de
8577 URLs autenticadas no mesmo servidor.
8678 </simpara >
87- <simpara >
88- Tanto o Netscape Navigator quanto o Internet Explorer apagarão o cache de
89- autenticação da janela local do navegador para o realm após receber uma
90- resposta 401 do servidor. Isso pode efetivamente "deslogar" um usuário,
91- forçando o mesmo a re-entrar seu nome de usuário e senha. Algumas pessoas
92- usam isso para delimitar o tempo de um login, ou prover um botão de "log-out".
93- </simpara >
94- <para >
95- <example >
96- <title >Exemplo de Autenticação HTTP forçando um novo nome/senha</title >
97- <programlisting role =" php" >
98- <![CDATA[
99- <?php
100- function authenticate() {
101- header('WWW-Authenticate: Basic realm="Test Authentication System"');
102- header('HTTP/1.0 401 Unauthorized');
103- echo "Você deve digitar um login e senha válidos para acessar este recurso\n";
104- exit;
105- }
10679
107- if (!isset($_SERVER['PHP_AUTH_USER']) ||
108- ($_POST['SeenBefore'] == 1 && $_POST['OldAuth'] == $_SERVER['PHP_AUTH_USER'])) {
109- authenticate();
110- } else {
111- echo "<p>Bem-vindo: " . htmlspecialchars($_SERVER['PHP_AUTH_USER']) . "<br />";
112- echo "Antigo: " . htmlspecialchars($_REQUEST['OldAuth']);
113- echo "<form action='' method='post'>\n";
114- echo "<input type='hidden' name='SeenBefore' value='1' />\n";
115- echo "<input type='hidden' name='OldAuth' value=\"" . htmlspecialchars($_SERVER['PHP_AUTH_USER']) . "\" />\n";
116- echo "<input type='submit' value='Re-autenticar' />\n";
117- echo "</form></p>\n";
118- }
119- ?>
120- ]]>
121- </programlisting >
122- </example >
123- </para >
124- <simpara >
125- Este comportamento não é requerido pelo padrão de autenticação <literal >HTTP Basic</literal >,
126- então nunca se deve depender dele. Testes com
127- <literal >Lynx</literal > tem mostrado que <literal >Lynx</literal > não apaga
128- as credenciais de autenticação com uma resposta 401 do servidor, assim, ao pressionar "Voltar"
129- e então "Ir" novamente abrirá o recurso contanto que os requerimento de credenciais
130- não tenha mudado. Contudo, o usuário pode pressionar a tecla
131- <literal >'_'</literal > para apagar suas informações de autenticação.
132- </simpara >
133- <simpara >
134- Para fazer com que a autenticação HTTP funcione utilizando um servidor IIS com a versão CGI
135- do PHP é necessário editar a configuração "<literal >Directory Security</literal >" do IIS.
136- Clique em "<literal >Edit</literal >" e marque somente
137- "<literal >Anonymous Access</literal >",
138- deixe todos os outros campos desmarcados.
139- </simpara >
14080 <note >
141- <title >Nota sobre IIS: </title >
81+ <title >Comportamento do navegador </title >
14282 <simpara >
143- Para que a autenticação HTTP funcione com IIS, a diretiva do PHP
144- <link linkend =" ini.cgi.rfc2616-headers" >cgi.rfc2616_headers</link > deve
145- ser definida como <literal >0</literal > (o valor default).
83+ A autenticação básica HTTP é realmente básica e não foi projetada para suportar
84+ logouts. Como o HTTP é um protocolo sem estado, a maioria dos navegadores armazena em cache as
85+ credenciais fornecidas assim que um código de status <literal >2xx</literal > é detectado,
86+ e as envia em todas as requisições, até que o navegador seja fechado. Não há
87+ uma maneira definida para um servidor solicitar uma nova solicitação de credenciais.
88+
89+ Ao longo dos anos, várias soluções alternativas para isso se espalharam como conselhos na internet,
90+ mas todas dependem de como diferentes navegadores optaram por lidar com casos extremos indefinidos
91+ (ou mesmo violações do padrão HTTP). É melhor evitar essas
92+ soluções alternativas e não usar a autenticação básica para nada sério.
14693 </simpara >
14794 </note >
14895
96+ <note >
97+ <title >Configuração do IIS</title >
98+ <simpara >
99+ Para que a autenticação HTTP funcione no servidor IIS com a versão CGI do
100+ PHP, a diretiva php.ini <link linkend =" ini.cgi.rfc2616-headers" >cgi.rfc2616_headers</link >
101+ deve ser definida como <literal >0</literal > (o valor padrão) e a configuração do IIS
102+ em "<literal >Directory Security</literal >" (ou "Segurança do Diretório" / "Autenticação") deve ser editada.
103+ Clique em "<literal >Edit</literal >" (ou "Editar") e marque apenas "<literal >Anonymous Access</literal >" (ou "Acesso Anônimo"),
104+ deixando todos os outros campos desmarcados.
105+ </simpara >
106+ </note >
149107 </chapter >
150108
151109<!-- Keep this comment at the end of the file
0 commit comments