Rumah > pembangunan bahagian belakang > tutorial php > OAuth dalam PHP: Buat pelayan kebenaran kod kebenaran

OAuth dalam PHP: Buat pelayan kebenaran kod kebenaran

WBOY
Lepaskan: 2023-07-31 14:06:01
asal
1744 orang telah melayarinya

OAuth dalam PHP: Buat pelayan kebenaran kod kebenaran

OAuth ialah standard terbuka untuk membenarkan aplikasi pihak ketiga mengakses sumber pengguna. Ia dibina pada protokol HTTP, yang mengasingkan pengguna daripada pelayan sumber dan melaksanakan proses kebenaran yang lebih selamat dan boleh dipercayai. Artikel ini akan memperkenalkan cara membuat pelayan kebenaran kod kebenaran dalam PHP.

Keizinan kod kebenaran ialah jenis kebenaran yang paling biasa digunakan dalam OAuth2 Aliran kerjanya adalah seperti berikut:

  1. Pelanggan memulakan permintaan kebenaran kepada pelayan kebenaran.
  2. Pelayan kebenaran mengesahkan identiti pengguna dan meminta kebenaran daripada pengguna.
  3. Selepas pengguna bersetuju dengan kebenaran, pelayan kebenaran mengeluarkan kod kebenaran kepada pelanggan.
  4. Pelanggan menggunakan kod kebenaran, ID pelanggan, kunci pelanggan dan maklumat lain untuk meminta token daripada pelayan kebenaran.
  5. Pelayan kebenaran mengesahkan maklumat pelanggan dan kod kebenaran, dan mengeluarkan token akses.
  6. Pelanggan menggunakan token akses untuk meminta akses kepada sumber pengguna daripada pelayan sumber.

Pertama, kita perlu memasang perpustakaan PHP OAuth2 yang popular, seperti "bshaffer/oauth2-server-php". Pustaka ini boleh ditambahkan pada projek anda menggunakan Composer.

composer require bshaffer/oauth2-server-php
Salin selepas log masuk

Seterusnya, kami mencipta fail index.php sebagai pelayan kebenaran kod kebenaran kami:

<?php
require_once 'vendor/autoload.php';

// 创建一个PDO实例
$dsn = "mysql:dbname=testdb;host=localhost";
$username = "root";
$password = "";
$pdo = new PDO($dsn, $username, $password);

// 创建一个存储库实例
$storage = new OAuth2StoragePdo($pdo);

// 创建一个授权服务器实例
$server = new OAuth2Server($storage);

// 添加支持的授权类型
$server->addGrantType(new OAuth2GrantTypeAuthorizationCode($storage));

// 处理授权请求
$request = OAuth2Request::createFromGlobals();
$response = new OAuth2Response();
if (!$server->validateAuthorizeRequest($request, $response)) {
    $response->send();
    die;
}
// 显示授权页面
if (empty($_POST)) {
    exit('
        <form method="post">
          <label for="username">Username:</label>
          <input type="text" id="username" name="username"><br><br>
          <label for="password">Password:</label>
          <input type="password" id="password" name="password"><br><br>
          <input type="submit" value="Authorize">
        </form>
    ');
}

// 处理授权请求
$is_authorized = ($_POST['username'] == 'admin' && $_POST['password'] == 'admin');
$server->handleAuthorizeRequest($request, $response, $is_authorized);
if ($is_authorized) {
    $response->send();
} else {
    echo '授权失败';
}
Salin selepas log masuk

Seterusnya, kami perlu mencipta jadual pangkalan data untuk menyimpan maklumat pelanggan. Laksanakan pernyataan SQL berikut dalam pangkalan data MySQL:

CREATE TABLE `oauth_clients` (
  `client_id` varchar(80) COLLATE utf8_unicode_ci NOT NULL,
  `client_secret` varchar(80) COLLATE utf8_unicode_ci NOT NULL,
  `redirect_uri` varchar(2000) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `grant_types` varchar(80) COLLATE utf8_unicode_ci DEFAULT NULL,
  `scope` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  `user_id` varchar(80) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`client_id`)
);
Salin selepas log masuk

Kini kami boleh membenarkan pelayan menggunakan kod kebenaran untuk ujian.

Lawati http://localhost/index.php?response_type=code&client_id=YOUR_CLIENT_ID&redirect_uri=YOUR_REDIRECT_URI&scope=SCOPE dalam penyemak imbas dan gantikan YOUR_CLIENT_ID dengan ID pelanggan anda , gantikan YOUR_REDIRECT_URI dengan URI ubah hala anda dan SKOP dengan skop sumber yang anda mahu akses. http://localhost/index.php?response_type=code&client_id=YOUR_CLIENT_ID&redirect_uri=YOUR_REDIRECT_URI&scope=SCOPE,将 YOUR_CLIENT_ID 替换为你的客户端ID,YOUR_REDIRECT_URI 替换为你的重定向URI,SCOPE 替换为你想要访问的资源范围。

授权服务器将要求你输入用户名和密码。在本例中,用户名和密码均为 "admin"。输入正确的用户名和密码后,将会收到一个授权码作为响应。

接下来,我们可以使用授权码向授权服务器请求访问令牌。使用curl或其他HTTP客户端发出以下请求:

curl -X POST -d "grant_type=authorization_code&code=AUTHORIZATION_CODE&client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET&redirect_uri=YOUR_REDIRECT_URI" http://localhost/token.php
Salin selepas log masuk

AUTHORIZATION_CODE 替换为收到的授权码,YOUR_CLIENT_IDYOUR_CLIENT_SECRETYOUR_REDIRECT_URI

Pelayan kebenaran akan meminta anda memasukkan nama pengguna dan kata laluan anda. Dalam contoh ini, nama pengguna dan kata laluan adalah "pentadbir". Selepas memasukkan nama pengguna dan kata laluan yang betul, anda akan menerima kod kebenaran sebagai balasan.

Seterusnya, kami boleh meminta token akses daripada pelayan kebenaran menggunakan kod kebenaran. Gunakan curl atau klien HTTP lain untuk membuat permintaan berikut:

rrreee

Ganti AUTHORIZATION_CODE dengan kod kebenaran yang anda terima, YOUR_CLIENT_ID , YOUR_CLIENT_SECRET dan YOUR_REDIRECT_URI dengan ID pelanggan anda, rahsia pelanggan dan URI ubah hala. 🎜🎜Jika semuanya baik-baik saja, anda akan menerima token akses sebagai balasan. 🎜🎜Di atas ialah langkah terperinci untuk membuat pelayan kebenaran kod kebenaran dalam PHP. Menggunakan OAuth boleh menyediakan proses kebenaran yang lebih selamat dan boleh dipercayai, melindungi data pengguna dan privasi. Harap artikel ini dapat membantu anda memahami dan menggunakan kebenaran OAuth. 🎜

Atas ialah kandungan terperinci OAuth dalam PHP: Buat pelayan kebenaran kod kebenaran. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan