Oracle Identity Cloud ServiceでのJavaアプリケーションの開発

認証フローの理解および顧客見積アプリケーションの例が、Javaサーブレットを使用してOracle Identity Cloud Serviceとの統合を実装する方法について学習します。

認証フローの理解

次のプロセス・フローでは、認証フローの手順と顧客見積アプリケーションの例とOracle Identity Cloud Service間の通信について説明します。

  1. ユーザーは顧客見積アプリケーション(https://localhost:8181/cquotes)にアクセスし、Identity Cloud Serviceでログインをクリックします。

  2. 顧客見積アプリケーションは、次の形式で承認コード要求を準備します。
    • URL: https://example.identity.oraclecloud.com/oauth2/v1/authorize?client_id=clientid&response_type=code&redirect_uri=https://localhost:8181/cquotes/return&scope=openid

    • パラメータ:
      • client_id: Oracle Identity Cloud Serviceに登録されている顧客見積りの一意のアプリケーションID。

      • response_type: Oracle Identity Cloud Serviceからの予想レスポンス。このステップでは、これが承認コードです。

      • redirect_uri:ユーザーがOracle Identity Cloud Serviceで認証および認可を完了した後に認可コードが送信されるURL。

      • scope:顧客見積アプリケーションがユーザーのかわりにアクセスおよび処理できるデータを管理します。OpenID Connectが使用されるため、スコープはopenidです。

  3. 顧客見積アプリケーションにより、ユーザーはステップ2で生成されたOracle Identity Cloud Service承認コードURLにリダイレクトされます。

  4. Oracle Identity Cloud Serviceは、顧客見積アプリケーション(client_id)から承認コード要求を受け取ります。

  5. Oracle Identity Cloud Serviceユーザーがすでに認証されているかどうかを検証します。その場合は、Oracle Identity Cloud Serviceではサインイン処理がスキップされます。そうでない場合は、Oracle Identity Cloud Serviceでサインイン・プロセスが開始され、「サイン・イン」ページが表示されます。

  6. ユーザーは、検証のためにサインイン資格証明をOracle Identity Cloud Serviceに送信します。Oracle Identity Cloud Service Sign - inプロセスでは、サインイン資格証明が正常に検証されるまで、パスワード・ポリシーが適用されます。

  7. サインイン・プロセスに成功すると、Oracle Identity Cloud Serviceは次のリダイレクトURLを使用してユーザーを顧客見積アプリケーションにリダイレクトします。
    • URL:

      • https://localhost:8181/cquotes/return?code=code

    • パラメータ:

      • code: Oracle Identity Cloud Serviceによって作成される認可コード。

  8. 顧客見積アプリケーションは要求から承認コードを抽出します。

  9. 顧客見積アプリケーションは、次のURLおよびヘッダーを使用して、ユーザー・アクセス・トークンの承認コードを交換するためにOracle Identity Cloud Serviceと直接通信します。
    • URL: https://example.identity.oraclecloud.com/oauth2/v1/token?grant_type=authorization_code&code=code

    • リクエスト・ヘッダー:
      • Authorization=Basic (client_id:client_secret、64-bitエンコード済)

      • Accept=*/*

    • パラメータ:
      • grant_type: authorization_codeを使用してOracle Identity Cloud Serviceからアクセス・トークンを要求しているため、付与タイプはauthorization_codeである必要があります。

      • code:ユーザーのサイン・インに成功した後でOracle Identity Cloud Serviceから受信した認可コード。

    • ヘッダー・リスト:
      • 認可: trusted application client_id およびclient_secret (64ビットコード)の形式はclient_id: client_secretです。

      • 受入:顧客見積アプリケーションが想定する応答のタイプ

  10. Oracle Identity Cloud Serviceでリクエストを検証し、次のJSON Web Token (JWT)をCustomer Quotesアプリケーションに返します。
    • JWTコンテンツ:
      • access_token:ユーザーに関する情報が含まれます。顧客見積アプリケーションは、Oracle Identity Cloud Service APIをユーザーのかわりにコールする際にこのトークンを使用できます。access_tokenの内容は、認証プロセス中に要求されるスコープに依存します。

      • id_token: OpenID Connectのプライマリ・トークンで、scope=openidでエンドポイントを認可するために使用されます。id_tokenには、ユーザーに関する識別情報(名前や電子メールなど)が含まれています。この情報は、クライアント・アプリケーションでの検証やコンテンツの表示など、いくつかの目的で使用できます。正当な(OpenID Connectのプロバイダの署名に基づいてクライアントによって検証された)ものであり、アクティブなid_tokenはユーザーが認証され、有効なトークンがあることをアプリケーションに示します。

  11. 顧客見積りアプリケーションはJWTトークン(id_token)を処理し、名前やeメールなど、Oracle Identity Cloud Serviceによって返されるユーザー情報を抽出します。

  12. 顧客見積アプリケーションに、名前やEメールなどのユーザーに関する情報が含まれているホーム・ページが表示されます。

Java application Codeの理解

顧客見積りアプリケーションの例では、サーブレット・テクノロジを使用しています。

アプリケーションは、次の主要なサーブレットで構成されています。
  • com.example.servlet.AccessResourceServlet:ユーザーをOracle Identity Cloud Serviceにリダイレクトして認可コードをリクエストすることで、認証フローを開始します。

  • com.example.servlet.ReturnServlet:リダイレクトURLをOracle Identity Cloud Serviceから処理し、承認コードを受信して、com.example.utils.OICOAuthClientクラスを使用して、アイデンティティートークンの承認コードとアクセストークンを交換します。

  • com.example.servlet.LogoutServlet:アプリケーションのユーザー・セッションを終了しますが、Oracle Identity Cloud Serviceからユーザーにサイン・アウトしません。

サーブレットは次のユーティリティ・クラスを使用します。
  • com.example.utils.OICOAuthClient: Oracle Identity Cloud Service REST APIのURLエンドポイントの構築、リクエストの処理、Oracle Identity Cloud Serviceレスポンスの解析、およびアプリケーションのHTTPセッションへのユーザー情報の追加を行います。

  • com.example.utils.HttpUtil: Oracle Identity Cloud Service REST APIエンドポイントとのHTTP通信を処理します。顧客見積アプリケーションからOracle Identity Cloud Serviceへの直接通信はすべて、java.net.HttpURLConnectionクラスを介して行われます。