Heim > Backend-Entwicklung > PHP-Tutorial > Wie PHP den OAuth2.0-Authentifizierungs- und Autorisierungsmechanismus implementiert, um die Website-Sicherheit zu verbessern

Wie PHP den OAuth2.0-Authentifizierungs- und Autorisierungsmechanismus implementiert, um die Website-Sicherheit zu verbessern

WBOY
Freigeben: 2023-06-27 08:02:01
Original
1747 Leute haben es durchsucht

OAuth2.0 ist ein tokenbasiertes Autorisierungsprotokoll und einer der am weitesten verbreiteten Authentifizierungs- und Autorisierungsmechanismen im Internet. Durch die Simulation des Benutzerautorisierungsprozesses können Benutzer ihre Ressourcen mit Anwendungen von Drittanbietern teilen, ohne Benutzernamen und Passwörter angeben zu müssen. PHP ist eine serverseitige Skriptsprache, die in der Webentwicklung weit verbreitet ist. In diesem Artikel wird erläutert, wie Sie mit PHP den OAuth2.0-Authentifizierungs- und Autorisierungsmechanismus implementieren, um die Website-Sicherheit zu verbessern.

OAuth2.0-Autorisierungsprozess

Der grundlegende Prozess des OAuth2.0-Authentifizierungs- und Autorisierungsmechanismus ist wie folgt:

  1. Der Benutzer initiiert eine Autorisierungsanfrage an die Clientanwendung.
  2. Die Clientanwendung initiiert eine Authentifizierungsanforderung an den OAuth2.0-Authentifizierungsserver.
  3. Der OAuth2.0-Authentifizierungsserver initiiert eine Authentifizierungsanfrage an den Benutzer und holt die Autorisierung des Benutzers ein.
  4. Der Benutzer stimmt der Autorisierung zu und der Authentifizierungsserver stellt ein Zugriffstoken für die Clientanwendung bereit.
  5. Client-Anwendungen können Token verwenden, um auf geschützte Ressourcen im Authentifizierungsserver zuzugreifen.

Bevor wir den OAuth2.0-Authentifizierungs- und Autorisierungsmechanismus implementieren, müssen wir einige wichtige Konzepte des OAuth2.0-Protokolls verstehen:

  1. Ressourcenbesitzer: der Benutzer, dem die Ressource gehört.
  2. Client: Drittanbieteranwendung, Anwendung, die auf Ressourcen zugreifen muss.
  3. Authentifizierungsserver (Autorisierungsserver): Ein Server, der für die Authentifizierung von Benutzeridentitäten und die Autorisierung von Drittanbieteranwendungen für den Zugriff auf geschützte Ressourcen verantwortlich ist.
  4. Token: Ein Token, der für den Zugriff auf geschützte Ressourcen verwendet wird.

So implementieren Sie OAuth2.0

Als nächstes stellen wir vor, wie Sie mit PHP den OAuth2.0-Authentifizierungs- und Autorisierungsmechanismus implementieren, um die Sicherheit der Website zu erhöhen. Der spezifische Implementierungsprozess ist wie folgt:

  1. Installieren Sie die PHP OAuth2.0-Bibliothek

Wir können Composer verwenden, um die PHP OAuth2.0-Bibliothek zu installieren. Geben Sie das Projektverzeichnis über die Befehlszeile ein und verwenden Sie den folgenden Befehl:

composer require bshaffer/oauth2-server-php
Nach dem Login kopieren
  1. OAuth2.0-Authentifizierungsserver erstellen

Um einen OAuth2.0-Authentifizierungsserver zu erstellen, müssen wir Folgendes definieren:

  • Benutzertabelle : Wird zum Speichern von Benutzerinformationen und Anmeldeinformationen verwendet (hier verwenden wir MySQL zum Speichern von Benutzerinformationen).
  • Client-Tabelle: Zeichnet alle registrierten Client-Anwendungen auf.
  • Token-Tabelle: Zeichnet alle Zugriffstoken auf.
  • Token-Bereichstabelle: Zeichnet die Zugriffsberechtigungen aller Token auf.

Hier nehmen wir MySQL als Beispiel. Sie können die folgende SQL-Anweisung verwenden, um die entsprechende Tabelle zu erstellen:

