我正在构建一个非常小的 api。 在 api 中,我使用来自请求的基本身份验证 header 对请求进行身份验证。 这是我完成的代码
$headers = apache_request_headers() ;
// print_r($headers);
if(isset($headers['Authorization'])){
//$credentials = base64_decode($headers);
print_r($headers['Authorization']);
}
我得到的授权 header 为“Basic YXBpa2V5OmFqZWVzaA==
” 现在我将如何检查这个基本授权 header 是否有效?
我应该解码 username:password 格式的 base64 字符串并与 DB 进行检查,还是当生成用户名和 pass 时,我是否必须将其存储为 base64 格式并将请求的 base64 字符串与 DB 中的字符串进行比较?
我想知道验证基本身份验证请求的标准做法是什么?
请提出一些想法。我刚刚开始,请原谅我的愚蠢问题。
最佳答案
我建议您使用 api token 而不是用户/密码组合。使用简单的身份验证 token ,您可以获得两个好处。
用户名或密码可能会随时间发生变化,如果发生这种情况,用户将被迫更改其应用程序中的所有用户名和密码,以使应用程序恢复正常工作。一个简单的 token 是不变的,当用户的用户名和密码更改时不需要任何更改。
使用基本身份验证,客户端需要以未加密的格式向那里发送用户名和密码。这不是很安全,在最坏的情况下,未经授权的人可以使用请求中的用户名 + 密码登录到服务后端。简单 token 仅对 api 调用有效。
为每个 API 用户生成一个简单的随机 token ,例如 Eq57dwypZaFW4f2xxRzFaGjwCYinOn6l13Mvds00P2ZzgdMPTk
,并要求在每个 API 请求中发送此 token ,请求 header 如下
X-API-TOKEN: Eq57dwypZaFW4f2xxRzFaGjwCYinOn6l13Mvds00P2ZzgdMPTk
X-API-CLIENT-ID: 123456
在服务器端验证
<?php
$token = $_SERVER['X-API-TOKEN'];
$userID = $_SERVER['X-API-CLIENT-ID'];
$isValid = $findInDatabase->findToken($userID, $token);
if( $isValid )
{
// process api request
} else {
// invalid token
}
关于php - 如何在 rest api 中验证/检查基本身份验证 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25802552/