Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk melaksanakan pengesahan untuk RESTful API dalam PHP

Bagaimana untuk melaksanakan pengesahan untuk RESTful API dalam PHP

王林
王林asal
2023-09-06 12:00:36960semak imbas

如何在PHP中实现RESTful API的身份验证

Cara melaksanakan pengesahan API RESTful dalam PHP

RESTful API ialah gaya reka bentuk antara muka pengaturcaraan aplikasi Internet yang biasa digunakan. Dalam pembangunan sebenar, untuk melindungi keselamatan API, kami biasanya perlu mengesahkan pengguna. Artikel ini akan memperkenalkan cara melaksanakan pengesahan API RESTful dalam PHP dan memberikan contoh kod khusus.

1. Pengesahan Asas

Pengesahan asas ialah kaedah pengesahan yang paling mudah dan salah satu kaedah yang paling biasa digunakan. Pengesahan asas berfungsi dengan menambahkan medan Kebenaran dalam pengepala permintaan HTTP untuk lulus bukti kelayakan pengguna. Dalam PHP, kita boleh mencapai pengesahan asas dengan mendapatkan maklumat pengepala permintaan HTTP.

<?php
// 获取HTTP请求头部信息
$headers = getallheaders();

// 验证Authorization字段
if (isset($headers['Authorization'])) {
    // 获取用户凭证
    $authHeader = $headers['Authorization'];
    list($type, $credentials) = explode(' ', $authHeader);

    // 解码凭证
    $decodedCredentials = base64_decode($credentials);
    list($username, $password) = explode(':', $decodedCredentials);

    // 验证用户名和密码
    if ($username == 'admin' && $password == '123456') {
        echo '通过身份验证';
    } else {
        echo '身份验证失败';
    }
} else {
    // 未传递Authorization字段,返回身份验证失败
    echo '身份验证失败';
}
?>

2. Pengesahan Token

Pengesahan token ialah kaedah pengesahan biasa Ia menghasilkan Token unik untuk pengguna selepas pengesahan log masuk dan mengembalikan Token kepada pelanggan Selepas itu, setiap permintaan pelanggan perlu menambah medan Kebenaran pengepala HTTP untuk menghantar maklumat Token. Dalam PHP, kita boleh menggunakan JSON Web Token (JWT) untuk melaksanakan pengesahan Token.

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

use FirebaseJWTJWT;

// 设置JWT密钥
$key = 'your-secret-key';

// 生成Token
$token = JWT::encode(array(
    'username' => 'admin',
    'exp' => time() + 3600
), $key);

// 解码Token
$decoded = JWT::decode($token, $key, array('HS256'));

// 验证Token
if ($decoded->username == 'admin') {
    echo '通过身份验证';
} else {
    echo '身份验证失败';
}
?>

Dalam contoh ini, kami menggunakan perpustakaan Firebase JWT untuk menjana dan menyahkod Token, yang perlu dipasang melalui Komposer. Untuk setiap permintaan, kami perlu menambah Token pada pengepala HTTP untuk penghantaran.

3. Pengesahan OAuth 2.0

OAuth 2.0 ialah standard terbuka yang biasa digunakan untuk membenarkan aplikasi pihak ketiga mengakses sumber yang dilindungi. Dalam PHP, kita boleh menggunakan perpustakaan Pelayan League OAuth2 untuk melaksanakan pengesahan OAuth 2.0.

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

use LeagueOAuth2ServerGrantPasswordGrant;
use LeagueOAuth2ServerGrantRefreshTokenGrant;
use LeagueOAuth2ServerResourceServer;
use LeagueOAuth2ServerAuthorizationServer;
use LeagueOAuth2ServerCryptKey;
use LeagueOAuth2ServerGrantClientCredentialsGrant;

// 设置公钥和私钥
$privateKey = new CryptKey('path/to/private.key', 'passphrase');
$publicKey = new CryptKey('path/to/public.key');

// 创建认证服务器
$server = new AuthorizationServer();

// 添加授权类型
$server->enableGrantType(
    new PasswordGrant(
        new UserRepository(),
        new RefreshTokenRepository()
    )
);

// 添加客户端授权类型
$server->enableGrantType(
    new ClientCredentialsGrant(),
    new DateInterval('PT1H') // 访问令牌有效期为1小时
);

// 创建资源服务器
$resourceServer = new ResourceServer(
    new AccessTokenRepository(),
    $publicKey
);

// 验证访问令牌
try {
    $accessToken = $resourceServer->validateAuthenticatedRequest(
        ZendDiactorosServerRequestFactory::fromGlobals()
    );

    echo '通过身份验证';
} catch (Exception $e) {
    echo '身份验证失败';
}
?>

Dalam contoh ini, kami menggunakan perpustakaan Pelayan League OAuth2 untuk melaksanakan pengesahan OAuth 2.0. Kita perlu membuat contoh AuthorizationServer dan ResourceServer dan mengkonfigurasi jenis kebenaran dan repositori token yang sepadan. Untuk setiap permintaan, kami boleh menggunakan ResourceServer untuk mengesahkan token akses.

Ringkasan

Artikel ini memperkenalkan kaedah melaksanakan pengesahan API RESTful dalam PHP dan memberikan contoh kod untuk pengesahan asas, pengesahan Token dan pengesahan OAuth 2.0. Berdasarkan keperluan sebenar dan keperluan keselamatan, anda boleh memilih kaedah pengesahan yang sesuai untuk melindungi keselamatan API.

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan pengesahan untuk RESTful API dalam PHP. 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