アンチパターン: 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 へのトラフィックが毎秒 10 リクエストである場合、1 日に 864,000 ものトークンが生成されます。
  • 更新トークンは 200 日経過しないと有効期限切れにならないので、データストア(Cassandra)内に長期間トークンが存続し、蓄積され続けることになります。

影響

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

ベスト プラクティス

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

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

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

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

関連情報