Maison développement back-end tutoriel php Développement PHP : Comment utiliser JWT pour l'authentification et l'autorisation

Développement PHP : Comment utiliser JWT pour l'authentification et l'autorisation

Jun 14, 2023 pm 04:14 PM
jwt 身份认证 授权

Dans le développement d'applications Web modernes, la sécurité est devenue une partie intégrante. L'authentification et l'autorisation sont cruciales à cet égard, car elles garantissent que seuls les utilisateurs autorisés peuvent accéder aux ressources protégées. Il existe de nombreux mécanismes d’authentification et d’autorisation, parmi lesquels JWT (JSON Web Token) est un mécanisme particulièrement apprécié car simple, flexible, évolutif et sécurisé. Dans cet article, nous explorerons comment utiliser PHP et JWT pour l'authentification et l'autorisation.

Première partie : principes de base de JWT

JSON Web Token (JWT) est un standard ouvert permettant de transmettre en toute sécurité des réclamations et des informations d'authentification sur le Web. Il se compose de trois parties : en-tête, charge utile et signature.

L'en-tête contient des informations sur l'algorithme et le type de jeton. Un exemple pourrait ressembler à ceci :

{
  "alg": "HS256",
  "typ": "JWT"
}
Copier après la connexion

La charge utile contient les informations qui doivent être transmises. Par exemple, le nom d'utilisateur, le rôle et d'autres informations sur l'utilisateur. Un exemple de charge utile pourrait ressembler à ceci :

{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022
}
Copier après la connexion

Une signature est une chaîne cryptée contenant la clé utilisée pour vérifier que le JWT est valide. Un exemple de signature pourrait ressembler à ceci :

HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(claims),
  secret)
Copier après la connexion

Partie 2 : Implémentation de JWT à l'aide de PHP

Afin d'utiliser JWT pour l'authentification et l'autorisation, nous avons besoin d'une classe PHP pour générer et vérifier le JWT. Regardons l'implémentation d'une simple classe PHP JWT.

<?php

class JWT {
  private $header;
  private $payload;
  private $secret;

  public function __construct($header, $payload, $secret) {
    $this->header = $header;
    $this->payload = $payload;
    $this->secret = $secret;
  }

  public function encode() {
    $header = $this->base64UrlEncode(json_encode($this->header));
    $payload = $this->base64UrlEncode(json_encode($this->payload));
    $signature = $this->base64UrlEncode(hash_hmac('sha256', $header . '.' . $payload, $this->secret, true));
    return $header . '.' . $payload . '.' . $signature;
  }

  public function decode($jwt) {
    $parts = explode('.', $jwt);
    $header = json_decode($this->base64UrlDecode($parts[0]), true);
    $payload = json_decode($this->base64UrlDecode($parts[1]), true);
    $signature = $this->base64UrlDecode($parts[2]);
    $result = hash_hmac('sha256', $parts[0] . '.' . $parts[1], $this->secret, true);
    if (hash_equals($result, $signature)) {
      return $payload;
    } else {
      return null;
    }
  }

  private function base64UrlEncode($data) {
    return rtrim(strtr(base64_encode($data), '+/', '-_'), '=');
  }

  private function base64UrlDecode($data) {
    return base64_decode(str_pad(strtr($data, '-_', '+/'), strlen($data) % 4, '=', STR_PAD_RIGHT));
  }
}
Copier après la connexion

Dans cette classe PHP, $header, $payload et $secret stockent l'en-tête JWT, la charge utile et les informations clés. La méthode encode() utilise header, payload et secret pour générer une chaîne JWT. La méthode decode() utilise la chaîne et la clé JWT données pour obtenir des informations sur la charge utile. $header$payload$secret 存储了 JWT 的头部、载荷和密钥信息。encode() 方法使用 headerpayloadsecret 来生成 JWT 字符串。decode() 方法使用给定的 JWT 字符串和密钥来获取载荷信息。

base64UrlEncode()base64UrlDecode() 方法用于编码和解码 JWT 的头部和载荷。

