OAuth en PHP : créer un serveur d'autorisation de code d'autorisation

WBOY
Libérer: 2023-07-31 14:06:01
original
1691 Les gens l'ont consulté

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 :

  1. Le client initie une demande d'autorisation au serveur d'autorisation.
  2. Le serveur d'autorisation vérifie l'identité de l'utilisateur et demande l'autorisation de l'utilisateur.
  3. Une fois que l'utilisateur a accepté l'autorisation, le serveur d'autorisation délivre le code d'autorisation au client.
  4. Le client utilise le code d'autorisation, l'ID client, la clé client et d'autres informations pour demander un jeton au serveur d'autorisation.
  5. Le serveur d'autorisation vérifie les informations client et le code d'autorisation, et émet un jeton d'accès.
  6. Le client utilise le jeton d'accès pour demander l'accès aux ressources de l'utilisateur depuis le serveur de ressources.

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
Copier après la connexion

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 '授权失败';
}
Copier après la connexion

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`)
);
Copier après la connexion

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
Copier après la connexion

AUTHORIZATION_CODE 替换为收到的授权码,YOUR_CLIENT_IDYOUR_CLIENT_SECRETYOUR_REDIRECT_URI

Le serveur d'autorisation vous demandera de saisir votre nom d'utilisateur et votre mot de passe. Dans cet exemple, le nom d'utilisateur et le mot de passe sont tous deux « admin ». Après avoir entré le nom d'utilisateur et le mot de passe corrects, vous recevrez un code d'autorisation en réponse.

Ensuite, nous pouvons demander un jeton d'accès au serveur d'autorisation en utilisant le code d'autorisation. Utilisez curl ou un autre client HTTP pour faire la requête suivante :

rrreee

Remplacez AUTHORIZATION_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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal