PHP での OAuth: JWT 認証サーバーの作成
モバイル アプリケーションの台頭とフロントエンドとバックエンドの分離の傾向により、OAuth は最新の Web アプリケーションに不可欠な部分になりました。 OAuth は、標準化されたプロセスとメカニズムを提供することで、ユーザーのリソースを不正アクセスから保護する承認プロトコルです。この記事では、PHP を使用して JWT (JSON Web Token) に基づいた OAuth 認証サーバーを作成する方法を学びます。
JWT は、Web 上で情報を渡すための安全な方法です。これは、ヘッダー、ペイロード、署名の 3 つの部分で構成されます。通常、ヘッダーにはアルゴリズムやトークン タイプなどのメタデータが含まれています。ペイロードには、ユーザー ID、権限、有効期限など、渡される特定の情報が含まれています。署名は、トークンの整合性とセキュリティを確保するために秘密キーを使用してヘッダーとペイロードを暗号化した結果です。
まず、PHP プロジェクトを作成し、JWT ライブラリをインストールする必要があります。この例では、「firebase/php-jwt」ライブラリを使用します。 Composer を介してインストールできます。次のコマンドを実行します。
composer require firebase/php-jwt
プロジェクトのルート ディレクトリに、認証サーバーとして機能する「oauth.php」ファイルを作成します。
以下は、簡単な認可サーバーのコード例です:
<?php require 'vendor/autoload.php'; use FirebaseJWTJWT; // 定义服务器密钥 $server_key = 'your-secret-key'; // 定义过期时间,单位为秒 $expiry_time = 3600; // 定义有效的客户端ID和秘密 $valid_clients = [ 'client_id1' => 'client_secret1', 'client_id2' => 'client_secret2', ]; // 验证客户端ID和秘密 function verify_client_credentials($client_id, $client_secret) { global $valid_clients; return isset($valid_clients[$client_id]) && $valid_clients[$client_id] === $client_secret; } // 授权服务器端点 if ($_SERVER['REQUEST_METHOD'] === 'POST') { // 验证客户端身份 $client_id = $_POST['client_id']; $client_secret = $_POST['client_secret']; if (!verify_client_credentials($client_id, $client_secret)) { http_response_code(401); echo json_encode(['error' => 'Invalid client credentials']); exit; } // 创建JWT $token = [ 'iss' => $_SERVER['SERVER_NAME'], 'aud' => $client_id, 'iat' => time(), 'exp' => time() + $expiry_time ]; $jwt = JWT::encode($token, $server_key); // 返回JWT给客户端 echo json_encode(['access_token' => $jwt]); exit; } // 获取JWT if ($_SERVER['REQUEST_METHOD'] === 'GET') { $auth_header = $_SERVER['HTTP_AUTHORIZATION']; $jwt = substr($auth_header, 7); // 去掉"Bearer "前缀 try { // 验证和解码JWT $decoded = JWT::decode($jwt, $server_key, ['HS256']); // 验证有效性 if ($decoded->exp < time()) { http_response_code(401); echo json_encode(['error' => 'Token expired']); exit; } // 返回用户信息或其他受保护的资源 echo json_encode(['user_id' => $decoded->sub]); exit; } catch (Exception $e) { // 如果JWT无效,返回错误 http_response_code(401); echo json_encode(['error' => $e->getMessage()]); exit; } } ?>
上の例では、最初にサーバー キー ($server_key
) と有効期限 (##) を定義します。 #$expiry_time)。次に、有効なクライアント ID とシークレット (
$valid_clients) を定義します。
verify_client_credentials 関数を実装しました。認可サーバーのエンドポイントでは、まずクライアントから提供された ID 情報を検証し、次に JWT を作成してクライアントに返します。
OAuth は、最新の Web アプリケーションで広く使用されている認証プロトコルです。 JWT は情報を安全に転送する方法です。 PHP の Firebase JWT ライブラリを使用すると、JWT ベースの OAuth 認証サーバーを簡単に作成できます。セキュリティと信頼性を確保するために、特定のニーズに応じて変更および拡張してください。
以上がPHP の OAuth: JWT 認証サーバーを作成するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。