OAuth2 基于TP 搭建简单案例
阅读须知:理解OAuth2
OAuth是一个关于授权(authorization)的开放网络标准,在全世界得到广泛应用,目前的版本是2.0版。今天就试着把环境搭建一下在此仅作为学习记录;
参考资料来源:
http://oauth.net/2/
http://bshaffer.github.io/oauth2-server-php-docs/cookbook/
数据表准备:
-- -- 表的结构 `oauth_access_tokens` -- CREATE TABLE IF NOT EXISTS `oauth_access_tokens` ( `access_token` text, `client_id` text, `user_id` text, `expires` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `scope` text ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- 表的结构 `oauth_authorization_codes` -- CREATE TABLE IF NOT EXISTS `oauth_authorization_codes` ( `authorization_code` text, `client_id` text, `user_id` text, `redirect_uri` text, `expires` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `scope` text, `id_token` text ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- 表的结构 `oauth_clients` -- CREATE TABLE IF NOT EXISTS `oauth_clients` ( `client_id` text, `client_secret` text, `redirect_uri` text ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -- 转存表中的数据 `oauth_clients` -- INSERT INTO `oauth_clients` (`client_id`, `client_secret`, `redirect_uri`) VALUES ('demoapp', 'demopass', 'http://127.0.0.1/tp/index.php'); -- -------------------------------------------------------- -- -- 表的结构 `oauth_public_keys` -- CREATE TABLE IF NOT EXISTS `oauth_public_keys` ( `client_id` varchar(80) DEFAULT NULL, `public_key` varchar(8000) DEFAULT NULL, `private_key` varchar(8000) DEFAULT NULL, `encryption_algorithm` varchar(80) DEFAULT 'RS256' ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- 表的结构 `oauth_refresh_tokens` -- CREATE TABLE IF NOT EXISTS `oauth_refresh_tokens` ( `refresh_token` text, `client_id` text, `user_id` text, `expires` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `scope` text ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- 表的结构 `oauth_scopes` -- CREATE TABLE IF NOT EXISTS `oauth_scopes` ( `scope` text, `is_default` tinyint(1) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- 表的结构 `oauth_users` -- CREATE TABLE IF NOT EXISTS `oauth_users` ( `username` varchar(255) NOT NULL, `password` varchar(2000) DEFAULT NULL, `first_name` varchar(255) DEFAULT NULL, `last_name` varchar(255) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -- Indexes for table `oauth_users` -- ALTER TABLE `oauth_users` ADD PRIMARY KEY (`username`);
OAuth2 库地址:https://github.com/bshaffer/oauth2-server-php
这里我把它放在Vendor/OAuth2里;
授权请求类:
<?php namespace Api\Controller; class OAuth2Controller extends \Org\OAuth2\Controller { public function __construct() { parent::__construct(); } public function authorize() { // validate the authorize request if (!$this->oauth_server->validateAuthorizeRequest($this->oauth_request, $this->oauth_response)) { $this->oauth_response->send(); die; } // print the authorization code if the user has authorized your client $this->oauth_server->handleAuthorizeRequest($this->oauth_request, $this->oauth_response, true); // this is only here so that you get to see your code in the cURL request. Otherwise, we'd redirect back to the client $code = substr($this->oauth_response->getHttpHeader('Location'), strpos($this->oauth_response->getHttpHeader('Location'), 'code=') + 5, 40); echo json_encode(['code' => $code]); //$this->oauth_response->send(); } public function token() { $this->oauth_server->handleTokenRequest(\OAuth2\Request::createFromGlobals())->send(); } }
OAuth2 库的请求封装放在:Org/OAuth2里;
<?php namespace Org\OAuth2; class Controller { protected $oauth_server; protected $oauth_storage; protected $oauth_request; protected $oauth_response; public function __construct() { // Autoloading (composer is preferred, but for this example let's just do this) // require_once(VENDOR_PATH . '/OAuth2/Autoloader.php'); // \OAuth2\Autoloader::register(); // $dsn is the Data Source Name for your database, for exmaple "mysql:dbname=my_oauth2_db;host=localhost" $this->oauth_storage = new \OAuth2\Storage\Pdo(array('dsn' => C('DSN'), 'username' => C('USERNAME'), 'password' => C('PASSWORD'))); // Pass a storage object or array of storage objects to the OAuth2 server class $this->oauth_server = new \OAuth2\Server($this->oauth_storage); // Add the "Client Credentials" grant type (it is the simplest of the grant types) $this->oauth_server->addGrantType(new \OAuth2\GrantType\ClientCredentials($this->oauth_storage)); // Add the "Authorization Code" grant type (this is where the oauth magic happens) $this->oauth_server->addGrantType(new \OAuth2\GrantType\AuthorizationCode($this->oauth_storage)); $this->oauth_request = \OAuth2\Request::createFromGlobals(); $this->oauth_response = new \OAuth2\Response(); } } <?php namespace Org\OAuth2; class Resource extends Controller { protected $tokenData; public function __construct() { parent::__construct(); // Handle a request to a resource and authenticate the access token if (!$this->oauth_server->verifyResourceRequest(\OAuth2\Request::createFromGlobals())) { $this->oauth_server->getResponse()->send(); die; } $this->tokenData = $this->oauth_server->getResourceController()->getToken(); } }
测试类:
<?php namespace Api\Controller; class TestController extends \Org\OAuth2\Resource { public function __construct() { parent::__construct(); } public function test() { echo json_encode(array('success' => true, 'message' => 'You accessed my APIs!')); } public function getToken() { echo json_encode(['token' => $this->tokenData]); } }
配置文件:
require_once(VENDOR_PATH . '/OAuth2/Autoloader.php'); OAuth2\Autoloader::register(); return array( //'配置项'=>'配置值' 'AUTOLOAD_NAMESPACE' => array('OAuth2' => VENDOR_PATH . 'OAuth2/'), //扩展模块列表 'DSN' => 'mysql:host=localhost;dbname=oauth2', 'USERNAME' => 'root', 'PASSWORD' => '', );
以上就介绍了OAuth2 基于TP 搭建简单案例,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

De nombreux utilisateurs choisiront la marque Huawei lors du choix des montres intelligentes. Parmi eux, les Huawei GT3pro et GT4 sont des choix très populaires. De nombreux utilisateurs sont curieux de connaître la différence entre Huawei GT3pro et GT4. Quelles sont les différences entre Huawei GT3pro et GT4 ? 1. Apparence GT4 : 46 mm et 41 mm, le matériau est un miroir en verre + un corps en acier inoxydable + une coque arrière en fibre haute résolution. GT3pro : 46,6 mm et 42,9 mm, le matériau est du verre saphir + corps en titane/corps en céramique + coque arrière en céramique 2. GT4 sain : en utilisant le dernier algorithme Huawei Truseen5.5+, les résultats seront plus précis. GT3pro : ajout d'un électrocardiogramme ECG, d'un vaisseau sanguin et de la sécurité

WindowsServerBackup est une fonction fournie avec le système d'exploitation WindowsServer, conçue pour aider les utilisateurs à protéger les données importantes et les configurations système, et à fournir des solutions complètes de sauvegarde et de récupération pour les petites, moyennes et grandes entreprises. Seuls les utilisateurs exécutant Server2022 et versions ultérieures peuvent utiliser cette fonctionnalité. Dans cet article, nous expliquerons comment installer, désinstaller ou réinitialiser WindowsServerBackup. Comment réinitialiser la sauvegarde de Windows Server Si vous rencontrez des problèmes avec la sauvegarde de votre serveur, si la sauvegarde prend trop de temps ou si vous ne parvenez pas à accéder aux fichiers stockés, vous pouvez envisager de réinitialiser vos paramètres de sauvegarde de Windows Server. Pour réinitialiser Windows

Pourquoi l'outil Snipping ne fonctionne pas sous Windows 11 Comprendre la cause première du problème peut aider à trouver la bonne solution. Voici les principales raisons pour lesquelles l'outil de capture peut ne pas fonctionner correctement : L'assistant de mise au point est activé : cela empêche l'ouverture de l'outil de capture. Application corrompue : si l'outil de capture plante au lancement, il est peut-être corrompu. Pilotes graphiques obsolètes : des pilotes incompatibles peuvent interférer avec l'outil de capture. Interférence provenant d'autres applications : d'autres applications en cours d'exécution peuvent entrer en conflit avec l'outil de capture. Le certificat a expiré : une erreur lors du processus de mise à niveau peut provoquer ce problème. Solution simple. Celles-ci conviennent à la plupart des utilisateurs et ne nécessitent aucune connaissance technique particulière. 1. Mettez à jour les applications Windows et Microsoft Store

PHP et OAuth : mise en œuvre de l'intégration de la connexion Microsoft Avec le développement d'Internet, de plus en plus de sites Web et d'applications doivent permettre aux utilisateurs de se connecter à l'aide de comptes tiers afin de fournir une expérience d'enregistrement et de connexion pratique. Le compte Microsoft est l'un des comptes les plus utilisés dans le monde et de nombreux utilisateurs souhaitent utiliser un compte Microsoft pour se connecter à des sites Web et à des applications. Afin de réaliser l'intégration de la connexion Microsoft, nous pouvons utiliser le protocole OAuth (Open Authorization) pour y parvenir. OAuth est un protocole d'autorisation standard ouvert qui permet aux utilisateurs d'autoriser des applications tierces à agir en leur nom.

OAuth en PHP : création d'un serveur d'autorisation JWT Avec l'essor des applications mobiles et la tendance à la séparation du front-end et du back-end, OAuth est devenu un élément indispensable des applications Web modernes. OAuth est un protocole d'autorisation qui protège les ressources des utilisateurs contre tout accès non autorisé en fournissant des processus et des mécanismes standardisés. Dans cet article, nous apprendrons comment créer un serveur d'autorisation OAuth basé sur JWT (JSONWebTokens) à l'aide de PHP. JWT est un type de

Comment effectuer l'intégration de GoogleDrive à l'aide de PHP et OAuth GoogleDrive est un service de stockage cloud populaire qui permet aux utilisateurs de stocker des fichiers dans le cloud et de les partager avec d'autres utilisateurs. Grâce à GoogleDriveAPI, nous pouvons utiliser PHP pour écrire du code à intégrer à GoogleDrive afin de mettre en œuvre le téléchargement, le téléchargement, la suppression et d'autres opérations. Pour utiliser GoogleDriveAPI, nous devons nous authentifier via OAuth et

Méthode d'authentification OAuth2 et implémentation en PHP Avec le développement d'Internet, de plus en plus d'applications ont besoin d'interagir avec des plateformes tierces. Afin de protéger la confidentialité et la sécurité des utilisateurs, de nombreuses plateformes tierces utilisent le protocole OAuth2 pour mettre en œuvre l'authentification des utilisateurs. Dans cet article, nous présenterons la méthode d'authentification OAuth2 et son implémentation en PHP, et joindrons des exemples de code correspondants. OAuth2 est un framework d'autorisation qui permet aux utilisateurs d'autoriser des applications tierces à accéder à leurs ressources sur un autre fournisseur de services sans mentionner

Introduction à l'utilisation de PHP et OAuth pour l'intégration de la connexion QQ : Avec le développement des médias sociaux, de plus en plus de sites Web et d'applications commencent à fournir des fonctions de connexion tierces pour permettre aux utilisateurs de s'inscrire et de se connecter rapidement. En tant que l'une des plus grandes plateformes de médias sociaux de Chine, QQ est également devenue un service de connexion tiers fourni par de nombreux sites Web et applications. Cet article présentera les étapes à suivre pour utiliser PHP et OAuth pour l'intégration de la connexion QQ, avec des exemples de code. Étape 1 : Inscrivez-vous en tant que développeur de plateforme ouverte QQ Avant de commencer à intégrer la connexion QQ, je
