Heim  >  Artikel  >  Backend-Entwicklung  >  OAuth in PHP: Erstellen Sie einen Autorisierungscode-Autorisierungsserver

OAuth in PHP: Erstellen Sie einen Autorisierungscode-Autorisierungsserver

WBOY
WBOYOriginal
2023-07-31 14:05:191676Durchsuche

OAuth in PHP: Erstellen Sie einen Autorisierungscode-Autorisierungsserver.

OAuth ist ein offener Standard für die Autorisierung von Drittanbieteranwendungen für den Zugriff auf die Ressourcen des Benutzers. Es basiert auf dem HTTP-Protokoll, das Benutzer vom Ressourcenserver isoliert und einen sichereren und zuverlässigeren Autorisierungsprozess implementiert. In diesem Artikel wird erläutert, wie Sie einen Autorisierungscode-Autorisierungsserver in PHP erstellen.

Die Autorisierungscode-Autorisierung ist der am häufigsten verwendete Autorisierungstyp in OAuth2. Der Arbeitsablauf ist wie folgt:

  1. Der Client initiiert eine Autorisierungsanfrage an den Autorisierungsserver.
  2. Der Autorisierungsserver überprüft die Identität des Benutzers und fordert vom Benutzer eine Autorisierung an.
  3. Nachdem der Benutzer der Autorisierung zugestimmt hat, gibt der Autorisierungsserver den Autorisierungscode an den Client aus.
  4. Der Client verwendet den Autorisierungscode, die Client-ID, den Client-Schlüssel und andere Informationen, um ein Token vom Autorisierungsserver anzufordern.
  5. Der Autorisierungsserver überprüft die Clientinformationen und den Autorisierungscode und stellt ein Zugriffstoken aus.
  6. Der Client verwendet das Zugriffstoken, um vom Ressourcenserver Zugriff auf die Ressourcen des Benutzers anzufordern.

Zuerst müssen wir eine beliebte PHP-OAuth2-Bibliothek installieren, wie zum Beispiel „bshaffer/oauth2-server-php“. Diese Bibliothek kann mit Composer zu Ihrem Projekt hinzugefügt werden.

composer require bshaffer/oauth2-server-php

Als nächstes erstellen wir eine index.php-Datei als unseren Autorisierungscode-Autorisierungsserver:

<?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 '授权失败';
}

Als nächstes müssen wir eine Datenbanktabelle zum Speichern von Kundeninformationen erstellen. Führen Sie die folgende SQL-Anweisung in der MySQL-Datenbank aus:

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`)
);

Jetzt können wir den Server mithilfe des Autorisierungscodes zum Testen autorisieren.

Besuchen Sie http://localhost/index.php?response_type=code&client_id=YOUR_CLIENT_ID&redirect_uri=YOUR_REDIRECT_URI&scope=SCOPE im Browser und ersetzen Sie YOUR_CLIENT_ID durch Ihre Client-ID, ersetzen Sie YOUR_REDIRECT_URI mit Ihrem Weiterleitungs-URI und SCOPE mit dem Ressourcenbereich, auf den Sie zugreifen möchten. 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_IDYOUR_CLIENT_SECRETYOUR_REDIRECT_URI

Der Autorisierungsserver fordert Sie auf, Ihren Benutzernamen und Ihr Passwort einzugeben. In diesem Beispiel lauten sowohl Benutzername als auch Passwort „admin“. Nach Eingabe des korrekten Benutzernamens und Passworts erhalten Sie als Antwort einen Autorisierungscode.

Als nächstes können wir mithilfe des Autorisierungscodes ein Zugriffstoken vom Autorisierungsserver anfordern. Verwenden Sie Curl oder einen anderen HTTP-Client, um die folgende Anfrage zu stellen:

rrreee

Ersetzen Sie AUTHORIZATION_CODE durch den Autorisierungscode, den Sie erhalten haben, YOUR_CLIENT_ID , YOUR_CLIENT_SECRET und YOUR_REDIRECT_URI durch Ihre Client-ID, Ihr Client-Geheimnis und Ihren Umleitungs-URI. 🎜🎜Wenn alles in Ordnung ist, erhalten Sie als Antwort ein Zugriffstoken. 🎜🎜Das Obige sind die detaillierten Schritte zum Erstellen eines Autorisierungscode-Autorisierungsservers in PHP. Die Verwendung von OAuth kann einen sichereren und zuverlässigeren Autorisierungsprozess ermöglichen und Benutzerdaten und Privatsphäre schützen. Ich hoffe, dieser Artikel kann Ihnen helfen, die OAuth-Autorisierung zu verstehen und zu verwenden. 🎜

Das obige ist der detaillierte Inhalt vonOAuth in PHP: Erstellen Sie einen Autorisierungscode-Autorisierungsserver. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn