php - 如何在 rest api 中验证/检查基本身份验证 header

标签 php api rest authorization basic-authentication

我正在构建一个非常小的 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 ,您可以获得两个好处。

  1. 用户名或密码可能会随时间发生变化,如果发生这种情况,用户将被迫更改其应用程序中的所有用户名和密码,以使应用程序恢复正常工作。一个简单的 token 是不变的,当用户的用户名和密码更改时不需要任何更改。

  2. 使用基本身份验证,客户端需要以未加密的格式向那里发送用户名和密码。这不是很安全,在最坏的情况下,未经授权的人可以使用请求中的用户名 + 密码登录到服务后端。简单 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/

相关文章:

java - Jersey 中过滤器的动态绑定(bind)不适用于子资源

javascript - Ajax : function is not working

java - NullPointer 异常存储库 Spring Boot Jpa

java - 将带有 String 成员变量的对象转换为 json 序列化中的单个字符串的简单方法 (Jackson)

REST 内容类型 : Should it be based on extension or Accept header?

javascript - 无法为 jquery 中的函数提供 url

php - 需要 php 文件而不是链接到 js 和 css 是不好的做法吗?

php - function_exists 每次都返回 false

php - 如何使用php将html代码转换为png图像

php - 使用 php 将图像上传到 imgur