ホームページ  >  記事  >  バックエンド開発  >  PHP マイクロサービスで認証と権限制御を実装する方法

PHP マイクロサービスで認証と権限制御を実装する方法

WBOY
WBOYオリジナル
2023-09-24 15:17:02536ブラウズ

PHP マイクロサービスで認証と権限制御を実装する方法

PHP マイクロサービスで認証と権限の制御を実装する方法

インターネット サービスの継続的な開発に伴い、ますます多くのアプリケーションがマイクロサービス アーキテクチャを採用して、サービスのスケーラビリティと保守性を向上させています。システム。マイクロサービス アーキテクチャでは、認証と権限の制御が非常に重要であり、システムのセキュリティを保護し、ユーザー データの機密性を確保し、許可されたユーザーのみが特定のリソースにアクセスできるようにすることができます。

この記事では、PHP マイクロサービスで認証と権限の制御を実装する方法を紹介し、対応するコード例を示します。

1. JWT 認証

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 を検証することでユーザーの身元を確認できます。

2. 権限制御

認証を実装した後は、権限制御も行う必要があります。ユーザー権限をチェックするための 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 サイトの他の関連記事を参照してください。

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