アンチパターン: OAuth トークンに長い有効期限を設定する

Apigee Edge では、API を保護するための OAuth 2.0 フレームワークが用意されています。OAuth2 は、オープン標準かつトークンベースの、特に普及している認証および承認スキームの 1 つです。クライアント アプリケーションは OAuth2 を使用することで、ユーザーに対しユーザー名やパスワードの入力を求めることなく、ユーザーの代わりに API にアクセスできます。

Apigee Edge では、OAuthv2 ポリシーを使用して、4 つの OAuth2 権限付与タイプ(クライアント認証情報パスワード暗黙認可コード)のいずれかを実装することで、アクセス トークンと更新トークンを生成できます。クライアント アプリケーションはアクセス トークンを使用して、セキュアな API を使用します。個々のアクセス トークンにはそれぞれの有効期限があり、OAuthv2 ポリシーで設定できます。

更新トークンは、必要に応じて、いくつかの権限付与タイプを使ってアクセス トークンとともに発行されます。更新トークンは、元のアクセス トークンの有効期限が切れた場合、または取り消された場合に、新しい有効なアクセス トークンを取得する目的で使用されます。更新トークンの有効期限も、OAuthv2 ポリシーで設定できます。

アンチパターン

OAuthv2 ポリシーで、アクセス トークンまたは更新トークンに長すぎる有効期限を設定すると、OAuth トークンが蓄積され続け、Cassandra ノード上で使用されるディスク容量が増大します。

次に、更新トークンに長すぎる有効期限(200 日)を設定する OAuthV2 ポリシーの例を示します。

<OAuthV2 name="GenerateAccessToken">
    <Operation>GenerateAccessToken</Operation>
    <ExpiresIn>1800000</ExpiresIn> <!-- 30 minutes -->
    <RefreshTokenExpiresIn>17280000000</RefreshTokenExpiresIn> <!-- 200 days -->
    <SupportedGrantTypes>
      <GrantType>password</GrantType>
    </SupportedGrantTypes>
    <GenerateResponse enabled="true"/>
</OAuthV2>

上記の例では、次のようになります。

  • アクセス トークンには、適度に短い有効期限(30 分)が設定されています。
  • 更新トークンには、非常に長い有効期限(200 日)が設定されています。
  • この API へのトラフィックが 1 秒あたり 10 リクエストである場合、1 日に 864,000 個ものトークンが生成されます。
  • 更新トークンは 200 日経過しないと有効期限切れにならないので、データストア(Cassandra)内にトークンが長期間存続し、蓄積され続けることになります。

影響

  • データストア(Cassandra)内のディスクの使用容量が著しく増大します。
  • Private Cloud ユーザーにとっては、ストレージ コストの増加につながります。また、最悪の場合はディスクが満杯になり、ランタイム エラーまたはシステム停止を引き起こす可能性があります。

ベスト プラクティス

トークンが蓄積されず、すみやかに削除されるように、OAuth アクセス トークンと更新トークンに対し、実際のセキュリティ要件に合った適度に短い有効期限を設定します。

更新トークンの有効期限は、アクセス トークンの有効期限より少し長めに設定します。たとえば、アクセス トークンの有効期限を 30 分に設定するなら、更新トークンの有効期限は 60 分に設定します。

こうすることで、以下が可能になります。

  • アクセス トークンが有効期限切れになった後でも、更新トークンを使って新しいアクセス トークンと更新トークンを生成するための十分な時間が確保されます。
  • 更新トークンは少し遅れて有効期限切れになるので、適切なタイミングで削除され、トークンの蓄積を回避できます。

関連情報