Autenticação e Autorização (in portuguese)

36
Autenticação e autorização Bruno Pedro <[email protected] > PHP Advanced - 17 de Setembro de 2008

description

 

Transcript of Autenticação e Autorização (in portuguese)

Page 1: Autenticação e Autorização (in portuguese)

Autenticação e autorização

Bruno Pedro <[email protected]>

PHP Advanced - 17 de Setembro de 2008

Page 2: Autenticação e Autorização (in portuguese)

Autenticação e autorização

PHP Advanced

Conteúdo

• Basic HTTP Auth

• Bases de Dados

• PEAR::Auth()

• OpenID

• Projecto

• Resumo

2

Page 3: Autenticação e Autorização (in portuguese)

Autenticação e autorização

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

3

Page 4: Autenticação e Autorização (in portuguese)

Autenticação e autorização

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

4

Page 5: Autenticação e Autorização (in portuguese)

Autenticação e autorização

PHP Advanced

Exemplo

5

Page 6: Autenticação e Autorização (in portuguese)

Autenticação e autorização

PHP Advanced

Exemplo

6

Page 7: Autenticação e Autorização (in portuguese)

Autenticação e autorização

PHP Advanced

Logout

7

Page 8: Autenticação e Autorização (in portuguese)

Autenticação e autorização

PHP Advanced

Aproximação OO

8

login()logout()isAuth()

usernamepassword

Auth

HTTPAuth

Page 9: Autenticação e Autorização (in portuguese)

Autenticação e autorização

PHP Advanced

Aproximação OO

9

Page 10: Autenticação e Autorização (in portuguese)

Autenticação e autorização

PHP Advanced

Aproximação OO

10

Page 11: Autenticação e Autorização (in portuguese)

Autenticação e autorização

PHP Advanced

Aproximação OO

11

Page 12: Autenticação e Autorização (in portuguese)

Autenticação e autorização

PHP Advanced

Aproximação OO

12

Page 13: Autenticação e Autorização (in portuguese)

Autenticação e autorização

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

13

Page 14: Autenticação e Autorização (in portuguese)

Autenticação e autorização

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

14

Page 15: Autenticação e Autorização (in portuguese)

Autenticação e autorização

PHP Advanced

Tabela de utilizadores

15

username

password

Auth

CREATE TABLE auth ( username VARCHAR(50) default '' NOT NULL, password VARCHAR(32) default '' NOT NULL, PRIMARY KEY (username), KEY (password));

Page 16: Autenticação e Autorização (in portuguese)

Autenticação e autorização

PHP Advanced

Criar utilizador

• A password não pode ficar visível!

• É utilizada a função MD5

16

INSERTINTO authVALUES ('test', MD5('abc123'));

Page 17: Autenticação e Autorização (in portuguese)

Autenticação e autorização

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

17

Page 18: Autenticação e Autorização (in portuguese)

Autenticação e autorização

PHP Advanced

Exemplo

18

Page 19: Autenticação e Autorização (in portuguese)

Autenticação e autorização

PHP Advanced

Modos de leitura

• DB_FETCHMODE_ORDERED

• DB_FETCHMODE_ASSOC

• DB_FETCHMODE_OBJECT

• DB_FETCHMODE_FLIPPED

19

Page 20: Autenticação e Autorização (in portuguese)

Autenticação e autorização

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

20

Page 21: Autenticação e Autorização (in portuguese)

Autenticação e autorização

PHP Advanced

PEAR::Auth

• Containers:

• Array: lista de utilizadores

• Base de dados, através de PEAR::DB

• Ficheiro em disco

• POP3, IMAP

• SOAP

21

Page 22: Autenticação e Autorização (in portuguese)

Autenticação e autorização

PHP Advanced

Exemplo

22

Page 23: Autenticação e Autorização (in portuguese)

Autenticação e autorização

PHP Advanced

Opções

• Base de dados utilizada

• Alteração do formulário de autenticação

• Nomes dos campos username e password

• Logging

23

Page 24: Autenticação e Autorização (in portuguese)

Autenticação e autorização

PHP Advanced

Formulário• Desligar completamente o formulário de

autenticação:

• Definir uma função responsável por apresentar o formulário:

24

Page 25: Autenticação e Autorização (in portuguese)

Autenticação e autorização

PHP Advanced

Nomes dos campos

25

• Correspondem aos nomes dos campos utilizados no formulário de autenticação

Page 26: Autenticação e Autorização (in portuguese)

Autenticação e autorização

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.

26

Page 27: Autenticação e Autorização (in portuguese)

Autenticação e autorização

PHP Advanced

OpenID

27

Utilizador introduz o URL

OpenID

Utilizador é redireccionado para o

OpenID server

A identidade é confirmada?

Utilizador é redireccionado para a

aplicação original

Utilizador é autenticado na aplicação original

Mensagem de erro

SIM

NÃO

Page 28: Autenticação e Autorização (in portuguese)

Autenticação e autorização

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

28

Page 29: Autenticação e Autorização (in portuguese)

Autenticação e autorização

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

29

Page 30: Autenticação e Autorização (in portuguese)

Autenticação e autorização

PHP Advanced

Base de Dados

• Podem ser acrescentados mais campos, relacionados com o utilizador

30

openid_urlfirstNamelastName...

Auth

Page 31: Autenticação e Autorização (in portuguese)

Autenticação e autorização

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

31

Page 32: Autenticação e Autorização (in portuguese)

Autenticação e autorização

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

32

Page 33: Autenticação e Autorização (in portuguese)

Autenticação e autorização

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

33

Page 34: Autenticação e Autorização (in portuguese)

Autenticação e autorização

PHP Advanced

Resumo

• Basic HTTP Auth

• Aproximação OO

• PEAR::DB

• PEAR::Auth

• OpenID

34

Page 35: Autenticação e Autorização (in portuguese)

OOP em PHP

PHP Summer School

Questões?

35

Page 36: Autenticação e Autorização (in portuguese)

Autenticação e autorização

PHP Advanced

Mais informação

36

• O meu blog: http://unfoldingtheweb.com/

• Manual de PHP: http://www.php.net/

• PEAR: http://pear.php.net/

• OpenID: http://openid.net/

• Bibliotecas OpenID:

http://openidenabled.com/