LaravelとAPI Gatewayの通信に、アクセストークンの認証を追加

こちらの記事をベースに進めていきます。
上記の記事では、LaravelからAPIGatewayを経由してDynamoDBと通信をしております。 
ただし、上記の設定だとエンドポイントがバレると誰でもデータ取得出来てしまう状況した。 APIGatewayにアクセストークンの認証を追加することでセキュリティを高めます。

APIGatewayの通信に認証を追加する際には、Cognito, Lambdaなどで追加できます。今回は、Cognitoを利用していきます。

そして今回も、既に素晴らしい記事を書いて頂いている方がいたので、ほぼそちらを参考に進めてまいります。↓↓↓↓

Cognitoで認証されたユーザーだけがAPI Gatewayを呼び出せるオーソライザーを使ってみた

Cognitoユーザーの「アカウントステータス」をCONFIRMEDに変更するのに躓いている方は、こちらの記事を参考にして頂ければ問題ないかと思います。↓↓↓↓

【AWS】CognitoのFORCE_CHANGE_PASSWORDをCONFIRMEDに変える方法

さて、アクセストークンは発行できましたでしょうか。

aws cognito-idp admin-initiate-auth --user-pool-id CognitoユーザープールID --client-id アプリクライアントID --auth-flow ADMIN_NO_SRP_AUTH --auth-parameters USERNAME=ユーザ名,PASSWORD=パスワード {

コマンドを実行した結果の「”IdToken”:」部分です。

こちらのトークンを利用して、Laravelにアクセストークンを追加し、アクセス可能な状態にします。

.env
AWS_APIGATEWAY_ACCESS_KEY={IdTokenの部分}
Contoroller

追加する部分は1箇所.  headerにトークンを追加します。

'Authorization: '.env('AWS_APIGATEWAY_ACCESS_KEY'), 

public function index()
{
    
    $header = [
        'Content-Type: application/json',
        'Authorization: '.env('AWS_APIGATEWAY_ACCESS_KEY'), // headerにkeyを追加
    ];

        $params = [
        "OperationType" => "SCAN"
    ];

        
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, env('AWS_APIGATEWAY_URL'));
    curl_setopt($curl, CURLOPT_POST, TRUE);
    curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($params));
    curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
    
    $output= curl_exec($curl);
    $result = json_decode($output);
    curl_close($curl);

    dd($result);
}

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です