OAuth en PHP : Créer un serveur d'autorisation de code d'autorisation
OAuth est un standard ouvert permettant d'autoriser des applications tierces à accéder aux ressources de l'utilisateur. Il est construit sur le protocole HTTP, qui isole les utilisateurs du serveur de ressources et met en œuvre un processus d'autorisation plus sécurisé et fiable. Cet article explique comment créer un serveur d'autorisation de code d'autorisation en PHP.
L'autorisation par code d'autorisation est le type d'autorisation le plus couramment utilisé dans OAuth2. Son flux de travail est le suivant :
Tout d'abord, nous devons installer une bibliothèque PHP OAuth2 populaire, telle que "bshaffer/oauth2-server-php". Cette bibliothèque peut être ajoutée à votre projet à l'aide de Composer.
composer require bshaffer/oauth2-server-php
Ensuite, nous créons un fichier index.php comme serveur d'autorisation de code d'autorisation :
<?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 '授权失败'; }
Ensuite, nous devons créer une table de base de données pour stocker les informations du client. Exécutez l'instruction SQL suivante dans la base de données MySQL :
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`) );
Nous pouvons maintenant autoriser le serveur en utilisant le code d'autorisation pour les tests.
Visitez http://localhost/index.php?response_type=code&client_id=YOUR_CLIENT_ID&redirect_uri=YOUR_REDIRECT_URI&scope=SCOPE
dans le navigateur et remplacez YOUR_CLIENT_ID
par votre identifiant client, remplacez YOUR_REDIRECT_URI
avec votre URI de redirection et SCOPE
avec la portée de la ressource à laquelle vous souhaitez accéder. 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
rrreee
RemplacezAUTHORIZATION_CODE
par le code d'autorisation que vous avez reçu, YOUR_CLIENT_ID
, YOUR_CLIENT_SECRET
et YOUR_REDIRECT_URI par votre ID client, votre secret client et votre URI de redirection. 🎜🎜Si tout va bien, vous recevrez un jeton d'accès en réponse. 🎜🎜Ci-dessus sont les étapes détaillées pour créer un serveur d'autorisation de code d'autorisation en PHP. L'utilisation d'OAuth peut fournir un processus d'autorisation plus sécurisé et fiable, protégeant les données et la confidentialité des utilisateurs. J'espère que cet article pourra vous aider à comprendre et à utiliser l'autorisation OAuth. 🎜Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!