CREATE TABLE `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(255) NOT NULL,
  `password` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE `oauth_clients` (
  `client_id` varchar(80) NOT NULL,
  `client_secret` varchar(80) NOT NULL,
  `redirect_uri` varchar(2000) NOT NULL,
  PRIMARY KEY (`client_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE `oauth_access_tokens` (
  `access_token` varchar(40) NOT NULL,
  `client_id` varchar(80) NOT NULL,
  `user_id` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`access_token`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE `oauth_refresh_tokens` (
  `access_token` varchar(40) NOT NULL,
  `client_id` varchar(80) NOT NULL,
  `user_id` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`access_token`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE `oauth_scopes` (
  `scope` varchar(80) NOT NULL,
  `is_default` tinyint(1) DEFAULT NULL,
  PRIMARY KEY (`scope`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE `oauth_jwt` (
  `client_id` varchar(80) NOT NULL,
  `subject` varchar(80) DEFAULT NULL,
  `public_key` varchar(2000) DEFAULT NULL,
  PRIMARY KEY (`client_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
Nach dem Login kopieren
  1. Konfigurieren Sie den OAuth2.0-Authentifizierungsserver

Als nächstes müssen wir den OAuth2.0-Authentifizierungsserver konfigurieren. Wir müssen Folgendes definieren:

  • Verbindungsinformationen: Serververbindungsinformationen, einschließlich Datenbankverbindung und Datenbanktabellenname.
  • Kundeninformationen: einschließlich Kunden-ID und Kundenschlüssel.
  • Verifizierungsinformationen: werden zur Überprüfung von Benutzer- und Kundeninformationen verwendet.

Konfigurationsbeispiel:

$config = [
    'dsn' => 'mysql:dbname=oauth2;host=localhost',
    'username' => 'root',
    'password' => 'password',
    'auth_client_secret' => 'secret-key',
    'auth_user_table' => 'users',
    'auth_client_table' => 'oauth_clients',
    'auth_token_table' => 'oauth_access_tokens',
    'auth_scope_table' => 'oauth_scopes',
];
Nach dem Login kopieren
  1. Erstellen eines OAuth2.0-Controllers

Als nächstes müssen wir einen OAuth2.0-Controller erstellen, um den Authentifizierungs- und Autorisierungsprozess von OAuth2.0 abzuwickeln. Der Controller umfasst hauptsächlich die folgenden Methoden:

  • authorizeAction(): Wird zur Bearbeitung von Autorisierungsanfragen verwendet.
  • tokenAction(): wird zur Verarbeitung von Zugriffstoken-Anfragen verwendet.
  • refreshAction(): wird zur Verarbeitung von Aktualisierungstokenanforderungen verwendet.
  • authenticate(): wird zur Überprüfung der Benutzeridentität und der Clientidentität verwendet.

Controller-Beispiel:

use OAuth2StoragePdo;

class OAuth2Controller extends PhalconMvcController
{  
    public function authorizeAction()
    {
        // 创建此控制器的实例
        $server = $this->getOAuthServer();
        // 处理授权请求
        $response = new OAuth2HttpFoundationBridgeResponse();
        if (!$server->validateAuthorizeRequest(OAuth2HttpFoundationBridgeRequest::createFromGlobals(), $response)) {
            return $this->response->setContent(json_encode(['status' => 'fail', 'message' => '授权失败']));
        }
        if ($this->request->isPost()) {
            $is_authorized = (bool) $this->request->getPost('authorized', '');
            $server->handleAuthorizeRequest(OAuth2HttpFoundationBridgeRequest::createFromGlobals(), $response, $is_authorized);
            return $response;
        }
        // 显示授权页面
        return $this->view->render('oauth', 'authorize');
    }

    public function tokenAction()
    {
        // 创建此控制器的实例
        $server = $this->getOAuthServer();
        // 处理访问令牌请求
        $response = new OAuth2HttpFoundationBridgeResponse();
        $server->handleTokenRequest(OAuth2HttpFoundationBridgeRequest::createFromGlobals(), $response);
        return $response;
    }

    public function refreshAction()
    {
        // 创建此控制器的实例
        $server = $this->getOAuthServer();
        // 处理刷新令牌请求
        $response = new OAuth2HttpFoundationBridgeResponse();
        $server->handleTokenRequest(OAuth2HttpFoundationBridgeRequest::createFromGlobals(), $response);
        return $response;
    }

    protected function getOAuthServer()
    {
        // 获取连接信息
        $config = $this->config->OAuth2;
        $dsn = $config->dsn;
        $username = $config->username;
        $password = $config->password;
        $pdo = new PDO($dsn, $username, $password);
        $pdoStorage = new OAuth2StoragePdo($pdo, [
            'user_table' => $config->auth_user_table,
            'client_table' => $config->auth_client_table,
            'access_token_table' => $config->auth_token_table,
            'scope_table' => $config->auth_scope_table,
        ]);
        // 创建OAuth2.0服务器实例
        $server = new OAuth2Server($pdoStorage);
        // 配置客户端身份验证
        $server->addGrantType(new OAuth2GrantTypeClientCredentials($pdoStorage));
        // 配置用户身份验证
        $server->addGrantType(new OAuth2GrantTypeUserCredentials($pdoStorage));
        return $server;
    }
}
Nach dem Login kopieren

Fazit

In diesem Artikel wird erläutert, wie Sie mit PHP den OAuth2.0-Authentifizierungs- und Autorisierungsmechanismus implementieren, um die Sicherheit der Website zu erhöhen. Der OAuth2.0-Authentifizierungs- und Autorisierungsmechanismus ist im Internetbereich weit verbreitet und von großer Bedeutung für die Sicherheit von Websites und mobilen Anwendungen. Die Verwendung des OAuth2.0-Authentifizierungs- und Autorisierungsmechanismus kann eine höhere Sicherheit und ein besseres Benutzererlebnis für Websites und mobile Anwendungen bieten.

Das obige ist der detaillierte Inhalt vonWie PHP den OAuth2.0-Authentifizierungs- und Autorisierungsmechanismus implementiert, um die Website-Sicherheit zu verbessern. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage