如何在 rest api 中验证/检查基本身份验证标头

Aji*_*jis 4 php api rest authorization basic-authentication

我正在构建一个非常小的 api。在 api 中,我使用来自请求的基本身份验证标头对请求进行身份验证。这是我所做的代码

$headers = apache_request_headers() ;
//  print_r($headers);
if(isset($headers['Authorization'])){
        //$credentials = base64_decode($headers);
        print_r($headers['Authorization']);
}
Run Code Online (Sandbox Code Playgroud)

我的授权标头为“ Basic YXBpa2V5OmFqZWVzaA==” 现在我将如何检查此基本授权标头是否有效?我应该以用户名:密码格式解码 base64 字符串并与 DB 进行检查,还是在生成用户名和密码时,是否必须将其存储为 base64 格式并将请求的 base64 字符串与 DB 中的字符串进行比较?

我想知道验证基本身份验证请求的标准做法是什么?

请提出一些想法。我刚刚开始,请原谅我的愚蠢问题。

ins*_*ns0 5

我建议您使用 api 令牌而不是用户/密码组合。使用简单的身份验证令牌,您可以获得两个好处。

  1. 用户名或密码可能会随着时间而改变,如果是这样,用户将被迫更改其应用程序中的所有用户名和密码,以使应用程序恢复工作。一个简单的令牌是不变的,当用户的用户名和密码更改时不需要任何更改。

  2. 使用基本身份验证,客户端需要以未加密的格式发送用户名 + 密码。这不是很安全,在最坏的情况下,未经授权可以使用请求中的用户名 + 密码登录到服务后端。简单令牌仅对 api 调用有效。


为每个 API 用户生成一个简单的随机令牌,Eq57dwypZaFW4f2xxRzFaGjwCYinOn6l13Mvds00P2ZzgdMPTk并要求在每个 api 请求上发送此令牌,请求标头如下

X-API-TOKEN: Eq57dwypZaFW4f2xxRzFaGjwCYinOn6l13Mvds00P2ZzgdMPTk
X-API-CLIENT-ID: 123456
Run Code Online (Sandbox Code Playgroud)

在服务器端验证

<?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
}
Run Code Online (Sandbox Code Playgroud)