Analyse des Verifizierungsprozesses mit Auth2 in ThinkPHP5

不言
Freigeben: 2023-04-03 13:58:02
Original
4597 Leute haben es durchsucht

Der Inhalt dieses Artikels besteht darin, die Analyse des Verifizierungsprozesses mit Auth2 in ThinkPHP5 mitzuteilen. Ich hoffe, dass er allen helfen kann.

Auth2-Überprüfung auf tp implementiert, ich habe im Gegensatz zu yii nur sehr wenige Notizen im Internet gefunden, daher werde ich hier einige Notizen veröffentlichen, um Freunden mit ähnlichen Bedürfnissen zu helfen

PS: Im Hinblick auf Es gibt vier Lösungen für oauth2. Dieses Beispiel basiert auf Client-Anmeldeinformationen.

1. Installation über Composer

Composer erfordert --prefer-dist bshaffer/oauth2- Nach dem Server -php

wird installiert, wie in der Abbildung gezeigt:
Analyse des Verifizierungsprozesses mit Auth2 in ThinkPHP5
Das entsprechende Verzeichnis wird angezeigt

2. Implementieren Sie die Autorisierungsdatei

1) Erstellen Sie die entsprechende Datentabelle

Suchen Sie zuerst die Pdo.php-Datei, wie in der Abbildung gezeigt:

Analyse des Verifizierungsprozesses mit Auth2 in ThinkPHP5

Dann finden Sie den Ort

Analyse des Verifizierungsprozesses mit Auth2 in ThinkPHP5

Zweck ist es, Ihnen den zu sagen Name beim Erstellen der Tabelle, er sollte derselbe sein wie Die hier verwendeten Tabellennamen sind die gleichen

Bezüglich der erstellten Tabelle lade ich den Code direkt hoch, damit Sie ihn direkt kopieren und einfügen können:

