web-dev-qa-db-fra.com

Comment utiliser correctement les jetons Au porteur?

Je suis en train de créer un système d'autorisation dans PHP, et je suis tombé sur ce schéma de porteur qui consiste à passer des jetons JWT, j'ai lu RFC 675 . J'ai les doutes suivants:

  1. Comment cela améliore-t-il la sécurité?
  2. Le serveur répond au client avec un jeton JWT dans son corps après une autorisation et une connexion réussies. Désormais, lorsque le client fait une nouvelle demande, je ne sais pas comment faire. Je souhaite envoyer un jeton à partir du client dans l'en-tête Autorisation du demande, donc maintenant devrais-je simplement préfixer "Bearer" au jeton que j'ai reçu dans la réponse précédente du serveur et Si oui, le serveur qui reçoit l'en-tête Authorization devrait simplement scinder la chaîne avec un espace et prendre la deuxième valeur de le tableau obtenu et ensuite le décoder? Par exemple, Authorization: Bearer fdbghfbfgbjhg_something, Comment le serveur est-il supposé gérer cela, decodeFunc(explode(" ", $this->getRequest()->getHeader("Authorization"))[1])?
21
xyz

1.Améliorer la sécurité, car si le jeton n'est pas envoyé dans l'en-tête qui l'a envoyé dans l'URL, il sera consigné par le système réseau, le journal du serveur ....

2.Une bonne fonction pour obtenir des jetons de porteur

/** 
 * Get header Authorization
 * */
function getAuthorizationHeader(){
        $headers = null;
        if (isset($_SERVER['Authorization'])) {
            $headers = trim($_SERVER["Authorization"]);
        }
        else if (isset($_SERVER['HTTP_AUTHORIZATION'])) { //Nginx or fast CGI
            $headers = trim($_SERVER["HTTP_AUTHORIZATION"]);
        } elseif (function_exists('Apache_request_headers')) {
            $requestHeaders = Apache_request_headers();
            // Server-side fix for bug in old Android versions (a Nice side-effect of this fix means we don't care about capitalization for Authorization)
            $requestHeaders = array_combine(array_map('ucwords', array_keys($requestHeaders)), array_values($requestHeaders));
            //print_r($requestHeaders);
            if (isset($requestHeaders['Authorization'])) {
                $headers = trim($requestHeaders['Authorization']);
            }
        }
        return $headers;
    }
/**
 * get access token from header
 * */
function getBearerToken() {
    $headers = getAuthorizationHeader();
    // HEADER: Get the access token from the header
    if (!empty($headers)) {
        if (preg_match('/Bearer\s(\S+)/', $headers, $matches)) {
            return $matches[1];
        }
    }
    return null;
}
69
Ngô Văn Thao