第三部分:将 JWT 用于身份认证和授权

现在,我们已经了解了 JWT 的基础知识,并且有一个 PHP JWT 类用于生成和验证 JWT。那么,我们如何将 JWT 用于身份认证和授权呢?

首先,当用户登录时,可以使用 JWT 发送一个令牌来验证他们的身份。服务器将生成一个带有用户名和密码有效载荷的 JWT,并将其发送给客户端。客户端将在每个请求中将此令牌作为 Authorization 标头的 Bearer 认证方案进行发送。服务器将从标头中提取 JWT 并根据需要验证其有效性。

以下是一个示例 JWT 实现用于身份认证和授权:

<?php

// 使用 JWT 登录
function login($username, $password) {
  // 检查用户名和密码是否正确
  $is_valid = validate_user_credentials($username, $password);
  if (!$is_valid) {
    return null;
  }

  // 生成 JWT
  $header = array('alg' => 'HS256', 'typ' => 'JWT');
  $payload = array('sub' => $username);
  $jwt = new JWT($header, $payload, $GLOBALS['secret']);
  $token = $jwt->encode();

  // 返回 JWT
  return $token;
}

// 验证 JWT
function validate_token($jwt) {
  $jwt = new JWT($header, $payload, $GLOBALS['secret']);
  $payload = $jwt->decode($jwt);
  if ($payload == null) {
    return false;
  }

  // 验证成功
  return true;
}

// 保护资源
function protect_resource() {
  // 检查 JWT 是否有效
  $jwt = get_authorization_header();
  if (!validate_token($jwt)) {
    http_response_code(401);
    exit();
  }

  // 资源保护
  // ...
}

// 从标头获取 JWT
function get_authorization_header() {
  $headers = getallheaders();
  if (isset($headers['Authorization'])) {
    return $headers['Authorization'];
  }
  return null;
}

// 检查用户名和密码是否正确
function validate_user_credentials($username, $password) {
  // 验证用户名和密码
  // ...
  return true;
}

// 密钥
$GLOBALS['secret'] = "my-secret";

// 登录并获取 JWT
$token = login("username", "password");

// 将 JWT 添加到标头
$headers = array('Authorization: Bearer ' . $token);

// 保护资源
protect_resource($headers);
Copier après la connexion

在这个示例中,login() 方法使用 JWT 类创建一个 JWT,并返回它以便客户端使用。validate_token() 方法可以验证 JWT 的有效性。如果 JWT 无效,将返回 false。

get_authorization_header() 方法从请求标头中提取 JWT。 protect_resource() 方法用于保护 Web 资源。如果 JWT 无效,该函数将引发 401 错误。

最后,在全局范围内定义了一个密钥,$GLOBALS ['secret']

Les méthodes base64UrlEncode() et base64UrlDecode() sont utilisées pour encoder et décoder l'en-tête et la charge utile JWT.

Partie 3 : Utiliser JWT pour l'authentification et l'autorisation

