12.2. APIcast が JSON Web トークンを処理する方法

APIcast は、API コンシューマーアプリケーションの認証時に OpenID Connect アイデンティティープロバイダーが返す JSON Web Token (JWT) を確認して各要求を処理します。要求には、統合された OpenID Connect アイデンティティープロバイダーが発行した形式の JWT が含まれます。JWT は Authorization ヘッダーに配置し、Bearer スキーマを使用する必要があります。たとえば、ヘッダーは以下のようになります。

Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJodHRwczovL2lkcC5leGFtcGxlLmNvbSIsInN1YiI6ImFiYzEyMyIsIm5iZiI6MTUzNzg5MjQ5NCwiZXhwIjoxNTM3ODk2MDk0LCJpYXQiOjE1Mzc4OTI0OTQsImp0aSI6ImlkMTIzNDU2IiwidHlwIjoiQmVhcmVyIn0.LM2PSmQ0k8mR7eDS_Z8iRdGta-Ea-pJRrf4C6bAiKz-Nzhxpm7fF7oV3BOipFmimwkQ_-mw3kN--oOc3vU1RE4FTCQGbzO1SAWHOZqG5ZUx5ugaASY-hUHIohy6PC7dQl0e2NlAeqqg4MuZtEwrpESJW-VnGdljrAS0HsXzd6nENM0Z_ofo4ZdTKvIKsk2KrdyVBOcjgVjYongtppR0cw30FwnpqfeCkuATeINN5OKHXOibRA24pQyIF1s81nnmxLnjnVbu24SFE34aMGRXYzs4icMI8sK65eKxbvwV3PIG3mM0C4ilZPO26doP0YrLfVwFcqEirmENUAcHXz7NuvA

JWT を安全にデコードするためのオープンソースツールが多数あります。公開 Web ツールで JWT をデコードしないように注意してください。デコードされた JWT では、トークンに次の 3 つの部分があることを確認できます。

  • ヘッダーでは、トークンの形成方法と、トークンの署名に使用されたアルゴリズムに関する情報を指定します。
  • ペイロードは、要求を送信した API コンシューマーを識別します。この詳細には、この API コンシューマーが実行できる読み取りおよび書き込みアクション、API コンシューマーのメールアドレス、API コンシューマーに関するその他の情報を含めることができます。
  • 署名は、トークンが変更されていないことを示す暗号署名です。

APIcast は、次の特性があるか JWT をチェックします。

  • 整合性: JWT が悪意のあるユーザーによって変更されているか ?署名は有効か ?

    JWT には、既知の発行者がトークンに署名したことを確認するために、トークンの受信者が検証できる署名が含まれています。また、この検証により、コンテンツが作成済みであることを確認できます。3scale では、公開鍵と秘密鍵のペアに基づいて RSA 署名がサポートされます。発行者は秘密鍵を使用して JWT に署名します。APIcast は公開鍵を使用してトークンを検証します。APIcast は OpenID Connect Discovery を使用して JSON Web キー (JWK) を取得し、JWT 署名を検証するために使用できます。

  • タイミング: 現在の時刻は、トークンが処理できるようになるタイミングより後か ?JWT の有効期限が切れているか ?つまり、APIcast は JWT nbf (時間以降) および exp (有効期限) クレームを確認します。
  • 発行者: JWT は APIcast として知られる OpenID Connect アイデンティティープロバイダーによって発行されたか ?つまり、APIcast は JWT で指定された発行者が OpenID Connect Issuer フィールドで設定された API プロバイダーと同じ発行者であることを確認します。発行者の指定は、3scale と OpenID Connect アイデンティティープロバイダーを統合する手順の一部です。これは、JWT iss クレームです。
  • クライアント ID: トークンに APIcast が認識する 3scale クライアントアプリケーション ID が含まれているか ?このクライアント ID は、3scale を OpenID Connect アイデンティティープロバイダーと統合する手順に指定されている API プロバイダーが ClientID Token Claim と一致する必要があります。これは、JWT の azp (JWT の発行先の承認済みのパーティー) クレームと aud (オーディエンス) クレームです。

JWT の検証または承認の確認に失敗すると、APIcast は Authentication failed エラーを返します。それ以外の場合は、APIcast は要求を 3scale アップストリーム API バックエンドに送信します。Authorization ヘッダーは要求にそのまま残るので、API バックエンドは JWT を使用してユーザーおよびクライアントの ID を確認することもできます。