1. Autenticação e
autorização
PHP Advanced - 17 de Setembro de 2008
Bruno Pedro <bpedro@tarpipe.com>
2. PHP Advanced
Conteúdo
• Basic HTTP Auth
• Bases de Dados
• PEAR::Auth()
• OpenID
• Projecto
• Resumo
Autenticação e autorização 2
3. PHP Advanced
Basic HTTP Auth
• Suportado pelo protocolo HTTP
• Suportado pelo browser
• Pode ser interceptado no PHP
• Só funciona se o PHP estiver a correr
como módulo Apache
Autenticação e autorização 3
4. PHP Advanced
Como funciona?
• Para aparecer a caixa de autenticação é
enviado um header HTTP “Unauthorized”
• Os dados inseridos são capturados nos
índices PHP_AUTH_USER, PHP_AUTH_PW, e
AUTH_TYPE do array $_SERVER
Autenticação e autorização 4
5. PHP Advanced
Exemplo
Autenticação e autorização 5
6. PHP Advanced
Exemplo
Autenticação e autorização 6
9. PHP Advanced
Aproximação OO
Autenticação e autorização 9
10. PHP Advanced
Aproximação OO
Autenticação e autorização 10
11. PHP Advanced
Aproximação OO
Autenticação e autorização 11
12. PHP Advanced
Aproximação OO
Autenticação e autorização 12
13. PHP Advanced
Melhorias
• Criação de uma Auth factory
• Acoplamento de um Chain of Command
para verificar se o utilizador se pode
autenticar
• Utilização de uma Strategy de acesso a um
backend onde estão os dados dos
utilizadores
Autenticação e autorização 13
14. PHP Advanced
Bases de Dados
• Utilização de MySQL
• Criação de base de dados para o projecto
• Criação de tabela de utilizadores
• Verificações
• username existe
• password é igual
• Possível gravação de informação adicional
Autenticação e autorização 14
15. PHP Advanced
Tabela de utilizadores
Auth
username
password
CREATE TABLE auth (
username VARCHAR(50) default '' NOT NULL,
password VARCHAR(32) default '' NOT NULL,
PRIMARY KEY (username),
KEY (password)
);
Autenticação e autorização 15
16. PHP Advanced
Criar utilizador
• A password não pode ficar visível!
• É utilizada a função MD5
INSERT
INTO auth
VALUES ('test', MD5('abc123'));
Autenticação e autorização 16
17. PHP Advanced
PEAR::DB
• Biblioteca de abstracção ao acesso à base
de dados
• Portabilidade entre vários motores de BD
• Várias formas de obter resultados
• Automatismos na escrita de valores
• Instalação: pear install DB
Autenticação e autorização 17
18. PHP Advanced
Exemplo
Autenticação e autorização 18
19. PHP Advanced
Modos de leitura
• DB_FETCHMODE_ORDERED
• DB_FETCHMODE_ASSOC
• DB_FETCHMODE_OBJECT
• DB_FETCHMODE_FLIPPED
Autenticação e autorização 19
20. PHP Advanced
PEAR::Auth
• Biblioteca de gestão de autenticação
• Permite autenticar contra uma série de
backends
• Possibilita o registo e a gravação de
informação adicional em cada utilizador
• Oferece capacidades de logging
• Instalação: pear install Auth
Autenticação e autorização 20
21. PHP Advanced
PEAR::Auth
• Containers:
• Array: lista de utilizadores
• Base de dados, através de PEAR::DB
• Ficheiro em disco
• POP3, IMAP
• SOAP
Autenticação e autorização 21
22. PHP Advanced
Exemplo
Autenticação e autorização 22
23. PHP Advanced
Opções
• Base de dados utilizada
• Alteração do formulário de autenticação
• Nomes dos campos username e password
• Logging
Autenticação e autorização 23
24. PHP Advanced
Formulário
• Desligar completamente o formulário de
autenticação:
• Definir uma função responsável por
apresentar o formulário:
Autenticação e autorização 24
25. PHP Advanced
Nomes dos campos
• Correspondem aos nomes dos campos
utilizados no formulário de autenticação
Autenticação e autorização 25
26. PHP Advanced
OpenID
• Solução de autenticação sem utilizar
password
• Utilização do mesmo identificador entre
vários Websites
• Obtenção de dados do utilizador
• nome, email, nickname, etc.
Autenticação e autorização 26
27. PHP Advanced
OpenID
Utilizador Utilizador é
introduz o URL redireccionado para o
OpenID OpenID server
Utilizador é
A identidade é
redireccionado para a SIM confirmada?
aplicação original
NÃO
Utilizador é autenticado
Mensagem de erro
na aplicação original
Autenticação e autorização 27
28. PHP Advanced
OpenID
• Implementação
• Eliminação dos campos username e
password
• Inserção do campo openid_url
• Implementação da lógica de
redireccionamento e validação
Autenticação e autorização 28
29. PHP Advanced
OpenID
• Algumas regras
• Convém separar o registo da
autenticação, mesmo utilizando OpenID
• É necessário validar a identidade no acto
de registo
• O openid_url passa a ser a chave que
identifica um utilizador na aplicação
Autenticação e autorização 29
30. PHP Advanced
Base de Dados
Auth
openid_url
firstName
lastName
...
• Podem ser acrescentados mais campos,
relacionados com o utilizador
Autenticação e autorização 30
31. PHP Advanced
Bibliotecas
• http://openidenabled.com/php-openid/
• Compatível com PHP 4.3.0 e superiores
• Documentação, exemplos e testes
• Tenta usar o Curl mas não é obrigatório
• Live demos
Autenticação e autorização 31
32. PHP Advanced
Projecto
• Funcionalidade de registo
• Alteração da tabela de modo a albergar o
nome do utilizador
• Verificação da password
• Gravação dos dados na tabela
Autenticação e autorização 32
33. PHP Advanced
Projecto
• Autenticação
• Utilização do PEAR::Auth para autenticar
o utilizador contra a tabela
• Obtenção do username e password a
partir do formulário
• Implementação da funcionalidade de
logout
Autenticação e autorização 33