 
                            É o ato de estabelecer ou confirmar algo (ou alguém) como autêntico (...)Fonte: Wikipedia
 
                            Autenticação baseada no conhecimento
Autenticação baseada na propriedade


Autenticação baseada na característica
É garantir que apenas usuários autorizados consumam os recursos protegidos de um sistema computacionalFonte: Wikipedia
 
                            
                            Utilizando o Grant de Authorization Code
                            (saiba como escolher o Grant Type certo nesse link)
                        
 
                            
                            É um objeto que descreve o contexto de segurança de um processo (...)Fonte: MSDN
httpOnly e secure) ao invés do LocalStorageuse Lcobucci\JWT\Builder;
$time = time();
$token = (new Builder())
    ->issuedBy('http://example.com') // Configures the issuer (iss claim)
    ->permittedFor('http://example.org') // Configures the audience (aud claim)
    ->identifiedBy('4f1g23a12aa', true) // Configures the id (jti claim), replicating as a header item
    ->issuedAt($time) // Configures the time that the token was issue (iat claim)
    ->canOnlyBeUsedAfter($time + 60) // Configures the time that the token can be used (nbf claim)
    ->expiresAt($time + 3600) // Configures the expiration time of the token (exp claim)
    ->withClaim('uid', 1) // Configures a new claim, called "uid"
    ->getToken(); // Retrieves the generated tokenImplementação mais conhecida de tokens
Implementação com design "mais seguro" por padrão
x requisições em algum(ns) endpoint(s) por um certo período de tempo
                        x, as requisições entrarão em uma fila para serem processadas alguns instantes depois, assim que as primeiras tiverem sido liberadas
                        503 Service Unavailable ou 429 Too Many Requests
                        x primeiras requisições, e após um outro número y, iremos
                        simplesmente parar de responder
                    ngx_http_limit_req_module (que implementa o mais conhecido algoritmo desse tipo de prática, o
                                Leaky Bucket)
                        
                                limit_req_zone $binary_remote_addr zone=login_zone:10m rate=10r/s;
                                server {
                                    location /login {
                                        limit_req zone=login_zone burst=5;
                                        # outras configurações padrões do meu bloco location...
                                    }
                                }
                            /login, permitindo apenas 10 requisições por segundo por IP (ou seja, 1 a cada 100ms)
                        upstream
                        Nesse caso, se recebermos de um mesmo IP 10 requisições em um período de 100ms, o que ocorrerá?
/user/1, /user/2, /user/3 etc, estamos
                            fornecendo uma informação muito valiosa sobre a quantidade de registros que possuímos daquela entidade
                        Cuidado com espionagem industrial! 
/user/<IdIncremental> em /user/<Identificador>Funções que não devem ser utilizadas:
const { createHash } = require('crypto');
const hash = createHash('sha256');
user.lookupHash = hash.update(user.id).digest('hex');
                        
                            from hashlib import sha256
                            sha256(user.id).hexdigest()
                        Utilizando a biblioteca paragonie/ciphersweet, que deriva uma chave para cada coluna a partir de uma chave-mestra
Mas, espera aí! Eu já uso HTTPS. Meu dados já estão sendo criptografados usando TLS.
Antes de seguir nessa etapa, faça um Threat Modeling e certifique-se que realmente valhe a pena
Compensa instalar um sistema de segurança de última geração em um depósito que não possui algo de extremo valor dentro?
SIM! Meu sistema é crítico e preciso disso. Ou eu não confio em grandes corporações.