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

現在、ApigeeApigee ハイブリッドのドキュメントを表示しています。
Apigee Edge のドキュメントはこちらをご覧ください。

Apigee には、OAuth 2.0 トークンベースの認証を実装して API を保護できる一連のツールとポリシーが用意されています。 IETF RFC 6749 で説明されている OAuth2 は、API の認証と認可で最も広くサポートされているオープン標準です。クライアント アプリケーションが API 実装に送信する標準形式の認証情報として、トークンを設定します。API 実装はトークンを検証して、クライアントに API へのアクセス権が付与されているかどうかを判断できます。

Apigee では、OAuthv2 ポリシーを使用して、4 つの OAuth2 権限付与タイプ(client credentialspasswordimplicitauthorization code)のいずれか 1 つを実装することで、デベロッパーがアクセス トークンや更新トークンを作成できるようになります。さらに、API デベロッパーは Apigee を使用して、IETF RFC 8693 で説明されているトークン交換パターンに従う付与など、カスタム付与を実装できます。クライアント アプリケーションはアクセス トークンを使用して、安全な API を使用します。各アクセス トークンにはそれぞれの有効期限があり、これらは OAuthv2 ポリシーで設定できます。

Apigee は、一部の権限付与タイプで、アクセス トークンと同時に更新トークンを生成して返すことができます。クライアントは、元のアクセス トークンが取り消されたか有効期限が切れた後に、更新トークンを使用して新しいアクセス トークンを取得します。更新トークンの有効期限は、OAuthv2 ポリシーで設定することもできます。

アンチパターン

OAuthv2 ポリシーでアクセス トークンまたは更新トークンに長い有効期限を設定すると、トークンが漏洩した場合の脆弱性の期間が長くなり、セキュリティ リスクが生じます。また、永続ストアに OAuth トークンが蓄積され、時間の経過とともにパフォーマンスが低下する可能性があります。

例 1

次の OAuthV2 ポリシーの例では、アクセス トークンの有効期限を 10 日間と長く設定しています。

<OAuthV2 name="OAuth-GenerateAccessToken">
    <Operation>GenerateAccessToken</Operation>
    <ExpiresIn>864000000</ExpiresIn> <!-- 10 days -->
    <RefreshTokenExpiresIn>864000000</RefreshTokenExpiresIn> <!-- 10 days -->
    <SupportedGrantTypes>
      <GrantType>authorization_code</GrantType>
    </SupportedGrantTypes>
    <GenerateResponse enabled="true"/>
</OAuthV2>

上記の例では、

  • アクセス トークンの有効期間は 10 日に設定されています。
  • 更新トークンの有効期間も 10 日に設定されています。

影響

有効期間の長いアクセス トークンはセキュリティ リスクとなります。トークンが漏洩または紛失した場合、有効期間の短いトークンは自然に期限切れになり、無効になりますが、有効期間の長いトークンは、長期間 API へのアクセス権を付与し続け、脆弱性の期間を長くします。

アクセス トークンの有効期間は短くする必要があります(30 分未満が推奨)。この有効期間は、更新トークンの有効期間よりも大幅に短くする必要があります。

例 2

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

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

上記の例では、

  • アクセス トークンには、適度に短い有効期限(30 分)が設定されています。
  • 更新トークンには、非常に長い有効期限(200 日)が設定されています。
  • この API へのトラフィックが 10 リクエスト/秒の場合、1 日に 864,000 個ものトークンが生成されます。
  • 更新トークンは 200 日後に期限切れになります。トークンは有効期間全体のデータストアに蓄積されます。

影響

更新トークンの有効期間を延長すると、大量のトークンがデータストアに蓄積されるため、時間の経過とともにパフォーマンスが低下する可能性があります。Apigee ハイブリッドでは、トークンの過剰な蓄積が永続レイヤのディスク容量の枯渇につながることもあります。

ベスト プラクティス

トークンの漏洩に対する脆弱性の期間を短縮し、データストアでのトークンの蓄積を回避するため、OAuth アクセス トークンと更新トークンの有効期限を特定のセキュリティ要件に適したものにします。アクセス トークンの有効期間については 30 分、更新トークンの有効期間については 24 時間から始めることをおすすめします。

更新トークンの有効期限は、アクセス トークンの存続期間の倍数で有効になるように設定します。たとえば、アクセス トークンの有効期限を 30 分に設定した場合、更新トークンの有効期間を 24 時間、7 日間、またはサポートする必要があるユーザー エクスペリエンスに適した期間に設定します。

関連情報