Maintenant, nous avons compris les bases de JWT et disposons d'une classe PHP JWT pour générer et valider JWT. Alors, comment utiliser JWT pour l'authentification et l'autorisation ? 🎜🎜Tout d'abord, lorsqu'un utilisateur se connecte, vous pouvez utiliser JWT pour envoyer un jeton afin de vérifier son identité. Le serveur générera un JWT avec la charge utile du nom d'utilisateur et du mot de passe et l'enverra au client. Le client enverra ce jeton comme en-tête d'autorisation du schéma d'authentification du porteur à chaque demande. Le serveur extraira le JWT de l'en-tête et vérifiera sa validité si nécessaire. 🎜🎜Voici un exemple d'implémentation JWT pour l'authentification et l'autorisation : 🎜rrreee🎜Dans cet exemple, la méthode login() crée un JWT à l'aide de la classe JWT et renvoie C'est à l'usage des clients. La méthode validate_token() peut vérifier la validité du JWT. Si le JWT n'est pas valide, false sera renvoyé. La méthode 🎜🎜get_authorization_header() extrait le JWT de l'en-tête de la requête. La méthode protect_resource() est utilisée pour protéger les ressources Web. Si le JWT n'est pas valide, cette fonction générera une erreur 401. 🎜🎜Enfin, un secret est défini dans la portée globale, $GLOBALS ['secret'] , qui doit être une longue chaîne. Veuillez noter que ce mot de passe est un mot de passe secret et ne doit pas être inclus dans votre base de code. Généralement, cette clé est stockée dans une variable d'environnement et gérée par le système d'exploitation exécutant le serveur Web. 🎜🎜Conclusion🎜🎜JWT est un mécanisme très simple, flexible, évolutif et sécurisé d'authentification et d'autorisation dans les applications Web. Dans cet article, nous avons examiné les bases de JWT et vu un exemple de classe PHP pour générer et valider JWT. Nous avons également vu comment JWT peut être utilisé pour l'authentification et l'autorisation. Vous pouvez désormais essayer JWT dans vos applications Web pour vous assurer que vos applications sont plus sécurisées. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment mettre à niveau la version de service à long terme de Win10 Enterprise version 2016 vers la version professionnelle Comment mettre à niveau la version de service à long terme de Win10 Enterprise version 2016 vers la version professionnelle Jan 03, 2024 pm 11:26 PM

Lorsque nous ne souhaitons plus utiliser l'actuelle édition de service à long terme de Win10 Enterprise Edition 2016, nous pouvons choisir de passer à l'édition professionnelle. La méthode est également très simple. Il suffit de modifier certains contenus et d'installer l'image système. Comment changer la version de service à long terme de Win10 Enterprise version 2016 en version professionnelle 1. Appuyez sur win+R, puis entrez « regedit » 2. Collez le chemin suivant directement dans la barre d'adresse ci-dessus : Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT \CurrentVersion3 , puis recherchez l'EditionID et remplacez le contenu par "professionnel" pour confirmer

Comment utiliser JWT et JWE pour l'authentification et le chiffrement API en PHP Comment utiliser JWT et JWE pour l'authentification et le chiffrement API en PHP Jun 17, 2023 pm 02:42 PM

Avec le développement d’Internet, de plus en plus de sites Web et d’applications doivent fournir des interfaces API pour l’interaction des données. Dans ce cas, l’authentification et le chiffrement des API deviennent des problèmes très importants. En tant que mécanisme d'authentification et de chiffrement populaire, JWT et JWE sont de plus en plus utilisés en PHP. Eh bien, cet article expliquera comment utiliser JWT et JWE pour l'authentification et le chiffrement API en PHP. Concepts de base de JWT JWT signifie JSONWe

Comment utiliser ThinkPHP6 pour l'authentification JWT ? Comment utiliser ThinkPHP6 pour l'authentification JWT ? Jun 12, 2023 pm 12:18 PM

JWT (JSONWebToken) est un mécanisme léger d'authentification et d'autorisation qui utilise des objets JSON comme jetons de sécurité pour transmettre en toute sécurité les informations d'identité des utilisateurs entre plusieurs systèmes. ThinkPHP6 est un framework MVC efficace et flexible basé sur le langage PHP. Il fournit de nombreux outils et fonctions utiles, notamment le mécanisme d'authentification JWT. Dans cet article, nous présenterons comment utiliser ThinkPHP6 pour l'authentification JWT afin de garantir la sécurité et la fiabilité des applications Web.

Analyse de la technologie sécurisée de génération et de vérification de jetons JWT en PHP Analyse de la technologie sécurisée de génération et de vérification de jetons JWT en PHP Jul 01, 2023 pm 06:06 PM

Analyse de la technologie sécurisée de génération et de vérification de jetons JWT en PHP Avec le développement des applications réseau, l'authentification et l'autorisation des utilisateurs deviennent de plus en plus importantes. JsonWebToken (JWT) est un standard ouvert (RFC7519) permettant de transmettre en toute sécurité des informations dans les applications Web. Dans le développement PHP, il est devenu courant d'utiliser des jetons JWT pour l'authentification et l'autorisation des utilisateurs. Cet article présentera la technologie sécurisée de génération et de vérification de jetons JWT en PHP. 1. Connaissance de base de JWT pour comprendre comment générer et

