Table des matières
1. Authentification JWT
2. 权限控制
Maison développement back-end tutoriel php Comment implémenter l'authentification et le contrôle des autorisations dans les microservices PHP

Comment implémenter l'authentification et le contrôle des autorisations dans les microservices PHP

Sep 24, 2023 pm 03:17 PM
php 微服务 身份认证 权限控制

Comment implémenter lauthentification et le contrôle des autorisations dans les microservices PHP

Comment implémenter l'authentification et le contrôle des autorisations dans les microservices PHP

Avec le développement continu des services Internet, de plus en plus d'applications adoptent une architecture de microservices pour améliorer l'évolutivité et la maintenabilité du système. Dans l'architecture des microservices, l'authentification et le contrôle des autorisations sont très importants. Ils peuvent protéger la sécurité du système, garantir la confidentialité des données des utilisateurs et garantir que seuls les utilisateurs autorisés peuvent accéder à des ressources spécifiques.

Cet article expliquera comment implémenter l'authentification et le contrôle des autorisations dans les microservices PHP et fournira des exemples de code correspondants.

1. Authentification JWT

Json Web Token (JWT) est une méthode de transmission sécurisée d'objets pour l'authentification et l'autorisation. Il se compose de trois parties : en-tête, charge utile et signature. Tout d'abord, nous devons installer la bibliothèque firebase/php-jwt pour implémenter l'authentification JWT. firebase/php-jwt 库来实现JWT身份验证。

composer require firebase/php-jwt
Copier après la connexion

接下来,我们可以创建一个 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');
        }
    }
}
Copier après la connexion

以上代码实现了登录逻辑和验证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;
        }
    }
}
Copier après la connexion

在微服务中的控制器中,我们可以使用 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');
        }
    }
}
Copier après la connexion

在上述代码中,我们调用了 AuthController 类的 login 方法来实现登录逻辑,并将返回的JWT返回给用户。在 create 方法中,我们先通过 verifyToken 方法验证JWT的有效性,然后再调用 Permission 类的 checkPermissionrrreee

Ensuite, nous pouvons créer une classe AuthController pour gérer la logique liée à l'authentification des utilisateurs.

rrreee
Le code ci-dessus implémente la logique de connexion et la logique de vérification JWT. Pendant le processus de connexion, nous générons le JWT pour la première fois et le renvoyons à l'utilisateur. Les utilisateurs doivent inclure JWT dans l'en-tête de chaque requête. Le serveur peut confirmer l'identité de l'utilisateur en vérifiant le JWT.

🎜2. Contrôle des autorisations🎜🎜Après avoir mis en œuvre l'authentification, nous devons également effectuer un contrôle des autorisations. Nous pouvons créer une classe Permission pour vérifier les autorisations des utilisateurs. 🎜rrreee🎜Dans les contrôleurs des microservices, nous pouvons utiliser les classes AuthController et Permission pour implémenter l'authentification et le contrôle des autorisations. 🎜rrreee🎜Dans le code ci-dessus, nous appelons la méthode login de la classe AuthController pour implémenter la logique de connexion et renvoyer le JWT renvoyé à l'utilisateur. Dans la méthode create, nous vérifions d'abord la validité du JWT via la méthode verifyToken, puis appelons checkPermissiondu Permission code> class > La méthode vérifie si l'utilisateur est autorisé à créer des utilisateurs. 🎜🎜Résumé🎜 La mise en œuvre de l'authentification et du contrôle des autorisations dans les microservices PHP est une partie très importante. Grâce à la combinaison des classes d'authentification JWT et de vérification des autorisations, nous pouvons obtenir une authentification et un contrôle des autorisations sûrs et fiables. Les exemples de code fournis ci-dessus peuvent vous aider à comprendre et à implémenter rapidement ces fonctions. N'oubliez pas que le code doit être testé plus en détail et de manière exhaustive dans un environnement de production, puis étendu et optimisé en fonction des besoins réels. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 apporte plusieurs nouvelles fonctionnalités, améliorations de sécurité et de performances avec une bonne quantité de dépréciations et de suppressions de fonctionnalités. Ce guide explique comment installer PHP 8.4 ou mettre à niveau vers PHP 8.4 sur Ubuntu, Debian ou leurs dérivés. Bien qu'il soit possible de compiler PHP à partir des sources, son installation à partir d'un référentiel APT comme expliqué ci-dessous est souvent plus rapide et plus sécurisée car ces référentiels fourniront les dernières corrections de bogues et mises à jour de sécurité à l'avenir.

Comment configurer Visual Studio Code (VS Code) pour le développement PHP Comment configurer Visual Studio Code (VS Code) pour le développement PHP Dec 20, 2024 am 11:31 AM

