Rumah > Artikel > pembangunan bahagian belakang > Bagaimana PHP melaksanakan mekanisme pengesahan dan kebenaran OAuth2.0 untuk meningkatkan keselamatan tapak web
OAuth2.0 ialah protokol kebenaran berasaskan token dan merupakan salah satu mekanisme pengesahan dan kebenaran yang paling banyak digunakan di Internet. Dengan mensimulasikan proses kebenaran pengguna, ia membolehkan pengguna berkongsi sumber mereka dengan aplikasi pihak ketiga tanpa memberikan nama pengguna dan kata laluan. PHP ialah bahasa skrip sebelah pelayan yang digunakan secara meluas dalam pembangunan web Artikel ini akan memperkenalkan cara menggunakan PHP untuk melaksanakan mekanisme pengesahan dan kebenaran OAuth2.0 untuk meningkatkan keselamatan tapak web.
Proses kebenaran OAuth2.0
Proses asas mekanisme pengesahan dan kebenaran OAuth2.0 adalah seperti berikut:
Sebelum melaksanakan mekanisme pengesahan dan kebenaran OAuth2.0, kita perlu memahami beberapa konsep penting yang terlibat dalam protokol OAuth2.0:
Cara melaksanakan OAuth2.0
Seterusnya kami akan memperkenalkan cara menggunakan PHP untuk melaksanakan mekanisme pengesahan dan kebenaran OAuth2.0 untuk meningkatkan keselamatan tapak web. Proses pelaksanaan khusus adalah seperti berikut:
Kami boleh menggunakan Composer untuk memasang perpustakaan PHP OAuth2.0. Masukkan direktori projek dari baris arahan dan gunakan arahan berikut:
composer require bshaffer/oauth2-server-php
Untuk mencipta pelayan pengesahan OAuth2.0, kita perlu menentukan perkara berikut:
Di sini kami mengambil MySQL sebagai contoh Anda boleh menggunakan pernyataan SQL berikut untuk mencipta jadual yang sepadan:
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;
Seterusnya kita perlu mengkonfigurasi pelayan OAuth2.0. Kita perlu mentakrifkan perkara berikut:
Contoh konfigurasi:
$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', ];
Seterusnya kita perlu mencipta pengawal OAuth2.0 untuk mengendalikan proses pengesahan dan kebenaran OAuth2.0. Pengawal terutamanya termasuk kaedah berikut:
Contoller kawalan:
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; } }
Kesimpulan
Artikel ini memperkenalkan cara menggunakan PHP untuk melaksanakan mekanisme pengesahan dan kebenaran OAuth2.0 untuk meningkatkan keselamatan tapak web. Mekanisme pengesahan dan kebenaran OAuth2.0 telah digunakan secara meluas dalam bidang Internet dan sangat penting dalam keselamatan tapak web dan aplikasi mudah alih. Menggunakan mekanisme pengesahan dan kebenaran OAuth2.0 boleh memberikan keselamatan yang lebih tinggi dan pengalaman pengguna yang lebih baik untuk tapak web dan aplikasi mudah alih.
Atas ialah kandungan terperinci Bagaimana PHP melaksanakan mekanisme pengesahan dan kebenaran OAuth2.0 untuk meningkatkan keselamatan tapak web. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!