OAuth en PHP : créer un serveur d'autorisation JWT OAuth en PHP : créer un serveur d'autorisation JWT Jul 28, 2023 pm 05:27 PM

OAuth en PHP : création d'un serveur d'autorisation JWT Avec l'essor des applications mobiles et la tendance à la séparation du front-end et du back-end, OAuth est devenu un élément indispensable des applications Web modernes. OAuth est un protocole d'autorisation qui protège les ressources des utilisateurs contre tout accès non autorisé en fournissant des processus et des mécanismes standardisés. Dans cet article, nous apprendrons comment créer un serveur d'autorisation OAuth basé sur JWT (JSONWebTokens) à l'aide de PHP. JWT est un type de

Un guide complet pour implémenter l'authentification de connexion dans Vue.js (API, JWT, axios) Un guide complet pour implémenter l'authentification de connexion dans Vue.js (API, JWT, axios) Jun 09, 2023 pm 04:04 PM

Vue.js est un framework JavaScript populaire pour créer des applications Web dynamiques. La mise en œuvre de l’authentification de connexion des utilisateurs est l’une des parties nécessaires au développement d’applications Web. Cet article présentera un guide complet sur la mise en œuvre de la vérification de connexion à l'aide de Vue.js, API, JWT et axios. Création d'une application Vue.js Tout d'abord, nous devons créer une nouvelle application Vue.js. Nous pouvons créer une application Vue.js à l'aide de VueCLI ou manuellement. Installer axiosax

Comment utiliser Flask-Security pour implémenter l'authentification et l'autorisation des utilisateurs Comment utiliser Flask-Security pour implémenter l'authentification et l'autorisation des utilisateurs Aug 04, 2023 pm 02:40 PM

Comment utiliser Flask-Security pour implémenter l'authentification et l'autorisation des utilisateurs Introduction : Dans les applications Web modernes, l'authentification et l'autorisation des utilisateurs sont des fonctions essentielles. Pour simplifier ce processus, Flask-Security est une extension très utile qui fournit une série d'outils et de fonctions pour rendre l'authentification et l'autorisation des utilisateurs simples et pratiques. Cet article expliquera comment utiliser Flask-Security pour implémenter l'authentification et l'autorisation des utilisateurs. 1. Installez l'extension Flask-Security : au début

Comment obtenir une autorisation pour les tranches et les produits Douyin ? Le tranchage Douyin est-il facile à réaliser ? Comment obtenir une autorisation pour les tranches et les produits Douyin ? Le tranchage Douyin est-il facile à réaliser ? Mar 07, 2024 pm 10:52 PM

Douyin, en tant que plate-forme de médias sociaux populaire à l'heure actuelle, offre non seulement aux gens une richesse de contenu de divertissement, mais est également devenu un canal important permettant à de nombreuses marques et commerçants de promouvoir leurs produits et de réaliser des ventes. Parmi eux, le découpage et la vente de produits par Douyin sont devenus une méthode de marketing nouvelle et efficace. Alors, comment obtenir l'autorisation pour les produits en tranches de Douyin ? 1. Comment obtenir l'autorisation pour les produits en tranches de Douyin ? Les produits en tranches de Douyin décomposent de longues vidéos en courts clips vidéo et y intègrent des informations sur la promotion des produits pour attirer les téléspectateurs. acheter. . Lors du découpage et de la vente de marchandises sur Douyin, la première étape consiste à obtenir l'autorisation de la vidéo originale. Lorsque vous recherchez un concédant de licence approprié, vous pouvez envisager d'utiliser différents canaux tels que la plateforme Douyin, les médias sociaux et les forums industriels. Trouvez des créateurs ou des détenteurs de droits d'auteur avec du contenu vidéo populaire et connectez-vous activement avec eux,

See all articles