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.

You should also read:

Usando seus usuários externos (seu próprio IDP) dentro de clouds (AWS, GC, Azure)

A AWS permite integrar com OAuth2/OIDC e SAML2.0 Documentação sobre o assunto: https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers.html https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_saml_3rd-party.html https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_federated-users.html Se quiser integrar o PostgreSQL, por que não…

Formatos de Autenticação HTTP/HTTPS

BasicAuth JWT OAuth2 HTTP Signatures OpenID Auth0 Ory Hydra Artigo sobre HTTP Signatures https://medium.com/@technospace/ensuring-message-integrity-with-http-signatures-86f121ac9823 GitHub do Ory Hydra https://github.com/ory/hydra