首页 > 解决方案 > 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" }

我的时间戳值似乎有错误。我试图动态生成它,但在那里我也遇到了同样的错误。

标签: phphtmlhttprequestakamai

解决方案


时间戳应该是动态的并且足够接近允许请求的实际时间。如果更改时间戳,还需要重新计算签名。

EdgeGrid 身份验证的算法很复杂,您最好依靠相关库来生成此标头。请阅读 https://developer.akamai.com/blog/2017/02/03/akamai-open-edgegrid-php-now-beta

EdgeGrid 的 PHP 库。


推荐阅读