サードパーティ認証を使用して PHP にログインするにはどうすればよいですか?

王林
リリース: 2023-05-13 08:16:01
オリジナル
1160 人が閲覧しました

今日のソーシャル時代では、ユーザーは従来の登録およびログイン方法に満足できなくなり、すでに登録されているソーシャル アカウントを使用して直接ログインすることを望んでいます。この需要を満たすために、多くの Web サイトがサードパーティのログイン アクセスを提供しています。 PHP では、OAuth プロトコルを介してサードパーティの承認されたログインを実装できます。以下でそれを見てみましょう。

OAuth プロトコルはオープン標準であり、主にユーザーのアカウント番号とパスワードを提供せずにサードパーティ プラットフォームへのアクセスを承認するために使用されます。 OAuth プロトコルを通じて、サードパーティのプラットフォームはユーザーに代わって他のプラットフォームにデータを要求し、異なるプラットフォーム間でのデータ共有を実現します。

PHP では、一般に OAuth 認証ログインを実装するための次の手順があります。

  1. サードパーティ プラットフォームの API キーとキー文字列を適用する

OAuth 認証ログインを実行する前に、サードパーティ プラットフォームで API キーとキー文字列を申請する必要があります。 Sina Weibo を例に挙げると、Sina Open Platform で API キーとキー文字列を申請する必要があります。アプリケーションが成功すると、次の情報を取得できます。

App Key: アプリケーションの一意の識別子
App Secret: アプリケーションの秘密キー
リダイレクト URI: に使用される URIコールバック。これは、Consistent を適用するときに入力する必要があります。

  1. OAuth クライアントの実装

PHP では、サードパーティの OAuth クライアントを使用して、承認されたログインを迅速に実装できます。関数。ここでは、Github を例として、サードパーティの OAuth クライアントの使用方法を紹介します。ここでは、PHP League の OAuth2 Client を使用して、Github 認証ログインを実装します。

まず、PHP リーグの OAuth2 クライアント ライブラリをプロジェクトにインストールする必要があります。これは、composer を使用してインストールできます。

composer require league/oauth2-client
ログイン後にコピー

インストールが完了したら、Github の OAuth クライアントをインスタンス化する必要があります。 code を入力し、前の手順で適用した API キーとキー文字列を渡します。

$provider = new LeagueOAuth2ClientProviderGithub([
    'clientId'          => 'CLIENT_ID',
    'clientSecret'      => 'CLIENT_SECRET',
    'redirectUri'       => 'REDIRECT_URI',
    'scopes'            => ['user'],
]);
ログイン後にコピー

このうち、CLIENT_ID と CLIENT_SECRET は前の手順で適用した API キーとキー文字列で、REDIRECT_URI はコールバック URI です。

  1. 認証コードの取得

OAuth 認証ログインの前に、サードパーティ プラットフォームにリクエストを送信して認証コードを取得する必要があります。 Github を例に取ると、次のコードを使用してユーザーを Github 認証ページにリダイレクトできます:

// Step 1. Get authorization code
$options = [
    'state' => 'OPTIONAL_CUSTOM_CONFIGURED_STATE',
     // ...
];
$authUrl = $provider->getAuthorizationUrl($options);

// Store state so that the callback can verify the response
$_SESSION['oauth2state'] = $provider->getState();

// Redirect the user to the authorization URL
header('Location: '.$authUrl);
exit;
ログイン後にコピー

Github 認証ページをリクエストするとき、$options 配列を渡して認可の範囲とその他の情報を指定します。 。 $_SESSION['oauth2state'] は、返された状態値を保存するために使用されます。

  1. アクセス トークンの取得

ユーザーがサードパーティ認証に合格した後、コールバック URI を通じてアクセス トークンを取得する必要があります。 Github を例に挙げると、次のコードを使用してアクセス トークンを取得できます。

// Step 2. Get an access token using the authorization code grant
if (isset($_GET['code']) && isset($_GET['state'])) {
    if ($_GET['state'] !== $_SESSION['oauth2state']) {
        unset($_SESSION['oauth2state']);
        exit('State error');
    }

    // Get an access token using the authorization code grant
    try {
        $token = $provider->getAccessToken('authorization_code', [
            'code' => $_GET['code']
        ]);

        // Optional: Store the token
        $_SESSION['access_token'] = $token->getToken();
    } catch (LeagueOAuth2ClientProviderExceptionIdentityProviderException $e) {
        exit('Token error: '.$e->getMessage());
    }

    header('Location: '.$_SERVER['PHP_SELF']);
    exit;
}
ログイン後にコピー

アクセス トークンを取得した後、後で使用できるようにトークンを SESSION に保存できます。

  1. ユーザー情報の取得

アクセス トークンを取得した後、OAuth クライアントを通じてユーザー情報を取得できます。 Github を例に挙げると、次のコードを使用してユーザー情報を取得できます。

if (isset($_SESSION['access_token'])) {
    $token = new LeagueOAuth2ClientTokenAccessToken(['access_token' => $_SESSION['access_token']]);

    try {
        $user = $provider->getResourceOwner($token);
        echo 'Hello '.$user->getName();
    } catch (LeagueOAuth2ClientProviderExceptionIdentityProviderException $e) {
        exit('Resource owner error: '.$e->getMessage());
    }
}
ログイン後にコピー

ユーザー情報を取得した後、登録、ログイン、パーソナライズ、その他の操作など、必要に応じて処理できます。

上記は、PHP でサードパーティ認証ログインを実装するための基本的なプロセスです。もちろん、実際のアプリケーションでは、CSRF 攻撃の防止、ユーザー データの同期など、多くのセキュリティおよびビジネス上の問題を考慮する必要があります。しかし、上記の基本的なプロセスを経ることで、OAuth 認証ログインについての理解がより深まると思います。

以上がサードパーティ認証を使用して PHP にログインするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート