ホームページ バックエンド開発 PHPチュートリアル PHP 開発: 認証と認可に JWT を使用する方法

PHP 開発: 認証と認可に JWT を使用する方法

Jun 14, 2023 pm 04:14 PM
jwt 認証 承認する

現代の Web アプリケーション開発では、セキュリティが不可欠な部分になっています。認証と認可は、許可されたユーザーのみが保護されたリソースにアクセスできるようにするため、この点で非常に重要です。利用可能な認証および認可メカニズムは数多くありますが、その中でも JWT (JSON Web Token) は、シンプルで柔軟、スケーラブルで安全であるため、特に人気のあるメカニズムです。この記事では、認証と認可に PHP と JWT を使用する方法を説明します。

パート 1: JWT の基本

JSON Web Token (JWT) は、Web 上でクレームと認証情報を安全に送信するためのオープン スタンダードです。これは、ヘッダー、ペイロード、署名の 3 つの部分で構成されます。

ヘッダーには、アルゴリズムとトークン タイプの情報が含まれています。その例は次のようになります。

{
  "alg": "HS256",
  "typ": "JWT"
}
ログイン後にコピー

ペイロードには、送信する必要がある情報が含まれています。たとえば、ユーザー名、役割、ユーザーに関するその他の情報などです。ペイロードの例は次のようになります。

{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022
}
ログイン後にコピー

署名は、JWT が有効であることを検証するために使用されるキーを含む暗号化された文字列です。署名の例は次のようになります。

HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(claims),
  secret)
ログイン後にコピー

パート 2: PHP を使用した JWT の実装

認証と認可に JWT を使用するには、 JWT。単純な 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));
  }
}
ログイン後にコピー

この PHP クラスでは、$header$payload、および $secret に JWT ヘッダー、ペイロード、およびシークレット情報が保存されます。 encode() メソッドは、headerpayload、および secret を使用して JWT 文字列を生成します。 decode() メソッドは、指定された JWT 文字列とキーを使用してペイロード情報を取得します。

base64UrlEncode() メソッドと base64UrlDecode() メソッドは、JWT ヘッダーとペイロードのエンコードとデコードに使用されます。

パート 3: 認証と認可に JWT を使用する

これで、JWT の基本を理解でき、JWT を生成および検証するための PHP JWT クラスができました。では、認証と認可に JWT を使用するにはどうすればよいでしょうか?

まず、ユーザーがログインすると、ID を認証するために JWT を使用してトークンを送信できます。サーバーはユーザー名とパスワードのペイロードを含む JWT を生成し、クライアントに送信します。クライアントは、すべてのリクエストでベアラー認証スキームの Authorization ヘッダーとしてこのトークンを送信します。サーバーはヘッダーから 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);
ログイン後にコピー

この例では、login() メソッドは JWT クラスを使用します。 JWT を作成し、クライアントが使用できるようにそれを返します。 validate_token() メソッドは、JWT の有効性を検証できます。 JWT が無効な場合は false が返されます。

get_authorization_header() メソッドはリクエスト ヘッダーから JWT を抽出します。 protect_resource() このメソッドは、Web リソースを保護するために使用されます。 JWT が無効な場合、この関数は 401 エラーを生成します。

最後に、シークレットがグローバル スコープ $GLOBALS ['secret'] で定義されます。これは長い文字列である必要があります。このパスワードは秘密のパスワードであるため、コード ベースに含めないでください。通常、このキーは環境変数に保存され、Web サーバーを実行しているオペレーティング システムによって管理されます。

結論

JWT は、Web アプリケーションでの認証と認可に使用できる、非常にシンプルで柔軟、スケーラブルで安全なメカニズムです。この記事では、JWT の基本を説明し、JWT を生成および検証するためのサンプル PHP クラスを見てきました。また、JWT を認証と認可にどのように使用できるかについても説明しました。 Web アプリケーションで JWT を試して、アプリケーションの安全性を確保できるようになりました。

以上がPHP 開発: 認証と認可に JWT を使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

win10エンタープライズ版2016長期サービス版をプロフェッショナル版にアップグレードする方法 win10エンタープライズ版2016長期サービス版をプロフェッショナル版にアップグレードする方法 Jan 03, 2024 pm 11:26 PM

現在のWin10 Enterprise Edition 2016 長期サービス版を継続利用したくない場合は、一部の内容を変更してシステムイメージをインストールするだけで、Professional Editionに切り替えることができます。 win10 エンタープライズ バージョン 2016 長期サービス バージョンをプロフェッショナル バージョンに変更する方法 1. win + R キーを押し、「regedit」と入力します。 2. 次のパスを上のアドレス バーに直接貼り付けます: Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT \CurrentVersion3 に移動し、EditionID を見つけて内容を「professional」に置き換えて確認します。

PHP での API 認証と暗号化に JWT と JWE を使用する方法 PHP での API 認証と暗号化に JWT と JWE を使用する方法 Jun 17, 2023 pm 02:42 PM

