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

現在、ApigeeApigee ハイブリッドのドキュメントを表示しています。
Apigee Edge のドキュメントを表示する。

Apigee は、API を保護するために OAuth 2.0 フレームワークを提供します。OAuth2 は、オープン標準でトークンベースの認証と認可のスキームの中で最も普及しているものの一つです。これにより、ユーザーにユーザー名とパスワードを明かすことを要求することなく、クライアント アプリケーションがユーザーに代わって API にアクセスできるようになります。

Apigee では、OAuthv2 ポリシーを使用して、4 つの OAuth2 権限付与タイプ(client credentialspasswordimplicitauthorization code)のいずれか 1 つを実装することで、デベロッパーがアクセス トークンや更新トークンを作成できるようになります。クライアント アプリケーションはアクセス トークンを使用して、安全な 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 へのトラフィックが 10 リクエスト/秒の場合、1 日に 864,000 個ものトークンが生成されます。
  • 更新トークンは 200 日経過しないと有効期限切れにならないため、データストア(Cassandra)内にトークンが長期間存続し、蓄積され続けることになります。

影響

  • データストア(Cassandra)内のディスク使用量が著しく増大します。

ベスト プラクティス

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

更新トークンの有効期限は、アクセス トークンの有効期限より少し長めに設定します。たとえば、アクセス トークンの有効期限を 30 分に設定した場合、更新トークンでは少なくとも 24 時間に設定します。

この方法には、次のようなメリットがあります。

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

関連情報