Maison  >  Article  >  développement back-end  >  Middleware Zend Framework : ajoute la prise en charge de la connexion OAuth et OpenID aux applications

Middleware Zend Framework : ajoute la prise en charge de la connexion OAuth et OpenID aux applications

WBOY
WBOYoriginal
2023-07-28 13:09:58911parcourir

Zend Framework Middleware : ajoutez la prise en charge de la connexion OAuth et OpenID aux applications

Dans les applications Internet d'aujourd'hui, l'authentification des utilisateurs est une fonctionnalité essentielle. Afin d'offrir une meilleure expérience utilisateur et une meilleure sécurité, de nombreuses applications choisissent d'intégrer des services de connexion tiers, tels que OAuth et OpenID. Dans Zend Framework, nous pouvons facilement ajouter la prise en charge de la connexion OAuth et OpenID aux applications via un middleware.

Tout d'abord, nous devons installer les modules OAuth et OpenID de Zend Framework. Ils peuvent être installés via Composer :

composer require zendframework/zend-oauth
composer require zendframework/zend-openid

Une fois l'installation terminée, nous pouvons commencer à écrire un middleware pour gérer l'authentification des utilisateurs.

Tout d'abord, nous créons une classe middleware appelée AuthMiddleware :

use PsrHttpMessageRequestInterface;
use PsrHttpMessageResponseInterface;
use ZendDiactorosResponseRedirectResponse;
use ZendStratigilityMiddlewareInterface;
use ZendAuthenticationAuthenticationService;

class AuthMiddleware implements MiddlewareInterface
{
    private $authService;
    
    public function __construct(AuthenticationService $authService)
    {
        $this->authService = $authService;
    }
    
    public function __invoke(RequestInterface $request, ResponseInterface $response, callable $next = null) : ResponseInterface
    {
        // 检查用户是否已认证
        if ($this->authService->hasIdentity()) {
            // 用户已认证,继续请求处理
            return $next($request, $response);
        }
        
        // 用户未认证,重定向到登录页面
        return new RedirectResponse('/login');
    }
}

Dans cette classe middleware, nous utilisons le composant AuthenticationService de Zend Framework pour vérifier si l'utilisateur a été authentifié. Si l'utilisateur a été authentifié, nous poursuivons le traitement de la demande, sinon nous passons à la page de connexion.

Étape suivante, nous créons une classe middleware appelée LoginMiddleware pour gérer la logique de connexion des utilisateurs :

use PsrHttpMessageRequestInterface;
use PsrHttpMessageResponseInterface;
use ZendDiactorosResponseHtmlResponse;
use ZendStratigilityMiddlewareInterface;
use ZendAuthenticationAuthenticationService;
use ZendAuthenticationAdapterOpenId as OpenIdAdapter;

class LoginMiddleware implements MiddlewareInterface
{
    private $authService;
    
    public function __construct(AuthenticationService $authService)
    {
        $this->authService = $authService;
    }
    
    public function __invoke(RequestInterface $request, ResponseInterface $response, callable $next = null) : ResponseInterface
    {
        if ($request->getMethod() === 'POST') {
            // 处理登录表单提交
            $identity = $request->getParsedBody()['identity'];
            $credential = $request->getParsedBody()['credential'];
            
            // 使用OpenID适配器进行认证
            $adapter = new OpenIdAdapter();
            $adapter->setIdentity($identity);
            $adapter->setCredential($credential);
            
            // 进行认证
            $result = $this->authService->authenticate($adapter);
            
            if ($result->isValid()) {
                // 认证成功,存储用户身份信息
                $this->authService->getStorage()->write($result->getIdentity());
                
                // 记录用户登录成功的日志
                // ...
                
                // 重定向到首页
                return new RedirectResponse('/');
            }
            
            // 认证失败,返回登录页面并显示错误信息
            return new HtmlResponse($this->renderLoginForm(['error' => '用户名或密码错误']));
        }
        
        // 显示登录页面
        return new HtmlResponse($this->renderLoginForm());
    }
    
    private function renderLoginForm(array $params = []) : string
    {
        // 渲染登录表单模板,可使用Twig等模板引擎
        // ...
    }
}

Dans cette classe middleware, nous utilisons OpenIdAdapter de Zend Framework pour l'authentification des utilisateurs. Après une authentification réussie, nous stockons les informations d'identité de l'utilisateur et pouvons effectuer certaines opérations supplémentaires, telles que l'enregistrement d'un journal de connexion utilisateur réussie.

Enfin, nous ajoutons ces middlewares à l'application Zend Framework :

use ZendStratigilityMiddlewarePipe;
use ZendAuthenticationAuthenticationService;
use ZendDiactorosServerRequestFactory;

// 创建Zend Framework应用程序实例
$app = new MiddlewarePipe();

// 创建AuthenticationService实例
$authService = new AuthenticationService();

// 添加OAuth和OpenID登录中间件
$app->pipe(new AuthMiddleware($authService));
$app->pipe(new LoginMiddleware($authService));

// 处理请求
$response = $app(ServerRequestFactory::fromGlobals(), new Response());

// 发送响应
$responseEmitter = new ResponseSapiEmitter();
$responseEmitter->emit($response);

Dans le code ci-dessus, nous créons une instance MiddlewarePipe et ajoutons les middleware AuthMiddleware et LoginMiddleware. Nous utilisons ensuite ServerRequestFactory de Zend Framework pour créer une instance de requête et exécuter l'application en traitant la requête et en envoyant une réponse.

Avec les étapes ci-dessus, nous avons ajouté avec succès la prise en charge de la connexion OAuth et OpenID à l'application. Les utilisateurs peuvent désormais utiliser des services de connexion tiers pour s'authentifier et bénéficier d'une meilleure expérience utilisateur et d'une meilleure sécurité.

L'exemple ci-dessus n'est qu'une simple démonstration, et il peut y avoir plus d'opérations de personnalisation et d'intégration en utilisation réelle. Cependant, grâce à la flexibilité et à la facilité d'utilisation du middleware Zend Framework, nous pouvons facilement réaliser ces opérations et ajouter diverses fonctionnalités à l'application.

Le middleware est l'une des fonctionnalités puissantes de Zend Framework, qui fournit un moyen concis et extensible de gérer les requêtes et les réponses HTTP. Qu'il s'agisse d'authentification, d'autorisation, de journalisation ou d'autres fonctions, le middleware peut nous aider à gérer cela de manière rapide et flexible. Si votre application nécessite une authentification utilisateur, essayez d'utiliser un middleware pour ajouter la prise en charge de la connexion OAuth et OpenID !

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:
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