IBM Cloud Docs
クイック・スタート: Liberty for Java バックエンド・アプリ

クイック・スタート: Liberty for Java バックエンド・アプリ

App ID を利用すると、容易に API エンドポイントを保護し、Liberty for Java バックエンド・アプリケーションのセキュリティーを確保することができます。 このガイドを使用すると、シンプルな認証フローを 20 分足らずで迅速に稼働させることができます

バックエンドLiberty for Javaアプリ*バック
Liberty for Java

  1. 保護リソースに対して要求を行うには、クライアントにアクセス・トークンが必要です。 手順 1 で、クライアントは App ID にトークンを要求します。 アクセス・トークンの取得方法について詳しくは、トークンの取得を参照してください。
  2. App ID がトークンを返します。
  3. クライアントが、アクセス・トークンを使用して、保護リソースへのアクセス要求を行います。
  4. リソースが、構造、有効期限、署名、対象者、その他のフィールドを含むトークンを検証します。 トークンが無効な場合、リソース・サーバーはアクセスを拒否します。 トークンの検証が成功すると、データが返されます。

ビデオのチュートリアル

以下のビデオを視聴すると、App ID を使用してシンプルな Liberty for Java アプリケーションを保護する方法を確認できます。 ビデオで扱われている情報はすべて、このページにも記載されています。

フローを試すことができるアプリがありませんか? 問題ありません。 App ID には、 単純な Liberty for Java サンプル・アプリが用意されています。

開始前に

Liberty for Java バックエンド・アプリケーションで App ID の使用を開始する前に、以下の前提条件を満たしている必要があります。

資格情報を取得する

次の 2 つの方法のいずれかを利用して、資格情報を取得できます。

  • App ID ダッシュボードの**「アプリケーション」タブに移動します。 アプリケーションがまだない場合は、「アプリケーションの追加 (Add application)」**をクリックして新しいアプリケーションを作成できます。

  • /management/v4/<tenantID>/applications エンドポイントに対して POST 要求を行う。

     Request format:
     ```sh {: codeblock}
     curl -X POST \  https://us-south.appid.cloud.ibm.com/management/v4/<tenantID>/applications/ \
     -H 'Content-Type: application/json' \
     -H 'Authorization: Bearer <IAMToken>' \
     -d '{"name": "ApplicationName"}'
     ```
     Example response:
     ```json {: screen}
     {
       "clientId": "xxxxx-34a4-4c5e-b34d-d12cc811c86d",
       "tenantId": "xxxxx-9b1f-433e-9d46-0a5521f2b1c4",
       "secret": "ZDk5YWZkYmYt*******",
       "name": "app1",
       "oAuthServerUrl": "https://us-south.appid.cloud.ibm.com/oauth/v4/xxxxx-9b1f-433e-9d46-0a5521f2b1c4",
       "profilesUrl": "https://us-south.appid.cloud.ibm.com",
       "discoveryEndpoint": "https://us-south.appid.cloud.ibm.com/oauth/v4/xxxxxx-9b1f-433e-9d46-0a5521f2b1c4/.well-known/openid-configuration"
     }
     ```
    

server.xml ファイルを構成する

  1. server.xml ファイルを開きます。

  2. 以下のフィーチャーを featureManager セクションに追加します。 一部のフィーチャーは、Liberty に組み込まれている可能性があります。 サーバーの実行時にエラーを受け取った場合は、Liberty インストール済み環境の bin ディレクトリーから .installUtility install {name_of_server} を実行してインストールすることができます。

    <featureManager>
       <feature>appSecurity-2.0</feature>
       <feature>openidConnectClient-1.0</feature>
       <feature>ssl-1.0</feature>
       <feature>servlet-3.1</feature>
    </featureManager>
    
  3. 以下の内容を server.xml ファイルに追加して、SSL を構成します。

    <keyStore id="defaultKeyStore" password="{password}"/>
    <keyStore id="RootCA" password="{password}" location="${server.config.dir}/resources/security/{myTrustStore}"/>
    <ssl id="{sslID}" keyStoreRef="defaultKeyStore" trustStoreRef="{truststore-ref}"/>
    
  4. Open ID Connect Client フィーチャーを作成し、以下のプレースホルダーを定義します。 取得した資格情報を使用して、プレースホルダーに入力してください。

    <openidConnectClient
       id="oidc-client-simple-liberty-backend-app" 		
       inboundPropagation="required"
       jwkEndpointUrl="<region>.appid.cloud.ibm.com/oauth/v4/<tenantID>/publickeys"
       issuerIdentifier="<region>.appid.cloud.ibm.com/oauth/v4/<tenantID>"
       signatureAlgorithm="RS256"
       audiences="{client-id}"
       sslRef="oidcClientSSL"
    /> 	
    
    Liberty for Java アプリケーションの OIDC 要素変数
    変数 説明
    id アプリケーションの名前。
    inboundPropagation トークンで受け取った情報を伝搬させるには、値を「required」に設定する必要があります。
    jwkEndpointUrl トークンを検証するための鍵の取得に使用されるエンドポイント。 使用可能なリージョンについてはこちらを参照してください。 テナント ID は、前に作成した資格情報にあります。
    issuerIdentifier 発行者 ID は、許可サーバーを定義します。 使用可能なリージョンについてはこちらを参照してください。 テナント ID は、前に作成した資格情報にあります。
    signatureAlgorithm "RS256" を指定します。
    audiences デフォルトでは、トークンはアプリケーション資格情報内にある App ID クライアント ID に対して発行されます。
    sslRef 使用する SSL 構成の名前。
  5. 特別なサブジェクト・タイプを ALL_AUTHENTICATED_USERS として定義します。

    <application
       id="simple-liberty-backend-app"
       location="location-of-your-war-file"
       name="simple-liberty-backend-app"
       type="war">
    
       <application-bnd>
          <security-role name="myrole">
                <special-subject type="ALL_AUTHENTICATED_USERS"/>
          </security-role>
       </application-bnd>
    </application>
    

web.xml ファイルを構成する

web.xml ファイルで、保護するアプリケーションの領域を定義します。

  1. セキュリティー役割を定義します。 この役割は、server.xml ファイルで定義した役割と同じでなければなりません。

    <security-role>
    <role-name>myrole</role-name>
    </security-role>
    
  2. セキュリティー制約を定義します。

    <security-constraint>
       <display-name>Security Constraints</display-name>
       <web-resource-collection>
          <web-resource-name>ProtectedArea</web-resource-name>
          <url-pattern>/api/*</url-pattern>
       </web-resource-collection>
       <auth-constraint>
          <role-name>myrole</role-name>
       </auth-constraint>
       <user-data-constraint>
          <transport-guarantee>NONE</transport-guarantee>
       </user-data-constraint>
    </security-constraint>
    

構成のテスト

初期インストールが完了したので、アプリをビルドし、構成をテストして、すべて想定どおりに機能していることを確認します。

  1. アプリケーション・ディレクトリーに移動します。

  2. アプリケーションをビルドします。

    server run
    
  3. 保護エンドポイントに対して要求を行います。 エラーが戻されます。

  4. アクセス・トークンを取得します

  5. 前の手順で取得したアクセス・トークンを使用して、エンドポイントへの要求を行います。 今回は保護エンドポイントにアクセスできるはずです。 予期した内容が応答に含まれていることを確認してください。