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

时间:2014-09-12 07:00:34

标签: 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']);
}

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

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

请提出一些建议。我刚刚开始,请原谅问题愚蠢。

1 个答案:

答案 0 :(得分:4)

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

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

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


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

    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
    }