CREATE TABLE 
oauth_access_tokens
 (
access_token
 varchar(40) NOT NULL,
client_id
 varchar(80) NOT NULL,
user_id
 int(11) DEFAULT NULL,
expires
 varchar(19) NOT NULL,
scope
 text,
  PRIMARY KEY (
access_token
),
  KEY 
fk_access_token_oauth2_client_client_id
 (
client_id
),
  KEY 
ix_access_token_expires
 (
expires
),
  CONSTRAINT 
fk_access_token_oauth2_client_client_id
 FOREIGN KEY (
client_id
) REFERENCES 
pos_oauth2_client
 (
client_id
) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Nach dem Login kopieren
CREATE TABLE 
oauth_authorization_codes
 (
authorization_code
 varchar(40) NOT NULL,
client_id
 varchar(80) NOT NULL,
user_id
 int(11) DEFAULT NULL,
redirect_uri
 text NOT NULL,
expires
 int(11) NOT NULL,
scope
 text,
  PRIMARY KEY (
authorization_code
),
  KEY 
fk_authorization_code_oauth2_client_client_id
 (
client_id
),
  KEY 
ix_authorization_code_expires
 (
expires
),
  CONSTRAINT 
fk_authorization_code_oauth2_client_client_id
 FOREIGN KEY (
client_id
) REFERENCES 
pos_oauth2_client
 (
client_id
) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Nach dem Login kopieren
CREATE TABLE 
oauth_clients
 (
client_id
 varchar(80) NOT NULL,
client_secret
 varchar(80) NOT NULL,
redirect_uri
 text NOT NULL,
grant_type
 text,
scope
 text,
created_at
 int(11) DEFAULT NULL,
updated_at
 int(11) DEFAULT NULL,
created_by
 int(11) DEFAULT NULL,
updated_by
 int(11) DEFAULT NULL,
  PRIMARY KEY (
client_id
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Nach dem Login kopieren
CREATE TABLE 
oauth_refresh_tokens
 (
refresh_token
 varchar(40) NOT NULL,
client_id
 varchar(80) NOT NULL,
user_id
 int(11) DEFAULT NULL,
expires
 int(11) NOT NULL,
scope
 text,
  PRIMARY KEY (
refresh_token
),
  KEY 
fk_refresh_token_oauth2_client_client_id
 (
client_id
),
  KEY 
ix_refresh_token_expires
 (
expires
),
  CONSTRAINT 
fk_refresh_token_oauth2_client_client_id
 FOREIGN KEY (
client_id
) REFERENCES 
pos_oauth2_client
 (
client_id
) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Nach dem Login kopieren
CREATE TABLE 
oauth_scopes
 (
scope
 text,
is_default
 tinyint(1) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Nach dem Login kopieren

Fügen Sie ein Datenelement hinzu

insert  into 
oauth_clients
(
client_id,
client_secret,
redirect_uri,
grant_type,
scope,
created_at,
updated_at,
created_by,
updated_by
) values ('admin','123456','http://','client_credentials',NULL,NULL,NULL,NULL,NULL);
Nach dem Login kopieren

PS, bitte erklären Sie es, wie im Bild gezeigt:

Analyse des Verifizierungsprozesses mit Auth2 in ThinkPHP5

In meiner tatsächlichen Verwendung verwende ich nur diese fünf Tabellen, d. h. für die fünf oben erstellten Tabellen habe ich in dieser Konfiguration alle verbleibenden Optionen abgemeldet

Es gibt noch eine andere Situation, die ich erklären möchte: Vielleicht ist das Tabellenpräfix für die Datentabelle festgelegt und es müssen hier entsprechende Änderungen vorgenommen werden. Ich habe es beispielsweise erstellt, siehe Bild:

Analyse des Verifizierungsprozesses mit Auth2 in ThinkPHP5

Also habe ich relevante Änderungen vorgenommen:

Analyse des Verifizierungsprozesses mit Auth2 in ThinkPHP5

2) Erstellen Sie die Autorisierungsdatei Oauth2.php und benennen Sie sie nach Ihrem Wunsch

<?phpnamespace appcommon;/**
@author jinyan
@create 20180416
*/use OAuth2StoragePdo;use thinkConfig;
class Oauth2{
Nach dem Login kopieren
/**
 * @Register new Oauth2 apply
 * @param string $action
 * @return boolean|\OAuth2\Server
 */
function grantTypeOauth2($action=null)
{
    Config::load(APP_PATH.&#39;database.php&#39;);

    $storage = new Pdo(
        [
            &#39;dsn&#39;      => config(&#39;dsn&#39;),
            &#39;username&#39; => config(&#39;username&#39;),
            &#39;password&#39; => config(&#39;password&#39;)
        ]
    );

    $server = new \OAuth2\Server($storage, array(&#39;enforce_state&#39;=>false));
    // Add the "Client Credentials" grant type (it is the simplest of the grant types)
    $server->addGrantType(new \OAuth2\GrantType\ClientCredentials($storage));
    // Add the "Authorization Code" grant type (this is where the oauth magic happens)
    $server->addGrantType(new \OAuth2\GrantType\AuthorizationCode($storage));
    // Add the "User Credentials" grant type (this is where the oauth magic happens)
    $server->addGrantType(new \OAuth2\GrantType\UserCredentials($storage));
    return $server;
}

/**
 * @校验token值
 * @param unknown $server
 */
protected function checkApiAuthroize($server)
{
    if (!$server->verifyResourceRequest(\OAuth2\Request::createFromGlobals())) {
        $server->getResponse()->send();
        exit;
    }
}
Nach dem Login kopieren
}
?>
Nach dem Login kopieren
Nach dem Login kopieren

3) Erstellen Sie die Token-Datei Access.php

<?phpnamespace apprestfulcontroller;use appcommonOauth2;
/**
@uathor:jinyan
*/
class Access extends Oauth2{
Nach dem Login kopieren
protected  $_server;

/**
 * @授权配置
 */
public function __construct()
{
    return $this->_server = $this->grantTypeOauth2();
}

/**
 *
 */
private function _token()
{
    // Handle a request for an OAuth2.0 Access Token and send the response to the client
    $this->_server->handleTokenRequest(\OAuth2\Request::createFromGlobals())->send(&#39;json&#39;, &#39;oauth2_&#39;);
}

/**
 * @get access_token
 */
public function access_token()
{
    $this->_token();
}
Nach dem Login kopieren
}
?>
Nach dem Login kopieren
Nach dem Login kopieren

Wie kann man also den Wert eines access_token anfordern? Rufen Sie einfach die Methode access_token() direkt auf

Anfrage-URL: http://restful.thinkphp.com/r...

Bitte fügen Sie beim Erstellen der Datentabelle auch etwas hinzu, bevor Sie eine neue erhalten Stück Daten? Seine Funktion entspricht dem Abrufen des Kontopassworts des access_token. Denken Sie daran, die Post-Methode zu verwenden, um das Token zu erhalten

Parameter der Anfrage

{
client_id=admin
client_secret=123456
grant_type=client_credentials //这个参数是固定的
}
Nach dem Login kopieren

Wenn die Anfrage erfolgreich ist, wird die Folgendes wird zurückgegeben. Wie im Bild gezeigt:

Analyse des Verifizierungsprozesses mit Auth2 in ThinkPHP5

Fügen Sie es über die Anforderungsschnittstelle des ff-Browsers httprequest ein:

Analyse des Verifizierungsprozesses mit Auth2 in ThinkPHP5

4) Erhalten Sie Schnittstellendaten über access_token, Sms.php

<?php
namespace apprestfulcontroller;
/**
Created by PhpStorm.
User: Administrator
Date: 2018/7/29
Time: 22:02
*/
use appcommonOauth2;
class Sms extends Oauth2
{
protected $_server;

/**
 * @授权配置
 */
public function __construct()
{
    $this->_server = $this->grantTypeOauth2();
}

public function test()
{
    //access_token验证
    $this->checkApiAuthroize($this->_server);

    echo &#39;成功请求到数据&#39;;
}
}
Nach dem Login kopieren

3 Der Testeffekt ist wie im gezeigt Abbildung:

1) Zuerst ohne access_token-Anfrage, test()-Methode:

Analyse des Verifizierungsprozesses mit Auth2 in ThinkPHP5

Das Ergebnis ist ein 401 Nicht verifizierter Status

2) Dann fordern Sie ein falsches access_token an, die test()-Methode

Analyse des Verifizierungsprozesses mit Auth2 in ThinkPHP5
ist ebenfalls ein 401-Status, aber zu diesem Zeitpunkt wie in der Abbildung gezeigt

Analyse des Verifizierungsprozesses mit Auth2 in ThinkPHP5

Es werden Informationen an uns zurückgegeben

3) Zum Schluss verwenden Sie a korrektes access_token, test()-Methode

Analyse des Verifizierungsprozesses mit Auth2 in ThinkPHP5

Auf der Grundlage der ersten und zweiten Situation sollten Sie also eine Methode für das Scheitern der Token-Überprüfung anpassen, wie in der Abbildung gezeigt:

Analyse des Verifizierungsprozesses mit Auth2 in ThinkPHP5

Analyse des Verifizierungsprozesses mit Auth2 in ThinkPHP5

Analyse des Verifizierungsprozesses mit Auth2 in ThinkPHP5

Analyse des Verifizierungsprozesses mit Auth2 in ThinkPHP5

Ende .

Empfohlene verwandte Artikel:

PHP-Implementierung zur Überprüfung aller Arten von Kreditkartenklassen

Thinkphp-Verifizierungscode-Implementierung ( Formular , Ajax-Implementierungsüberprüfung)_php-Beispiel

Das obige ist der detaillierte Inhalt vonAnalyse des Verifizierungsprozesses mit Auth2 in ThinkPHP5. 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