php - Postman akamai edge-grid 代码在 php 中不起作用
问题描述
我正在尝试向我的 akamai 服务器发出 GET 请求。使用 Postman,一切皆有可能。但是当我从代码生成器复制代码并将其粘贴到我的 php 代码中时,我无法再进行身份验证了。
邮递员给了我以下代码:
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://akab************************',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Authorization: EG1-HMAC-SHA256 client_token=***************;access_token=;timestamp=20201209T15:07:33+0000;nonce=4616dcc7-5cd8-49b5-9c24-ac1b9bf9f2f5;signature=OVXlnNav8GUM/UyNO6KFcYS1/kQ='
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
我的 php 代码如下所示:
<?php
include 'akamai-open-edgegrid-client-1.0.0.phar';
require_once 'src/Authentication.php';
require_once 'src/Authentication/Timestamp.php';
require_once 'src/Authentication/Nonce.php';
require_once 'src/Authentication/Exception.php';
require_once 'src/Authentication/Exception/ConfigException.php';
require_once 'src/Authentication/Exception/SignerException.php';
require_once 'src/Authentication/Exception/SignerException/InvalidSignDataException.php';
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => '******',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Authorization: EG1-HMAC-SHA256 client_token=*****;access_token=************;timestamp=20201209T15:07:33+0000;nonce=18759478-be33-4fe2-b417-557912445d93;signature=wW6/5RHKzXVQrS3uQ9bE3c83hl6jhQGjpQa2Ldi2qLI='
),
));
$response = curl_exec($curl);
echo $response = curl_exec($curl);
curl_close($curl);
?>
<html>
<head>
</head>
<body>
<div id="response">
<?= $response ?></div>
</body>
</html>
我在我的网站上的回复说:
{ "type": "https://problems.luna.akamaiapis.net/-/pep-authn/request-error", "title": "Bad request", "status": 400, "detail": "Invalid timestamp", "instance": "https://akab****************", "method": "GET", "serverIp": "104.84.107.234", "clientIp": "95.90.201.65", "requestId": "5792bf0d", "requestTime": "2020-12-09T14:53:30Z" }
我的时间戳值似乎有错误。我试图动态生成它,但在那里我也遇到了同样的错误。
解决方案
时间戳应该是动态的并且足够接近允许请求的实际时间。如果更改时间戳,还需要重新计算签名。
EdgeGrid 身份验证的算法很复杂,您最好依靠相关库来生成此标头。请阅读 https://developer.akamai.com/blog/2017/02/03/akamai-open-edgegrid-php-now-beta
EdgeGrid 的 PHP 库。
推荐阅读
- python - 医学影像数据 - 如何将 .raw/mhd 转换为 Nifti/nii
- node.js - 如何从 ionic 公开静态 html 页面
- express - 无法从 express/npm 模块中找到静态资产
- node.js - 建立数据库连接后如何获取所有文档
- android - Android Studio:膨胀类 android.support.design.widget.FloatingActionButton 时出错
- python-3.x - Google Cloud Speech to Text 中的 enable_speaker_diarization 标记出错
- python - Scrapy 将动态项目导出到 csv
- c++ - 这个 OpenFST 函数中的 `Read` 来自哪里?
- c# - 如何在 F# 中实例化类及其属性
- c - 为什么相同代码在同一台计算机上的执行时间可能不同?