【问题标题】:JWT or HTTP Authorization header not working on live serverJWT 或 HTTP 授权标头在实时服务器上不起作用
【发布时间】:2020-08-19 19:06:54
【问题描述】:

早安,

我正在生成一个 JWT 访问令牌并使用 HTTP 授权标头向用户授予访问权限,当我尝试在邮递员的本地服务器上运行它时,并且在承载令牌下的授权中设置令牌后,它是在我的本地服务器上运行,但实时服务器似乎没有收到访问令牌。

<?php
    include_once 'config/database.php';
    require "../vendor/autoload.php";
    use \Firebase\JWT\JWT;

    header("Access-Control-Allow-Origin: *");
    header("Content-Type: application/json; charset=UTF-8");
    header("Access-Control-Allow-Methods: POST");
    header("Access-Control-Max-Age: 3600");
    header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With");

    $secret_key = "prosper_api";
    $jwt = null;
    $databaseService = new DatabaseService();
    $conn = $databaseService->getConnection();

    $data = file_get_contents("php://input");

    $authHeader = $_SERVER['HTTP_AUTHORIZATION'];

    $arr = explode(" ", $authHeader);

    echo json_encode(array(
        "message" => "sd" .$arr[1]
    ));

    $jwt = $arr[1];

    if($jwt){
        try{
            $decoded = JWT::decode($jwt, $secret_key, array('HS256'));
            print_r($data);
            $q = $conn->query("INSERT INTO form (data) VALUES('$data')");
            if($q){
                http_response_code(200); //200 is ok
                echo json_encode(array(
                    "status"  => 1,
                    "message" => "Form data has been added" 
                ));
            }else{
                http_response_code(500); //500 is internal server error
                echo json_encode(array(
                    "status" => 0,
                    "message" => "Failed to create data" 
                ));
            }

            //Access is granted. Add code of the operation here 
            //echo json_encode(array(
            //    "message" => "Access granted:",
            //    "error" => $e->getMessage()
            //));
    }catch (Exception $e){
        http_response_code(401);
        echo json_encode(array(
            "message" => "Access denied.",
            "error" => $e->getMessage()
        ));
    }
}else{
    http_response_code(500); //500 is internal server error
    echo json_encode(array(
        "status" => 0,
        "message" => "Something went wrong with JWT" 
    ));
}
?>

【问题讨论】:

  • 我是否需要添加一个 htaccess 文件以便 PHP 不会忽略授权标头?

标签: php http jwt


【解决方案1】:

设法解决了这个问题,显然 PHP 授权标头在默认情况下是停用的, 必须将以下行添加到我的 htaccess

RewriteEngine On
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]

【讨论】:

    猜你喜欢
    • 2018-07-24
    • 2016-06-23
    • 2016-05-09
    • 2017-12-20
    • 2016-05-30
    • 2016-07-12
    • 1970-01-01
    • 2013-09-24
    • 1970-01-01
    相关资源
    最近更新 更多