OCI API GatewayとOpenID Connectを使用したセキュアなWebアプリケーション
レガシーWebアプリケーションを最新のアイデンティティ・プロバイダと統合するには、通常、レガシー・アプリケーション・コードを変更し、ユーザー・インタフェースを変更する必要があります。新しいカスタム開発に時間とリソースを費やすのではなく、認証フローではなくビジネス・ロジックに集中できるアーキテクチャに投資します。
一部のレガシー・アプリケーションは、OpenID Connectを直接サポートしていません。クラウドに移行する際、Oracle Cloud Infrastructure (OCI) API Gatewayをネットワーク・アクセス・ポイントとして使用して、ユーザー、アイデンティティ・プロバイダおよびアプリケーションの認証を調整できます。すべてのアプリケーションでOpenID Connectフローを直接追加する必要があるかわりに、OCI APIゲートウェイはネットワーク上で標準化された方法でアクセスを強制できます。開発者は、OCI API Gatewayを使用してレガシー・アプリケーションを最新化し、最新のアプリケーションを拡張できます。
アーキテクチャ
OCI API Gatewayは、OCIのサーバーレスの完全管理型サービスで、APIエンドポイントおよびWebアプリケーションの保護に使用できます。OCI API Gatewayは、レート制限、認可の適用、動的ルーティング、SSL強制などのセキュリティ機能を提供します。OCI API Gatewayを利用して、OpenID認証サポートを必要とするレガシーWebアプリケーションを保護できます。OCI API Gatewayは、OCIプライベート・サブネットでホストされているWebアプリケーションの一元化されたセキュリティ・モジュールとして機能できます。OCI API Gatewayはアイデンティティ・プロバイダに依存せず、Okta、Google、Amazon、Auth0などのサポートされているOAuth 2.0プロバイダと統合して、いくつか名前を付けることができます。
OpenID Connectプロトコルは、OAuth 2.0プロトコルの上にある単純なアイデンティティ・レイヤーです。OpenID Connectを使用すると、ブラウザ、モバイル・アプリケーション、デスクトップ・クライアントなどの様々なタイプのアプリケーションで、認証とアイデンティティ管理を、セキュアで一元化された標準化された方法でサポートできます。OpenID Connectプロトコルを活用するアプリケーションは、アイデンティティ・プロバイダに依存して、認証プロセスを安全に処理し、ユーザー・アイデンティティを検証します。OpenID Connectでは、Oracle Cloud Infrastructure Identity and Access Managementなどのアイデンティティ・プロバイダでユーザー管理を一元化することで、様々なアプリケーションのシングル・サインオンが可能になります。
OCI APIゲートウェイは、ユーザー、アイデンティティ・プロバイダおよびアプリケーションで認証を仲介するネットワーク・アクセス・ポイントとして機能します。アプリケーションとクライアント間でOCI APIゲートウェイを配置すると、OCI APIゲートウェイはリクエストをインターセプトし、OpenID Connect認可フローを処理できます。
次の図は、このリファレンス・アーキテクチャを示しています。
secure-web-applications-oci-api-gateway-open-id-architecture.zip
次の図は、初期承認の認証フローを示しています。
secure-web-applications-oci-api-gateway-open-id-data-flow.zip
- クライアント・アプリケーションは、OCI APIゲートウェイを介してバックエンド・サービスへのアクセスをリクエストします。
- OCI APIゲートウェイは、クライアントをアイデンティティ・プロバイダに送信します。
- クライアントはアイデンティティ・プロバイダで認証します。正常に認証されると、クライアントは承認を提供するトークンを受け取ります。
- アイデンティティ・プロバイダは、アクセス・トークンを使用してクライアントをOCI APIゲートウェイにリダイレクトします。
- OCI API Gatewayは、アイデンティティ・プロバイダでアクセス・トークンを検証します。
- トークン検証が成功すると、OCI APIゲートウェイは適切なバックエンド・サービスにルーティングし、満たされたレスポンスをクライアントに返します。
クライアントがすでに認可されている場合、フローは次の図のようになります。
secure-web-applications-oci-api-gateway-open-id-data-flow-authorized.zip
- トークンの取得後、ブラウザは、同じアプリケーションに対する後続のリクエストに対してトークンをキャッシュします。
- OCI API Gatewayは、クライアントがバックエンド・サービスにアクセスできるように、アイデンティティ・プロバイダでトークンを検証します。
- クライアントが認可されている場合、OCI APIゲートウェイは適切なバックエンド・サービスにルーティングし、満たされたレスポンスをクライアントに返します。
アーキテクチャには、次のコンポーネントがあります。
- リージョン
Oracle Cloud Infrastructureリージョンは、可用性ドメインと呼ばれる1つ以上のデータ・センターを含むローカライズされた地理的領域です。リージョンは他のリージョンから独立しており、広大な距離で(複数の国または複数の大陸にまたがる)リージョンを分離できます。
- 可用性ドメイン
可用性ドメインは、リージョン内の独立したスタンドアロン・データ・センターです。各可用性ドメイン内の物理リソースは、他の可用性ドメイン内のリソースから分離されているため、フォルト・トレランスが提供されます。可用性ドメインどうしは、電力や冷却、内部可用性ドメイン・ネットワークなどのインフラを共有しません。そのため、ある可用性ドメインでの障害がリージョン内の他の可用性ドメインに影響することはほとんどありません。
- フォルト・ドメイン
フォルト・ドメインは、可用性ドメイン内のハードウェアおよびインフラストラクチャのグループです。各アベイラビリティ・ドメインに3つのフォルト・ドメインがあり、それぞれ独立した電源とハードウェアがあります。複数のフォルト・ドメインにリソースを分散すると、アプリケーションは、フォルト・ドメイン内の物理サーバー障害、システム・メンテナンスおよび電源障害を許容できます。
- 仮想クラウド・ネットワーク(VCN)およびサブネット
VCNは、Oracle Cloud Infrastructureリージョンで設定する、カスタマイズ可能なソフトウェア定義のネットワークです。VCNは、従来のデータ・センター・ネットワークと同様に、ネットワーク環境の完全な制御を可能にします。VCNには重複しない複数のCIDRブロックを含めることができ、VCNの作成後にそれらを変更できます。VCNをサブネットにセグメント化して、そのスコープをリージョンまたは可用性ドメインに設定できます。各サブネットは、VCN内の他のサブネットと重複しない連続した範囲のアドレスで構成されます。サブネットのサイズは、作成後に変更できます。サブネットはパブリックにもプライベートにもできます。
- APIゲートウェイ
Oracle API Gatewayでは、ネットワーク内からアクセス可能なプライベート・エンドポイントとともに、必要に応じてパブリック・インターネットに公開できるAPIを公開できます。エンドポイントは、API検証、リクエストとレスポンスの変換、CORS、認証と認可およびリクエスト制限をサポートします。
- アイデンティティおよびアクセス管理(IAM)
Oracle Cloud Infrastructure Identity and Access Management (IAM) is the access control plane for Oracle Cloud Infrastructure (OCI) and Oracle Cloud Applications.IAM APIおよびユーザー・インタフェースを使用すると、アイデンティティ・ドメインおよびアイデンティティ・ドメイン内のリソースを管理できます。各OCI IAMアイデンティティ・ドメインは、スタンドアロンのアイデンティティおよびアクセス管理ソリューションまたは異なるユーザー人口を表します。
- FastConnect
Oracle Cloud Infrastructure FastConnectは、データ・センターとOracle Cloud Infrastructureの間に専用のプライベート接続を簡単に作成する方法を提供します。FastConnectは、インターネットベースの接続と比較して、高帯域幅のオプションとより信頼性の高いネットワーク・エクスペリエンスを提供します。
- OCIとAzure相互接続
Oracle CloudとMicrosoft Azure Interconnectは、Oracle初のマルチクラウド製品です。世界中の特定のAzureとOracle Cloud Infrastructure(OCI)データ・センター間の直接ネットワーク接続を提供します。これにより、Azure管理者および開発者は、専用リンクを作成したり、パブリック・インターネットでアプリケーション・トラフィックを送信することなく、OCIで実行されているアプリケーションおよびサービスにアプリケーションを接続できます。
推奨事項
- OCI APIゲートウェイ
OCI API Gatewayを利用して、REST APIを公開し、Webアプリケーションのシングル・サインオン・サポートを有効にできます。OCI API Gatewayは、アプリケーションがセキュリティ実装をOCI API Gatewayにオフロードするための一元化されたセキュリティ・モジュールとして指定することもできます。これにより、実装、メンテナンスおよび複雑さに関連するコストを最小限に抑えることができます。
考慮事項
このリファレンス・アーキテクチャをデプロイする場合は、次の点を考慮してください。
- クロスサイト・リクエスト・偽造(CSRF)に対する防御
攻撃者は、ブラウザCookieの存在を利用してCSRF攻撃をマウントし、ユーザーが意図しないコマンドをOCI APIゲートウェイなどのWebアプリケーションに送信できるようにします。ブラウザCookieの存在のためにユーザーがすでに正常に認証されているとアプリケーションが判断した場合、アプリケーションはコマンドを実行し、破損する可能性があります。
OAuth 2.0 introspection endpoint
タイプの検証ポリシーおよびOAuth 2.0
タイプの検証失敗ポリシーを定義する場合、OCI APIゲートウェイがOpenID Connect認可フローを使用して取得した新しいJWTトークンを格納する方法を指定します。セッションCookieに新しいJWTトークンを格納する場合は、
Use cookies for session
を選択します。潜在的なCSRF攻撃を回避するために、OCI APIゲートウェイがトークンをセッションCookieに格納すると、X-CSRF-TOKEN
レスポンス・ヘッダーにもCSRFトークンが返されます。OCI APIゲートウェイへの後続のリクエスト(GETリクエストとは関係)では、セッションCookieのJWTトークンに加えて、X-CSRF-TOKEN
リクエスト・ヘッダーにCSRFトークンを含める必要があります。 - Cross-Origin Resource Sharing (CORS)
リクエストはWebブラウザからOCI APIゲートウェイを介してリダイレクトされるため、アプリケーションで使用されるWebアプリケーションおよびその他のREST APIでCORSをサポートする必要がある場合があります。