Rumah >pembangunan bahagian belakang >tutorial php >Bagaimana untuk melaksanakan pengesahan dan kawalan kebenaran dalam perkhidmatan mikro PHP

Bagaimana untuk melaksanakan pengesahan dan kawalan kebenaran dalam perkhidmatan mikro PHP

WBOY
WBOYasal
2023-09-24 15:17:02635semak imbas

Bagaimana untuk melaksanakan pengesahan dan kawalan kebenaran dalam perkhidmatan mikro PHP

Cara melaksanakan pengesahan dan kawalan kebenaran dalam perkhidmatan mikro PHP

Dengan pembangunan berterusan perkhidmatan Internet, semakin banyak aplikasi menggunakan seni bina perkhidmatan mikro untuk meningkatkan kebolehskalaan dan kebolehselenggaraan sistem. Dalam seni bina perkhidmatan mikro, pengesahan dan kawalan kebenaran adalah sangat penting. Ia boleh melindungi keselamatan sistem, memastikan kerahsiaan data pengguna, dan memastikan hanya pengguna yang diberi kuasa boleh mengakses sumber tertentu.

Artikel ini akan memperkenalkan cara melaksanakan pengesahan dan kawalan kebenaran dalam perkhidmatan mikro PHP dan menyediakan contoh kod yang sepadan.

1. JWT Authentication

Json Web Token (JWT) ialah kaedah menghantar objek dengan selamat untuk pengesahan dan kebenaran. Ia terdiri daripada tiga bahagian: pengepala, muatan dan tandatangan. Mula-mula, kita perlu memasang pustaka firebase/php-jwt untuk melaksanakan pengesahan JWT. firebase/php-jwt 库来实现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;
        }
    }
}

在微服务中的控制器中,我们可以使用 AuthControllerPermission 类来实现身份验证和权限控制。

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 类的 checkPermissionrrreee

Seterusnya, kita boleh mencipta kelas AuthController untuk mengendalikan logik berkaitan pengesahan pengguna.

rrreee
Kod di atas melaksanakan logik log masuk dan logik pengesahan JWT. Semasa proses log masuk kami menjana JWT buat kali pertama dan mengembalikannya kepada pengguna. Pengguna perlu memasukkan JWT dalam pengepala setiap permintaan. Pelayan boleh mengesahkan identiti pengguna dengan mengesahkan JWT.

🎜2. Kawalan kebenaran🎜🎜Selepas melaksanakan pengesahan, kami juga perlu melakukan kawalan kebenaran. Kita boleh membuat kelas Permission untuk menyemak kebenaran pengguna. 🎜rrreee🎜Dalam pengawal dalam perkhidmatan mikro, kami boleh menggunakan kelas AuthController dan Permission untuk melaksanakan kawalan pengesahan dan kebenaran. 🎜rrreee🎜Dalam kod di atas, kami memanggil kaedah log masuk kelas AuthController untuk melaksanakan logik log masuk dan mengembalikan JWT yang dikembalikan kepada pengguna. Dalam kaedah create, kami mula-mula mengesahkan kesahihan JWT melalui kaedah verifyToken dan kemudian memanggil checkPermission Permission class > Kaedah menyemak sama ada pengguna mempunyai kebenaran untuk mencipta pengguna. 🎜🎜Ringkasan🎜 Melaksanakan pengesahan dan kawalan kebenaran dalam perkhidmatan mikro PHP adalah bahagian yang sangat penting. Melalui gabungan kelas pengesahan JWT dan semakan kebenaran, kami boleh mencapai pengesahan dan kawalan kebenaran yang selamat dan boleh dipercayai. Contoh kod yang disediakan di atas boleh membantu anda memahami dan melaksanakan fungsi ini dengan cepat. Ingat, kod harus diuji dengan lebih terperinci dan menyeluruh dalam persekitaran pengeluaran, dan dikembangkan dan dioptimumkan berdasarkan keperluan sebenar. 🎜

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan pengesahan dan kawalan kebenaran dalam perkhidmatan mikro PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn