>  기사  >  PHP 프레임워크  >  JWT 인증을 위해 Hyperf 프레임워크를 사용하는 방법

JWT 인증을 위해 Hyperf 프레임워크를 사용하는 방법

WBOY
WBOY원래의
2023-10-24 12:36:231408검색

JWT 인증을 위해 Hyperf 프레임워크를 사용하는 방법

JWT 인증을 위해 Hyperf 프레임워크를 사용하는 방법

소개:
Hyperf는 Swoole 기반의 고성능 코루틴 프레임워크로, 풍부한 기능과 유연한 확장성을 제공합니다. JWT(JSON Web Token)는 정보를 인증하고 전송하기 위한 개방형 표준입니다. 이 기사에서는 Hyperf 프레임워크에서 JWT 인증을 사용하는 방법을 소개하고 구체적인 코드 예제를 제공합니다.

1. 종속성 패키지 설치
먼저 hyperf/jwt 및 lcobucci/jwt 종속성 패키지를 설치해야 합니다. Composer를 통해 설치할 수 있으며 터미널을 열고 다음 명령을 실행합니다.

composer require hyperf/jwt lcobucci/jwt

2. 인증 정보 구성
Hyperf 프레임워크에서는 JWT 인증에 필요한 관련 정보를 구성해야 합니다. config/autoload/jwt.php 파일을 열고 다음 구성 항목을 추가합니다. config/autoload/jwt.php文件,添加如下配置项:

<?php

return [
    'default' => [
        'valid_seconds' => env('JWT_VALID_SECONDS', 3600), // Token有效期
        'secret' => env('JWT_SECRET', 'your-secret-key'), // 对称加密密钥
        'refresh_ttl' => env('JWT_REFRESH_TTL', 20160), // Token刷新有效期
        'password_key' => env('JWT_PASSWORD_KEY', 'password'), // 密码字段名称
        'blacklist_enabled' => env('JWT_BLACKLIST_ENABLED', true), // Token黑名单启用
        'blacklist_grace_period' => env('JWT_BLACKLIST_GRACE_PERIOD', 60), // Token宽限期
        'claim' => [], // 自定义Claims
    ],
];

三、生成和解析JWT Token
首先,我们需要生成JWT Token。在控制器中引入HyperfJwtJwt类,并通过make()方法生成Token。示例代码如下:

<?php

declare(strict_types=1);

namespace AppController;

use HyperfDiAnnotationInject;
use PsrHttpMessageResponseInterface;

class AuthController extends AbstractController
{
    /**
     * @Inject
     * @var HyperfJwtJwt
     */
    private $jwt;

    public function login(): ResponseInterface
    {
        // 对用户进行验证,验证通过后生成Token
        $userId = 1;
        $token = $this->jwt->make(['user_id' => $userId]);

        return $this->response->json([
            'token' => $token->toString(),
            'expires_at' => $token->getClaim('exp'),
        ]);
    }
}

接下来,我们需要在中间件中验证JWT Token并解析出用户信息。在中间件中引入HyperfJwtMiddlewareJwtMiddleware类,并使用handle()方法进行验证和解析。示例代码如下:

<?php

declare(strict_types=1);

namespace AppMiddleware;

use HyperfDiAnnotationInject;
use HyperfHttpServerContractRequestInterface;
use HyperfHttpServerContractResponseInterface as HttpResponse;
use HyperfUtilsContext;
use HyperfUtilsStr;
use HyperfJwtExceptionTokenValidException;
use HyperfJwtJwtInterface;
use PsrContainerContainerInterface;

class JwtMiddleware
{
    /**
     * @Inject
     * @var HyperfJwtJwt
     */
    private $jwt;

    /**
     * @var JwtInterface
     */
    private $jwtFactory;

    /**
     * @var RequestInterface
     */
    private $request;

    /**
     * @var HttpResponse
     */
    private $response;

    public function __construct(ContainerInterface $container, JwtInterface $jwt, RequestInterface $request, HttpResponse $response)
    {
        $this->jwtFactory = $jwt;
        $this->request = $request;
        $this->response = $response;
    }

    public function handle($request, Closure $next)
    {
        $token = Str::replaceFirst('Bearer ', '', $this->request->header('Authorization')); // 从Header中获取Token
        if (empty($token)) {
            throw new TokenValidException('Token not provided');
        }

        try {
            $token = $this->jwtFactory->parse($token); // 解析Token

            $claims = $token->claims(); // 获取Token中的声明
            Context::set('user_id', $claims->get('user_id')); // 设置用户ID到上下文
        } catch (TokenValidException $e) {
            throw new TokenValidException('Invalid token', $e->getCode(), $e);
        }

        return $next($request);
    }
}

四、使用中间件进行认证
在路由中使用中间件进行JWT认证。打开config/routes.php文件,添加如下路由和中间件配置项:

<?php

use AppMiddlewareJwtMiddleware;

Router::addGroup('/api', function () {
    Router::post('/login', 'AppControllerAuthController@login');

    // 需要认证的路由
    Router::addGroup('/auth', function () {
        Router::get('/info', 'AppControllerAuthController@info');
    }, ['middleware' => [JwtMiddleware::class]]);
});

在上面的示例中,AppControllerAuthController@inforrreee

3. JWT 토큰 생성 및 구문 분석

먼저 JWT 토큰을 생성해야 합니다. HyperfJwtJwt 클래스를 컨트롤러에 도입하고 make() 메서드를 통해 토큰을 생성합니다. 샘플 코드는 다음과 같습니다.
rrreee

다음으로 미들웨어에서 JWT 토큰을 검증하고 사용자 정보를 파싱해야 합니다. HyperfJwtMiddlewareJwtMiddleware 클래스를 미들웨어에 도입하고 handle() 메서드를 사용하여 확인 및 파싱을 수행합니다. 샘플 코드는 다음과 같습니다. 🎜rrreee🎜 4. 인증을 위해 미들웨어를 사용합니다. 🎜 JWT 인증을 위해 라우팅에 미들웨어를 사용합니다. config/routes.php 파일을 열고 다음 라우팅 및 미들웨어 구성 항목을 추가합니다. 🎜rrreee🎜위 예에서 AppControllerAuthController@info는 인증이 필요한 인터페이스입니다. 이 인터페이스는 유효한 JWT 토큰을 가지고 있는 경우에만 성공적으로 액세스할 수 있습니다. 🎜🎜결론: 🎜이 문서에서는 JWT 인증을 위해 Hyperf 프레임워크를 사용하는 방법을 소개하고 관련 구성 및 코드 예제를 제공합니다. JWT 인증을 통해 Hyperf 프레임워크에서 더 높은 보안 및 사용자 확인 기능을 달성할 수 있습니다. JWT 인증을 위해 Hyperf 프레임워크를 사용할 때 이 기사가 도움이 되기를 바랍니다. 🎜

위 내용은 JWT 인증을 위해 Hyperf 프레임워크를 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.