PHP开发实现百度文心一言API接口的权限管理和认证方式

1.背景介绍

目前,在Web开发中,API的使用越来越普遍,而很多API需要进行认证和授权才能使用。本文主要介绍如何使用PHP开发实现百度文心一言API接口的权限管理和认证方式。

2.什么是百度文心一言API接口

百度文心一言是一个短语生成器,能够根据提供的主题生成相应的短语,或者随机生成一组句子,供用户参考。百度文心一言提供了API接口,可以通过HTTP请求来获取随机的短语。

2.1 API接口的请求方式

通过HTTP请求来获取随机的短语。

$url = "https://api.lwl12.com/hitokoto/v1?encode=json&charset=utf-8";

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$response = curl_exec($ch);

curl_close($ch);

$result = json_decode($response, true);

echo $result['hitokoto'];

2.2 API接口的认证方式

百度文心一言API接口需要认证,才能够使用。具体认证方式如下:

将AccessKey和SecretKey拼接成一个字符串:

$AccessKey = 'your_access_key';

$SecretKey = 'your_secret_key';

$content = $AccessKey.$SecretKey;

使用SHA256算法对该字符串进行加密:

$signature = hash('sha256', $content, true);

将加密后的字符串进行Base64编码,并将编码后的字符串作为Header中的Authorization参数值进行传输:

$headers = array(

'Content-type: application/json',

'Authorization: Basic '.base64_encode($signature),

);

3.如何实现API接口的权限管理和认证方式

下面是实现API接口的权限管理和认证方式的基本步骤:

在数据库中创建一个用户表,并存储用户的AccessKey和SecretKey;

为API接口添加认证授权功能,只有有合法的AccessKey和SecretKey才能够访问API接口;

为API接口添加限流功能,控制API接口的请求速度,避免被滥用。

3.1 用户表设计

用户表的设计如下:

CREATE TABLE IF NOT EXISTS `users` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`access_key` varchar(100) NOT NULL,

`secret_key` varchar(100) NOT NULL,

`created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4;

其中,id是用户表的主键,access_key是AccessKey,secret_key是SecretKey,created_at是创建时间。

3.2 认证授权功能实现

下面是认证授权功能的实现代码:

//获取请求头信息

$headers = apache_request_headers();

$authHeader = isset($headers['Authorization']) ? $headers['Authorization'] : '';

if (!$authHeader) {

header('HTTP/1.1 401 Unauthorized');

header('WWW-Authenticate: Basic realm="API Authentication"');

exit();

}

$authHeaderDecoded = base64_decode(substr($authHeader, 6));

$authHeaderParts = explode(':', $authHeaderDecoded);

$accessKey = $authHeaderParts[0];

$secretKey = $authHeaderParts[1];

//查询用户信息

$sql = "select * from users where access_key=:access_key";

$stmt = $pdo->prepare($sql);

$stmt->bindValue(':access_key', $accessKey);

$stmt->execute();

$user = $stmt->fetch(PDO::FETCH_ASSOC);

//验证SecretKey

$content = $accessKey.$user['secret_key'];

$signature = hash('sha256', $content, true);

if (base64_encode($signature) !== $secretKey) {

header('HTTP/1.1 401 Unauthorized');

exit();

}

首先,通过apache_request_headers()获取请求头信息,从中取出Authorization参数。然后解码Authorization参数,获得AccessKey和SecretKey,查询数据库,找到相应的用户信息。接着,将AccessKey和SecretKey拼接为一个字符串,使用SHA256算法进行加密。最后,将加密后的结果进行Base64编码,与传入的SecretKey进行比较,如果一致,代表认证授权成功,否则认证授权失败。

3.3 限流功能实现

下面是限流功能的实现代码:

//限流

$rateLimiting = new RateLimiting();

$rateLimiting->setOption('interval', 60);

$rateLimiting->setOption('limit', 10);

if (!$rateLimiting->check($accessKey)) {

header('HTTP/1.1 429 Too Many Requests');

exit();

}

首先,创建一个RateLimiting实例,设置限流的间隔时间为1分钟,最大请求次数为10次。然后,调用check方法,检查当前AccessKey的访问次数是否超过限制。如果超过限制,返回429 Too Many Requests错误。

4.总结

通过本文的介绍,我们了解了如何使用PHP开发实现百度文心一言API接口的权限管理和认证方式。具体实现步骤包括:创建用户表,为API接口添加认证授权功能,为API接口添加限流功能。

后端开发标签