インターネットの発展に伴い、データ対話のための API インターフェイスを提供する必要がある Web サイトやアプリケーションがますます増えています。この場合、APIの認証と暗号化が非常に重要な問題となります。一般的な認証および暗号化メカニズムとして、JWT と JWE が PHP で使用されることが増えています。さて、この記事では、PHP で API 認証と暗号化に JWT と JWE を使用する方法を説明します。 JWT の基本概念 JWT は JSONWe の略です

JWT 認証に ThinkPHP6 を使用するにはどうすればよいですか? JWT 認証に ThinkPHP6 を使用するにはどうすればよいですか? Jun 12, 2023 pm 12:18 PM

JWT (JSONWebToken) は、JSON オブジェクトをセキュリティ トークンとして使用して、複数のシステム間でユーザー ID 情報を安全に送信する軽量の認証および認可メカニズムです。 ThinkPHP6 は、PHP 言語をベースとした効率的かつ柔軟な MVC フレームワークであり、JWT 認証メカニズムを含む多くの便利なツールと機能を提供します。この記事では、Web アプリケーションのセキュリティと信頼性を確保するための JWT 認証に ThinkPHP6 を使用する方法を紹介します。

PHP の OAuth: JWT 認証サーバーを作成する PHP の OAuth: JWT 認証サーバーを作成する Jul 28, 2023 pm 05:27 PM

PHP での OAuth: JWT 認証サーバーの作成 モバイル アプリケーションの台頭とフロントエンドとバックエンドの分離の傾向により、OAuth は最新の Web アプリケーションに不可欠な部分になりました。 OAuth は、標準化されたプロセスとメカニズムを提供することで、ユーザーのリソースを不正アクセスから保護する承認プロトコルです。この記事では、PHP を使用して JWT (JSONWebTokens) ベースの OAuth 認証サーバーを作成する方法を学びます。 JWT の一種です。

PHPにおける安全なJWTトークン生成・検証技術の分析 PHPにおける安全なJWTトークン生成・検証技術の分析 Jul 01, 2023 pm 06:06 PM

PHP における安全な JWT トークンの生成および検証テクノロジの分析 ネットワーク アプリケーションの開発に伴い、ユーザーの認証と認可がますます重要になっています。 JsonWebToken (JWT) は、Web アプリケーションで情報を安全に送信するためのオープン標準 (RFC7519) です。 PHP 開発では、ユーザーの認証と認可に JWT トークンを使用することが一般的になっています。この記事では、PHP における安全な JWT トークンの生成と検証テクノロジを紹介します。 1. JWT の生成方法と作成方法を理解するための JWT の基本的な知識

Vue.js (API、JWT、axios) でログイン認証を実装するための完全なガイド Vue.js (API、JWT、axios) でログイン認証を実装するための完全なガイド Jun 09, 2023 pm 04:04 PM

Vue.js は、動的 Web アプリケーションを構築するための人気のある JavaScript フレームワークです。ユーザーのログイン認証の実装は、Web アプリケーションの開発に必要な部分の 1 つです。この記事では、Vue.js、API、JWT、axios を使用してログイン検証を実装するための完全なガイドを紹介します。 Vue.js アプリケーションの作成 まず、新しい Vue.js アプリケーションを作成する必要があります。 Vue.js アプリケーションは、VueCLI を使用して、または手動で作成できます。 axiosax をインストールする

Flask-Security を使用してユーザー認証と認可を実装する方法 Flask-Security を使用してユーザー認証と認可を実装する方法 Aug 04, 2023 pm 02:40 PM

Flask-Security を使用してユーザー認証と認可を実装する方法 はじめに: 最新の Web アプリケーションでは、ユーザー認証と認可は不可欠な機能です。このプロセスを簡素化するために、Flask-Security はユーザーの認証と認可を簡単かつ便利にする一連のツールと機能を提供する非常に便利な拡張機能です。この記事では、Flask-Security を使用してユーザーの認証と認可を実装する方法を紹介します。 1. Flask-Security 拡張機能をインストールします: 最初に

UniApp はユーザーのログインと認可の詳細な分析を実装します UniApp はユーザーのログインと認可の詳細な分析を実装します Jul 05, 2023 pm 11:54 PM

UniApp のユーザー ログインと承認の実装の詳細な分析 最新のモバイル アプリケーション開発では、ユーザーのログインと承認は不可欠な機能です。クロスプラットフォーム開発フレームワークとして、UniApp はユーザーのログインと認可を実装する便利な方法を提供します。この記事では、UniApp でのユーザーのログインと認証の詳細を説明し、対応するコード例を添付します。 1. ユーザーログイン機能の実装 ログインページの作成 ユーザーログイン機能には通常、ユーザーがアカウント番号とパスワードを入力するフォームとログインボタンを含むログインページが必要です。

See all articles