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:
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:
Dann finden Sie den Ort
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;
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;
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;
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;
CREATE TABLE oauth_scopes ( scope text, is_default tinyint(1) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
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);
PS, bitte erklären Sie es, wie im Bild gezeigt:
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:
Also habe ich relevante Änderungen vorgenommen:
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{
/** * @Register new Oauth2 apply * @param string $action * @return boolean|\OAuth2\Server */ function grantTypeOauth2($action=null) { Config::load(APP_PATH.'database.php'); $storage = new Pdo( [ 'dsn' => config('dsn'), 'username' => config('username'), 'password' => config('password') ] ); $server = new \OAuth2\Server($storage, array('enforce_state'=>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; } }
} ?>
3) Erstellen Sie die Token-Datei Access.php
<?phpnamespace apprestfulcontroller;use appcommonOauth2; /** @uathor:jinyan */ class Access extends Oauth2{
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('json', 'oauth2_'); } /** * @get access_token */ public function access_token() { $this->_token(); }
} ?>
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 //这个参数是固定的 }
Wenn die Anfrage erfolgreich ist, wird die Folgendes wird zurückgegeben. Wie im Bild gezeigt:
Fügen Sie es über die Anforderungsschnittstelle des ff-Browsers httprequest ein:
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 '成功请求到数据'; } }
3 Der Testeffekt ist wie im gezeigt Abbildung:
1) Zuerst ohne access_token-Anfrage, test()-Methode:
Das Ergebnis ist ein 401 Nicht verifizierter Status
2) Dann fordern Sie ein falsches access_token an, die test()-Methode
ist ebenfalls ein 401-Status, aber zu diesem Zeitpunkt wie in der Abbildung gezeigt
Es werden Informationen an uns zurückgegeben
3) Zum Schluss verwenden Sie a korrektes access_token, test()-Methode
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:
Ende .
Empfohlene verwandte Artikel:
PHP-Implementierung zur Überprüfung aller Arten von Kreditkartenklassen
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!