ホームページ >PHPフレームワーク >ThinkPHP >ThinkPHP6 を使用して OAuth2 認証を実装する方法

ThinkPHP6 を使用して OAuth2 認証を実装する方法

王林
王林オリジナル
2023-06-21 08:01:241367ブラウズ

Web アプリケーションでは、OAuth2 認証が一般的な標準となっており、ユーザーは認可サーバーを使用して、サードパーティのアプリケーションが保護されたリソースにアクセスして操作できるようになります。 ThinkPHP6 は、あらゆる種類のアプリケーションに適した高速で最新の PHP フレームワークで、OAuth2 認証を実装するための使いやすく強力なツールを提供します。この記事では、ThinkPHP6 を使用して OAuth2 認証を実装する方法を検討します。

ステップ 1: ThinkPHP6 をインストールする

ThinkPHP6 の使用を開始するには、まず Composer をローカル環境にインストールする必要があります。プロジェクト ディレクトリでターミナルまたはコマンド ライン ウィンドウを開き、次のコマンドを実行します。

composer create-project topthink/think oauth2

これにより、プロジェクト ディレクトリに oauth2 という新しいディレクトリが作成され、必要な ThinkPHP6 コンポーネントがすべてインストールされます。

ステップ 2: PHP-JWT をインストールする

ThinkPHP6 OAuth2 認証は、JSON Web トークン (JWT) を生成および検証するための PHP ライブラリである PHP-JWT に依存します。その前に、まず PHP-JWT ライブラリをインストールする必要があります。ターミナルまたはコマンド ライン ウィンドウで、次のコマンドを実行します。

composer require firebase/php-jwt

ステップ 3: OAuth2 サービス プロバイダーを作成する

OAuth2 サービス プロバイダーを使用すると、サードパーティ アプリケーションが承認 H を通じて保護領域にアクセスできるようになります。 。 ThinkPHP6 では、OAuth2 サービス プロバイダーは抽象クラス thinkoauthproviderAbstractProvider に基づいて実装されます。 OAuth2 サービス プロバイダーを作成し、次のメソッドを実装する必要があります。

  • getClientId(): OAuth2 クライアント ID を返します。
  • getClientSecret(): OAuth2 クライアント シークレットを返します。
  • getAuthorizationUrl(): 認可 URL を返します
  • validateAuthorizationCode(): 認可コードを検証します
  • refreshToken(): アクセス トークンを更新します
次のは、単純な OAuth2 サービス プロバイダーの例です。

<?php

namespace appoauthprovider;

use FirebaseJWTJWT;
use thinkoauthproviderAbstractProvider;

class SampleProvider extends AbstractProvider
{
    public function getClientId(): string
    {
        return 'YOUR_CLIENT_ID';
    }

    public function getClientSecret(): string
    {
        return 'YOUR_CLIENT_SECRET';
    }

    public function getAuthorizationUrl(): string
    {
        $authUrl = 'https://your.auth.server/auth?' .
            'client_id=' . $this->getClientId() .
            '&redirect_uri=' . urlencode($this->getRedirectUri()) .
            '&response_type=code';

        return $authUrl;
    }

    public function validateAuthorizationCode(string $code): ?array
    {
        $payload = JWT::decode($code, $this->getClientSecret(), array('HS256'));

        // Check if payload is valid

        return $payload;
    }

    public function refreshToken(string $refreshToken): ?array
    {
        // Implement refresh token logic

        return null;
    }
}

ステップ 4: OAuth2 認証ミドルウェアを実装する

次に、アプリケーションに OAuth2 認証ミドルウェアを実装する必要があります。 ThinkPHP6 では、ミドルウェアは抽象クラス thinkmiddlewareMiddleware および thinksessionSessionManager に基づいて実装されます。ミドルウェアを作成し、次のメソッドを実装する必要があります:

    handle( hinkRequest $request, Closure $next): HTTP リクエストを処理します
以下は単純な OAuth2 認証です。ミドルウェアの例:

<?php

namespace appmiddleware;

use appoauthproviderSampleProvider;
use FirebaseJWTJWT;

class OAuth2Middleware
{
    public function handle(    hinkRequest $request, Closure $next)
    {
        $provider = new SampleProvider();

        // Check if access token exists

        $accessToken = $request->header('Authorization');

        if (!$accessToken) {
            // Redirect to auth server

            $authUrl = $provider->getAuthorizationUrl();
            return redirect($authUrl);
        }

        // Verify access token

        $jwtSecret = $provider->getClientSecret();
        $verify = JWT::decode($accessToken, $jwtSecret, array('HS256'));

        // Check if token is valid

        if (!$verify) {
            return json(array(
                'error' => 'Invalid token',
            ));
        }

        // Set user in session

        $session =     hinkacadeSession::get('user');
        $session['id'] = $verify['id'];
            hinkacadeSession::set('user', $session);

        // Go to next middleware

        return $next($request);
    }
}

上記のミドルウェア実装ロジックは次のとおりです:

    まず、OAuth2 サービス プロバイダーをインスタンス化します。
  • HTTP リクエストにアクセス トークンが存在するかどうかを確認します。
  • 存在しない場合は、ユーザーを OAuth2 認証サーバーにリダイレクトしてアクセス トークンを取得します。
  • アクセス トークンが存在する場合は、アクセス トークンが有効かどうかを確認します。
  • トークンが無効な場合は、エラー応答が返されます。
  • トークンが有効な場合は、ユーザー セッションをアプリケーションに記録し、次のミドルウェアに進みます。
ステップ 5: OAuth2 認証ミドルウェアを登録する

次に、OAuth2 認証ミドルウェアをグローバル ミドルウェアとしてアプリケーションに登録する必要があります。 configmiddleware.php ファイルに、次のコードを追加します。

<?php

return [
    'oauth2' => ppmiddlewareOAuth2Middleware::class,
];

これで、ThinkPHP6 を使用して OAuth2 認証を実装する手順がすべて完了しました。アプリケーションで OAuth2 認証ミドルウェアを使用すると、承認されたリソースへのアクセスを必要とするルートまたはコントローラーのアクションを保護できます。 OAuth2 認証ミドルウェアを使用すると、トークンベースの認証メカニズムを使用して、ユーザー データと機密性の高い API エンドポイントを保護できます。 ThinkPHP6 が提供する使いやすさと強力なパフォーマンスを活用して、安全で高性能な Web アプリケーションを開発します。

以上がThinkPHP6 を使用して OAuth2 認証を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。