PHP マイクロサービスで認証と権限の制御を実装する方法
インターネット サービスの継続的な開発に伴い、ますます多くのアプリケーションがマイクロサービス アーキテクチャを採用して、サービスのスケーラビリティと保守性を向上させています。システム。マイクロサービス アーキテクチャでは、認証と権限の制御が非常に重要であり、システムのセキュリティを保護し、ユーザー データの機密性を確保し、許可されたユーザーのみが特定のリソースにアクセスできるようにすることができます。
この記事では、PHP マイクロサービスで認証と権限の制御を実装する方法を紹介し、対応するコード例を示します。
Json Web Token (JWT) は、認証と認可のためにオブジェクトを安全に送信する方法です。これは、ヘッダー、ペイロード、署名の 3 つの部分で構成されます。まず、JWT 認証を実装するには、firebase/php-jwt
ライブラリをインストールする必要があります。
composer require firebase/php-jwt
次に、ユーザー認証関連のロジックを処理する AuthController
クラスを作成できます。
use FirebaseJWTJWT; class AuthController { private $secret = "your-secret-key"; public function login($username, $password) { // 验证用户名和密码 if ($username == "admin" && $password == "password") { // 生成JWT $tokenId = base64_encode(random_bytes(32)); $issuedAt = time(); $expire = $issuedAt + 60; // Token 有效期为60秒 $data = [ 'iat' => $issuedAt, 'jti' => $tokenId, 'exp' => $expire, 'data' => [ // 可以存储用户ID、权限等信息 'userId' => 1, 'role' => 'admin' ] ]; $jwt = JWT::encode($data, $this->secret, 'HS256'); return $jwt; } else { throw new Exception('Invalid credentials'); } } public function verifyToken($jwt) { try { $decoded = JWT::decode($jwt, $this->secret, ['HS256']); return (array) $decoded->data; } catch (Exception $e) { throw new Exception('Invalid token'); } } }
上記のコードは、ログイン ロジックと JWT 検証ロジックを実装しています。ログイン プロセス中に、初めて JWT が生成され、ユーザーに返されます。ユーザーは各リクエストのヘッダーに JWT を含める必要があります。サーバーは JWT を検証することでユーザーの身元を確認できます。
認証を実装した後は、権限制御も行う必要があります。ユーザー権限をチェックするための Permission
クラスを作成できます。
class Permission { public function checkPermission($role, $resource) { // 根据用户角色和资源来检查权限 $permissions = [ 'admin' => ['create', 'read', 'update', 'delete'], 'user' => ['read', 'create'] ]; if (isset($permissions[$role]) && in_array($resource, $permissions[$role])) { return true; } else { return false; } } }
マイクロサービスのコントローラーでは、AuthController
クラスと Permission
クラスを使用して、認証と権限の制御を実装できます。
class UserController { private $authController; private $permission; public function __construct() { $this->authController = new AuthController(); $this->permission = new Permission(); } public function create($username, $password) { // 验证用户身份 $jwt = $this->authController->login($username, $password); // 可以将生成的JWT存储在会话、Cookie或者返回给客户端 // ... // 检查用户权限 $decoded = $this->authController->verifyToken($jwt); if ($this->permission->checkPermission($decoded['role'], 'create')) { // 创建用户的逻辑 // ... } else { throw new Exception('Permission denied'); } } }
上記のコードでは、AuthController
クラスの login
メソッドを呼び出してログイン ロジックを実装し、返された JWT をユーザーに返します。 create
メソッドでは、まず verifyToken
メソッドを通じて JWT の有効性を検証し、次に Permission## の
checkPermission メソッドを呼び出します。 # ユーザーを確認するクラス ユーザーを作成する権限がありますか?
PHP マイクロサービスでの認証と権限制御の実装は、非常に重要な部分です。 JWT 認証クラスと権限チェック クラスを組み合わせることで、安全で信頼性の高い認証と権限制御を実現できます。上記のコード例は、これらの関数をすぐに理解して実装するのに役立ちます。コードは運用環境でより詳細かつ包括的にテストし、実際のニーズに基づいて拡張および最適化する必要があることに注意してください。
以上がPHP マイクロサービスで認証と権限制御を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。