Rumah >pembangunan bahagian belakang >tutorial php >Bagaimana PHP melaksanakan mekanisme pengesahan dan kebenaran OAuth2.0 untuk meningkatkan keselamatan tapak web

Bagaimana PHP melaksanakan mekanisme pengesahan dan kebenaran OAuth2.0 untuk meningkatkan keselamatan tapak web

WBOY
WBOYasal
2023-06-27 08:00:191749semak imbas

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:

  1. Pengguna memulakan permintaan kebenaran kepada aplikasi klien.
  2. Aplikasi klien memulakan permintaan pengesahan ke pelayan pengesahan OAuth2.0.
  3. Pelayan pengesahan OAuth2.0 memulakan permintaan pengesahan kepada pengguna dan mendapatkan kebenaran pengguna.
  4. Pengguna bersetuju untuk memberi kebenaran, dan pelayan pengesahan menyediakan token akses kepada aplikasi klien.
  5. Aplikasi pelanggan boleh menggunakan token untuk mengakses sumber yang dilindungi dalam pelayan pengesahan.

Sebelum melaksanakan mekanisme pengesahan dan kebenaran OAuth2.0, kita perlu memahami beberapa konsep penting yang terlibat dalam protokol OAuth2.0:

  1. Pemilik sumber: pengguna yang memiliki sumber.
  2. Pelanggan: Aplikasi pihak ketiga, aplikasi yang perlu mengakses sumber.
  3. Pelayan pengesahan (pelayan kebenaran): Pelayan yang bertanggungjawab untuk mengesahkan identiti pengguna dan membenarkan aplikasi pihak ketiga untuk mengakses sumber yang dilindungi.
  4. Token: Token yang digunakan untuk mengakses sumber yang dilindungi.

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:

  1. Pasang perpustakaan PHP OAuth2.0

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
  1. Buat pelayan pengesahan OAuth2.0

Untuk mencipta pelayan pengesahan OAuth2.0, kita perlu menentukan perkara berikut:

  • Jadual pengguna : digunakan untuk menyimpan maklumat dan kelayakan pengguna (di sini kami menggunakan MySQL untuk menyimpan maklumat pengguna).
  • Jadual pelanggan: merekodkan semua aplikasi pelanggan berdaftar.
  • Jadual token: merekodkan semua token akses.
  • Jadual skop token: merekodkan kebenaran akses semua token.

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;
  1. Konfigurasikan pelayan pengesahan OAuth2.0

Seterusnya kita perlu mengkonfigurasi pelayan OAuth2.0. Kita perlu mentakrifkan perkara berikut:

  • Maklumat sambungan: Maklumat sambungan pelayan, termasuk sambungan pangkalan data dan nama jadual pangkalan data.
  • Maklumat pelanggan: termasuk ID pelanggan dan kunci pelanggan.
  • Maklumat pengesahan: digunakan untuk mengesahkan maklumat pengguna dan maklumat pelanggan.

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',
];
  1. Mencipta pengawal OAuth2.0

Seterusnya kita perlu mencipta pengawal OAuth2.0 untuk mengendalikan proses pengesahan dan kebenaran OAuth2.0. Pengawal terutamanya termasuk kaedah berikut:

  • authorizeAction(): digunakan untuk mengendalikan permintaan kebenaran.
  • tokenAction(): digunakan untuk mengendalikan permintaan token akses.
  • refreshAction(): digunakan untuk mengendalikan permintaan token muat semula.
  • authenticate(): digunakan untuk mengesahkan identiti pengguna dan identiti pelanggan.

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn