Autenticação e seus diferentes tipos
Como um sistema/software consegue diferenciar um usuário de outro? Como ele sabe que a última solicitação veio através de ciclano ao invés de beltrano?
Diferencia-se um usuário de outro através de um Mecanismo de Autenticação.
Não confunda autenticação com autorização, são coisas diferentes!
Quais as formas principais de autenticação/identificação de um usuário?
- Login e Senha
- Token
- Chave Pública / Privada
Autenticação baseada em Login e Senha
É um dos tipos de autenticação mais simples. A cada vez que um recurso é solicitado envia-se o login e a senha do usuário ou conta utilizada.
Autenticação baseada em Token
- Envio de Tokens diretamente na requisição
- Envio de Tokens via Cookies
Que formato tem os Tokens?
- Um conjunto de caracteres aleatórios
- Um número identificador
- Um conjunto de caracteres aparentemente aleatórios mas codificados (JWT é um exemplo)
- Um conjunto de caracteres aparentemente aleatórios mas encriptados (JWC é um exemplo)
Statefulness vs Statelessness
Quais as diferenças entre tokens stateful e tokens stateless?
Um token stateless não precisa ser validado em um banco de dados. Sua validade pode ser verificada no próprio software (back-end) que o recebeu, através apenas da aplicação de um algoritmo criptográfico juntamente com o conhecimento de uma chave pública (criptografia assimétrica) ou uma chave secreta (criptografia simétrica). O diferencial é que não há necessidade acessar serviços externos (banco de dados ou outras APIs) para garantir que ele é verdadeiro, apenas uma chave armazenada localmente basta. Um exemplo disso é a autenticação baseada em JWT stateless.
Um token stateful, em contrapartida, precisa ser verificado (geralmente em um banco de dados em memória RAM) antes de ser aceito como verdadeiro. O token stateful geralmente contem um id, uma referência para algo que identifica uma conta, que ainda precisa ser validada por outro software. Um exemplo disso é a autenticação tradicional baseada em sessão.
Autenticação baseada em Chave Pública
Certificate Based Authentication usando x.509
Pode ser utilizada em navegadores e browsers!
Certificate Based Authentication usando PGP ou OpenPGP
É utilizada em e-mails.
Autenticação de chave pública/privada do SSH
Utilizada amplamente para acesso remoto via SSH sem utilização de senha.