0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Akamai EdgeWorkersを活用したJWT検証の実装方法

Last updated at Posted at 2025-12-22

Akamai EdgeWorkersを活用したJWT検証の実装方法

はじめに

JWT(JSON Web Token) はWeb APIのリクエストを検証するための軽量なトークンベースの認証方式で、セキュアで拡張性の高い認証方法として多くのシステムで利用されています。
JWTに関する情報はhttps://jwt.io/ などで確認することが可能です。
本記事では、JWTを使ったAPI認証処理をAkamaiのエッジで行う方法について紹介します。
JWTを使ったAPI認証処理をアカマイのエッジで行うことで、APIサーバーの負荷を減らし、認証プロセスを高速化できます。AkamaiのエッジでJWT検証を行う方法は、Akamai API Gatewayを使う方法とEdgeWorkersを利用する方法がありますが、ここではEdgeWorkersを使って実装する方法について紹介します。

実装の手順

①EdgeWorkersの実装
 JWTの検証には以下のドキュメントを参照し、EdgeWorkers内で外部モジュール(JWT)を活用します。https://techdocs.akamai.com/edgeworkers/docs/jwt

なお、サンプルコードはgithubにあります。https://github.com/akamai/edgeworkers-examples/tree/master/delivery/common/jwt/examples
image.png

今回はその中でRS256アルゴリズムを使ったサンプルコードを試してみます。

import { logger } from 'log';
import { JWTValidator} from './jwt.js';
import { crypto, pem2ab } from 'crypto';

//advanced options for jwt validator
const jwtOption = {
  //check token expiry
  ignoreExpiration: false,
  //check token nbf
  ignoreNotBefore: false
};

const jwtValidator = new JWTValidator(jwtOption);

export async function onClientRequest (request) {
  try {
    // Fetch RSA public key from Propery Manager used for verification of JWT token
    const secretKey = request.getVariable('PMUSER_JWT_RSA_PUBKEY');
    const iKey = await crypto.subtle.importKey(
      'spki',
      pem2ab(secretKey),
      {
        name: 'RSASSA-PKCS1-v1_5',
        hash: 'SHA-256'
      },
      false,
      ['verify']
    );
    //Fetch the Authorization header from request
    let jwt = request.getHeader('Authorization');
    if (jwt){
      jwt = jwt[0];
      //replace auth scheme before validating
      jwt = jwt.replace('Bearer ',''); 
      const jwtJSON = await jwtValidator.validate(jwt,[iKey]);
      logger.log('jwtJSON %s: ',JSON.stringify(jwtJSON));
      const result = {
        jwt: jwtJSON,
        verifed: true
      };
      request.respondWith(200, {}, JSON.stringify(result));
    } else {
      //Return bad request of authorization header is not found
      request.respondWith(400, {}, 'Authorization header is missing!');
    }
  } catch (error) {
    logger.log(error);
    request.respondWith(400, {}, error);
  }
}

サンプルコードではPublicキーをPropertyの変数に格納しているので、Property側に変数を作成し、JWTのPublicキーの値に設定しておきます。
image.png

②Propertyの作成
 EdgeWorkersで参照する変数の作成
  変数名:PMUSER_JWT_RSA_PUBKEY

image.png

 
今回はテスト目的のためPublicキーはhttps://jwt.io/のサンプルをそのまま利用してみます。
image.png

次にEdgewWorkersを呼び出す設定を追加します。

image.png

③JWTの検証
 アカマイのエッジでは、リクエストに含まれるAuthorizationヘッダーに正しいJWTトークンがある場合、200 OKのレスポンスが返されます。もしJWTトークンの検証に失敗した場合は、400エラーが返され、リクエストがブロックされます。

3. EdgeWorkersでのJWT検証のメリット

EdgeWorkersでJWTを検証することで、以下の利点があります:

  • オリジンサーバーの負荷軽減: エッジで認証処理を行うため、APIサーバーは検証済みのリクエストのみを処理することができ、負荷が減ります。
  • 応答時間の短縮: リクエストがエッジで検証されるため、ユーザーに近い場所で処理が完了し、応答速度が向上します。
  • セキュリティの強化: EdgeWorkersとあわせて、エッジで高度なセキュリティを適用することにより、攻撃リスクの軽減や不正アクセスの防止が可能です。

おわりに

JWTを使った認証は、APIのセキュリティ強化における標準的な手法です。また、AkamaiのEdgeWorkersを使うことで、APIサーバーに負荷をかけることなく、エッジで効率的に処理を行えます。ただし、JWTの脆弱性やセキュリティのベストプラクティスを理解し、適切に運用することが重要です。
https://www.akamai.com/ja/blog/security-research/owasp-authentication-threats-for-json-web-token
APIセキュリティ全般についても確認することをおすすめします。
https://www.akamai.com/ja/products/api-security

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?