PHP での OAuth: 認可コード認可サーバーの作成
OAuth は、サードパーティ アプリケーションがユーザー リソースにアクセスすることを認可するためのオープン スタンダードです。これは HTTP プロトコルに基づいて構築されており、ユーザーをリソース サーバーから分離し、より安全で信頼性の高い承認プロセスを実装します。この記事ではPHPで認可コード認可サーバーを作成する方法を紹介します。
認可コード認可は、OAuth2 で最も一般的に使用される認可タイプです。そのワークフローは次のとおりです:
まず、「bshaffer/oauth2-server-php」などの一般的な PHP OAuth2 ライブラリをインストールする必要があります。このライブラリは、Composer を使用してプロジェクトに追加できます。
composer require bshaffer/oauth2-server-php
次に、認可コード認可サーバーとしてindex.phpファイルを作成します。
<?php require_once 'vendor/autoload.php'; // 创建一个PDO实例 $dsn = "mysql:dbname=testdb;host=localhost"; $username = "root"; $password = ""; $pdo = new PDO($dsn, $username, $password); // 创建一个存储库实例 $storage = new OAuth2StoragePdo($pdo); // 创建一个授权服务器实例 $server = new OAuth2Server($storage); // 添加支持的授权类型 $server->addGrantType(new OAuth2GrantTypeAuthorizationCode($storage)); // 处理授权请求 $request = OAuth2Request::createFromGlobals(); $response = new OAuth2Response(); if (!$server->validateAuthorizeRequest($request, $response)) { $response->send(); die; } // 显示授权页面 if (empty($_POST)) { exit(' <form method="post"> <label for="username">Username:</label> <input type="text" id="username" name="username"><br><br> <label for="password">Password:</label> <input type="password" id="password" name="password"><br><br> <input type="submit" value="Authorize"> </form> '); } // 处理授权请求 $is_authorized = ($_POST['username'] == 'admin' && $_POST['password'] == 'admin'); $server->handleAuthorizeRequest($request, $response, $is_authorized); if ($is_authorized) { $response->send(); } else { echo '授权失败'; }
次に、クライアント情報を保存するためのデータベーステーブルを作成する必要があります。 MySQL データベースで次の SQL ステートメントを実行します。
CREATE TABLE `oauth_clients` ( `client_id` varchar(80) COLLATE utf8_unicode_ci NOT NULL, `client_secret` varchar(80) COLLATE utf8_unicode_ci NOT NULL, `redirect_uri` varchar(2000) COLLATE utf8_unicode_ci NOT NULL DEFAULT '', `grant_types` varchar(80) COLLATE utf8_unicode_ci DEFAULT NULL, `scope` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL, `user_id` varchar(80) COLLATE utf8_unicode_ci DEFAULT NULL, PRIMARY KEY (`client_id`) );
これで、認証コードを使用してサーバーをテスト用に認証できるようになります。
ブラウザで http://localhost/index.php?response_type=code&client_id=YOUR_CLIENT_ID&redirect_uri=YOUR_REDIRECT_URI&scope=SCOPE
にアクセスし、YOUR_CLIENT_ID
をクライアントのエンド ID に置き換えます。 YOUR_REDIRECT_URI
をリダイレクト URI に置き換え、SCOPE
をアクセスするリソース スコープに置き換えます。
認可サーバーはユーザー名とパスワードの入力を求めます。この例では、ユーザー名とパスワードは両方とも「admin」です。正しいユーザー名とパスワードを入力すると、応答として認証コードを受け取ります。
次に、認可コードを使用して、認可サーバーにアクセス トークンをリクエストできます。 curl または別の HTTP クライアントを使用して、次のリクエストを実行します。
curl -X POST -d "grant_type=authorization_code&code=AUTHORIZATION_CODE&client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET&redirect_uri=YOUR_REDIRECT_URI" http://localhost/token.php
AUTHORIZATION_CODE
を、受信した認証コード YOUR_CLIENT_ID
、 YOUR_CLIENT_SECRET
に置き換えます。 YOUR_REDIRECT_URI
は、クライアント ID、クライアント シークレット、およびリダイレクト URI に置き換えられます。
すべてが正常であれば、応答としてアクセス トークンを受け取ります。
上記は、PHP で認証コード認証サーバーを作成する詳細な手順です。 OAuth を使用すると、より安全で信頼性の高い認証プロセスが提供され、ユーザーのデータとプライバシーが保護されます。この記事が OAuth 認証の理解と使用に役立つことを願っています。
以上がPHP の OAuth: 認可コード認可サーバーを作成するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。