現在、Apigee Edge のドキュメントを表示しています。
Apigee X のドキュメントをご確認ください。 情報
Apigee Edge には、API を保護するための OAuth 2.0 フレームワークが用意されています。OAuth2 は、オープン標準でトークンベースの認証と認可のスキームの中で最も普及しているものの一つです。これにより、ユーザーにユーザー名とパスワードを明かすことを要求することなく、クライアント アプリケーションがユーザーに代わって API にアクセスできるようになります。
Apigee Edge では、デベロッパーは OAuthv2 ポリシーを使用して、クライアント認証情報、パスワード、暗黙的、認可コードの 4 つの OAuth2 権限付与タイプのいずれかを実装することで、アクセス トークンや更新トークンを生成できます。クライアント アプリケーションはアクセス トークンを使用して、安全な API を使用します。各アクセス トークンには固有の有効期限があり、OAuthv2 ポリシーで設定できます。
一部の権限付与タイプのアクセス トークンとともに、更新トークンもオプションで発行されます。更新トークンは、元のアクセス トークンの有効期限が切れるか、取り消された場合に、新しい有効なアクセス トークンを取得する目的で使用されます。更新トークンの有効期限も OAuthv2 ポリシーで設定できます。
このアンチパターンは、OAuth トークンに長い有効期限を設定するというアンチパターンに関連しています。
アンチパターン
OAuthv2 ポリシーで更新トークンに有効期限を設定しないと、OAuth トークンが蓄積され、Cassandra ノード上でディスク容量が増加します。
次の OAuthV2 ポリシーの例は、<RefreshTokenExpiresIn>
の欠落している構成を示しています。
<OAuthV2 name="GenerateAccessToken"> <Operation>GenerateAccessToken</Operation> <ExpiresIn>1800000</ExpiresIn> <!-- 30 minutes --> <!--<RefreshTokenExpiresIn> is missing --> <SupportedGrantTypes> <GrantType>password</GrantType> </SupportedGrantTypes> <GenerateResponse enabled="true"/> </OAuthV2>
上記の例では、次のようになります。
- アクセス トークンの有効期限は 30 分程度に短く設定されています。
- 更新トークンの有効期限が設定されていません。
- 更新トークンはデータストア(Cassandra)に永続的に保持されるため、データが蓄積されます。
- 有効期限なしで作成された更新トークンを使用して、アクセス トークンを無期限に生成できます。
- この API へのトラフィックが 1 秒あたり 10 件のリクエストの場合、1 日に 864,000 個のトークンを生成できます。
効果
- 更新トークンを有効期限なしで作成した場合、主に次の 2 つの影響があります。
- 更新トークンは、将来的にいつでも(場合によっては数年間)アクセス トークンの取得に使用できます。セキュリティ上の問題が生じる可能性があります。
- 更新トークンを含む Cassandra の行は削除されません。これにより、Cassandra にデータが蓄積されます。
- 更新トークンを使用して新しいアクセス トークンを取得せず、代わりに新しい更新トークンとアクセス トークンを作成した場合、古い更新トークンは Cassandra に残ります。その結果、更新トークンが Cassandra で蓄積され続けると、肥大化、ディスク使用量の増加、重度の圧縮が発生し、最終的に Cassandra で読み取り/書き込みレイテンシが発生します。
ベスト プラクティス
更新トークンとアクセス トークンの両方に、適切な短い有効期限を設定します。更新トークンとアクセス トークンの有効期限の設定については、ベスト プラクティスをご覧ください。ポリシーにアクセス トークンと更新トークンの両方の有効期限構成を指定してください。ポリシー構成の詳細については、OauthV2 ポリシーのドキュメントをご覧ください。
Edge for Private Cloud のお客様に特化したベスト プラクティス
このセクションでは、Edge for Private Cloud のお客様を対象としたベスト プラクティスについて説明します。
デフォルトの更新トークンの有効期限を指定する
デフォルトでは、ポリシー構成で更新トークンの有効期限が指定されていない場合、Edge は有効期限のない更新トークンを作成します。この動作は次の手順でオーバーライドできます。
- Message Processor ノードで、構成オーバーライド ファイル
$APIGEE_ROOT/customer/application/message-processor.properties
を編集または作成します。このファイルをapigee
ユーザーが読み取り可能であることを確認してください。 - ファイルに次の行を追加します。
conf_keymanagement_oauth_refresh_token_expiry_time_in_millis=3600000
これにより、デフォルトの更新トークンの有効期限が(ポリシーで指定されていない場合)1 時間に設定されます。 このデフォルト値は、ビジネスニーズに応じて変更できます。 - Message Processor サービスを再起動します。
apigee-service edge-message-processor restart
- すべての Message Processor ノードで、上記の手順を 1 つずつ繰り返します。
Cassandra のベスト プラクティス
一般公開されている最新バージョンの Apigee にアップグレードしてみてください。Apigee は修正と機能強化を継続的にリリースし、Apigee 内のトークン管理の改善と最適化を継続しています。Apigee では、アクセス トークンと更新トークンが Cassandra の kms キースペースに保存されます。このキースペースのコンパクション戦略がLeveledCompactionStrategy
に設定されていることを確認してください。次のインデックスが存在しないことを確認します。
- kms.oauth_20_access_tokens.oauth_20_access_tokens_organization_name_idx#f0f0f0 および
- kms.oauth_20_access_tokens.oauth_20_access_tokens_status_idx
また、テーブル kms.oauth_20_access_tokens
の gc_grace_seconds
をデフォルトの 10 日間から低い値(3 日など)に短縮して、トークンの削除により生成された Tombstone がデータストアから迅速にパージされるようにすることもできます。