Visual Studio Code, également connu sous le nom de VS Code, est un éditeur de code source gratuit – ou environnement de développement intégré (IDE) – disponible pour tous les principaux systèmes d'exploitation. Avec une large collection d'extensions pour de nombreux langages de programmation, VS Code peut être c

7 fonctions PHP que je regrette de ne pas connaître auparavant 7 fonctions PHP que je regrette de ne pas connaître auparavant Nov 13, 2024 am 09:42 AM

Si vous êtes un développeur PHP expérimenté, vous aurez peut-être le sentiment d'y être déjà allé et de l'avoir déjà fait. Vous avez développé un nombre important d'applications, débogué des millions de lignes de code et peaufiné de nombreux scripts pour réaliser des opérations.

Comment analysez-vous et traitez-vous HTML / XML dans PHP? Comment analysez-vous et traitez-vous HTML / XML dans PHP? Feb 07, 2025 am 11:57 AM

Ce tutoriel montre comment traiter efficacement les documents XML à l'aide de PHP. XML (Language de balisage extensible) est un langage de balisage basé sur le texte polyvalent conçu à la fois pour la lisibilité humaine et l'analyse de la machine. Il est couramment utilisé pour le stockage de données et

Expliquez les jetons Web JSON (JWT) et leur cas d'utilisation dans les API PHP. Expliquez les jetons Web JSON (JWT) et leur cas d'utilisation dans les API PHP. Apr 05, 2025 am 12:04 AM

JWT est une norme ouverte basée sur JSON, utilisée pour transmettre en toute sécurité des informations entre les parties, principalement pour l'authentification de l'identité et l'échange d'informations. 1. JWT se compose de trois parties: en-tête, charge utile et signature. 2. Le principe de travail de JWT comprend trois étapes: la génération de JWT, la vérification de la charge utile JWT et l'analyse. 3. Lorsque vous utilisez JWT pour l'authentification en PHP, JWT peut être généré et vérifié, et les informations sur le rôle et l'autorisation des utilisateurs peuvent être incluses dans l'utilisation avancée. 4. Les erreurs courantes incluent une défaillance de vérification de signature, l'expiration des jetons et la charge utile surdimensionnée. Les compétences de débogage incluent l'utilisation des outils de débogage et de l'exploitation forestière. 5. L'optimisation des performances et les meilleures pratiques incluent l'utilisation des algorithmes de signature appropriés, la définition des périodes de validité raisonnablement,

Programme PHP pour compter les voyelles dans une chaîne Programme PHP pour compter les voyelles dans une chaîne Feb 07, 2025 pm 12:12 PM

Une chaîne est une séquence de caractères, y compris des lettres, des nombres et des symboles. Ce tutoriel apprendra à calculer le nombre de voyelles dans une chaîne donnée en PHP en utilisant différentes méthodes. Les voyelles en anglais sont a, e, i, o, u, et elles peuvent être en majuscules ou en minuscules. Qu'est-ce qu'une voyelle? Les voyelles sont des caractères alphabétiques qui représentent une prononciation spécifique. Il y a cinq voyelles en anglais, y compris les majuscules et les minuscules: a, e, i, o, u Exemple 1 Entrée: String = "TutorialSpoint" Sortie: 6 expliquer Les voyelles dans la chaîne "TutorialSpoint" sont u, o, i, a, o, i. Il y a 6 yuans au total

Expliquez la liaison statique tardive en PHP (statique: :). Expliquez la liaison statique tardive en PHP (statique: :). Apr 03, 2025 am 12:04 AM

Liaison statique (statique: :) ​​implémente la liaison statique tardive (LSB) dans PHP, permettant à des classes d'appel d'être référencées dans des contextes statiques plutôt que de définir des classes. 1) Le processus d'analyse est effectué au moment de l'exécution, 2) Recherchez la classe d'appel dans la relation de succession, 3) il peut apporter des frais généraux de performance.

Quelles sont les méthodes PHP Magic (__construct, __ destruct, __ call, __get, __set, etc.) et fournir des cas d'utilisation? Quelles sont les méthodes PHP Magic (__construct, __ destruct, __ call, __get, __set, etc.) et fournir des cas d'utilisation? Apr 03, 2025 am 12:03 AM

Quelles sont les méthodes magiques de PHP? Les méthodes magiques de PHP incluent: 1. \ _ \ _ Construct, utilisé pour initialiser les objets; 2. \ _ \ _ Destruct, utilisé pour nettoyer les ressources; 3. \ _ \ _ Appel, gérer les appels de méthode inexistants; 4. \ _ \ _ GET, Implémentez l'accès à l'attribut dynamique; 5. \ _ \ _ SET, Implémentez les paramètres d'attribut dynamique. Ces méthodes sont automatiquement appelées dans certaines situations, améliorant la flexibilité et l'efficacité du code.

See all articles