首頁  >  文章  >  php框架  >  如何使用Hyperf框架進行介面鑑權

如何使用Hyperf框架進行介面鑑權

王林
王林原創
2023-10-25 09:31:491486瀏覽

如何使用Hyperf框架進行介面鑑權

如何使用Hyperf框架進行介面鑑權

鑑權是Web應用程式開發中一個重要的安全性問題,它可以保護我們的介面不被未授權的使用者存取。在使用Hyperf框架開發介面時,我們可以利用Hyperf提供的鑑權機制來實作介面鑑權。本文將介紹如何使用Hyperf框架進行介面鑑權,並提供具體的程式碼範例。

一、理解介面鑑權

介面鑑權是透過驗證使用者的身份訊息,確定使用者是否有權存取介面的過程。常見的鑑權方式有基於Token的鑑權和基於角色的鑑權。

基於Token的鑑權是透過在使用者登入後頒發一個Token,在每次請求介面時,使用者需要在請求的頭部中攜帶該Token,服務端驗證該Token的有效性,確定使用者身分是否合法。

基於角色的鑑權是透過為使用者指派不同的角色和權限,當使用者要求介面時,服務端會根據使用者的角色來驗證其是否有權存取該介面。

二、設定Hyperf框架介面鑑權

  1. 安裝jwt元件

Hyperf框架提供了Hyperf/Jwt元件來支援介面鑑權,我們首先需要在專案中安裝該元件。在專案根目錄下執行以下命令:

composer require hyperf/jwt
  1. 配置中間件

Hyperf框架中間件可以實現在請求到達控制器之前或之後進行一些處理。我們可以透過配置中間件來實現介面鑑權。

在config/autoload/middleware.php檔案中加入以下程式碼:

return [
    'http' => [
        AppMiddlewareJwtAuthMiddleware::class,
    ],
];
  1. 編寫中間件

在app/Middleware目錄下建立JwtAuthMiddleware .php文件,寫如下程式碼:

<?php

declare(strict_types=1);

namespace AppMiddleware;

use HyperfDiAnnotationInject;
use HyperfHttpServerContractRequestInterface;
use HyperfHttpServerContractResponseInterface;
use HyperfUtilsContext;
use HyperfUtilsExceptionParallelExecutionException;
use Phper666JwtAuthJwt;

class JwtAuthMiddleware implements MiddlewareInterface
{
    /**
     * @Inject
     * @var Jwt
     */
    protected $jwt;

    /**
     * @Inject
     * @var RequestInterface
     */
    protected $request;

    /**
     * @Inject
     * @var ResponseInterface
     */
    protected $response;

    /**
     * 接口鉴权逻辑处理
     */
    public function process(RequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
    {
        if (!$this->jwt->checkToken()) {
            return $this->response->json([
                'code' => 401,
                'message' => 'Unauthorized',
            ]);
        }
        
        // 鉴权通过,将用户信息保存在Context中,后续控制器可通过Context获取用户信息
        Context::set('user', $this->jwt->getParserData());

        return $handler->handle($request);
    }
}

三、使用Hyperf進行介面鑑權

  1. 登入產生Token
##在登入介面中,用戶驗證通過後,使用Hyperf/Jwt元件產生Token,並傳回給前端,前端每次要求介面時需要帶上該Token。範例如下:

<?php

declare(strict_types=1);

namespace AppController;

use HyperfHttpServerAnnotationAutoController;
use HyperfDiAnnotationInject;
use Phper666JwtAuthJwt;

/**
 * @AutoController
 */
class AuthController
{
    /**
     * @Inject
     * @var Jwt
     */
    protected $jwt;

    public function login()
    {
        // 获取用户信息
        $userInfo = [
            'user_id' => 1,
            'username' => 'admin',
        ];

        // 生成Token
        $token = $this->jwt->getToken($userInfo);

        // 返回Token给前端
        return [
            'code' => 200,
            'message' => 'success',
            'data' => [
                'token' => $token,
            ],
        ];
    }
}

    介面鑑權
在需要鑑權的介面中,我們可以透過Context取得使用者信息,並判斷使用者是否有權存取該接口。範例如下:

<?php

declare(strict_types=1);

namespace AppController;

use HyperfHttpServerAnnotationAutoController;
use HyperfDiAnnotationInject;
use HyperfUtilsContext;

/**
 * @AutoController
 */
class UserController
{
    public function getUserInfo()
    {
        // 从Context中获取用户信息
        $userInfo = Context::get('user');

        // 根据用户信息查询用户
        // ...

        // 返回用户信息给前端
        return [
            'code' => 200,
            'message' => 'success',
            'data' => $userInfo,
        ];
    }
}

透過上述步驟,我們就可以在Hyperf框架中實作介面鑑權了。在需要鑑權的介面中,使用中間件對請求進行鑑權驗證,然後根據鑑權結果進行相應的處理。這樣可以有效保障介面的安全性,確保只有授權的使用者可以存取介面。

以上是如何使用Hyperf框架進行介面鑑權的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn