Support Advisory: SAML Authentication Fails after 4.3 Upgrade

このドキュメントでは、AppDynamics 製品のサポートアドバイザリについて説明します。

概要

4.3 のアップグレード後、コントローラ UI のユーザーの SAML 認証が失敗し、CSRF 検証が失敗したというメッセージが表示される場合があります。

4.3 では、SAML 認証でコントローラ URL に対してリクエスト URL が検証されるようになりました。この問題は、プロキシまたはアカウントごとに異なる URL を持つマルチテナントコントローラのアカウントが原因であるかどうかにかかわらず、内部コントローラ URL とは異なるリクエスト URL から発生します。

影響を受けるソフトウェア

これは、プロキシ経由の SAML 認証コントローラ、またはアカウントごとに異なる URL を持つマルチテナントコントローラに影響します。

この問題の影響を受けているかどうかを確認するには、サーバーログファイル(<controller_home>/logs/server.log)に、以下の例のような "validateRequestedUrl failed" という警告ログエントリが含まれているかどうかを確認してください。

[#|2017-03-07T08:28:05.275-0800|WARNING|glassfish 4.1|com.singularity.ee.controller.servlet.SAMLAuthenticationServlet|... |validateRequestedUrl failed. requestedURL: https://mycontroller.com/controller/#, controllerUrlForAccount: ...

影響

SAML 認証されたコントローラユーザーはログインできません。

解像度

この問題を回避するには、4.3 にアップグレードした後、次のいずれかのメカニズムを使用して内部 URL を更新します。

  • コントローラレベルで、ドメインの .xml 構成ファイルでディープリンク URL を設定します。

  • アカウントレベルでは、REST API を使用してディープリンク URL を設定するか、データベースを直接更新します。

AppDynamics では、可能であれば、 REST API を使用してアカウントレベルで変更を行う 2 番目のオプションを推奨しています。

設定する URL は、リクエスト URL と完全に一致する必要があります。つまり、内部 URL には、ブラウザの URL のドメイン名、スキーム(HTTP/ HTTPS)、およびポートを含める必要があります。

REST によるアカウントコントローラの URL の更新

これは、この問題を回避するために推奨される方法です。各アカウントのコントローラ URL を更新するには、update-controller-url REST API コールを使用します。

コントローラマシンまたはコントローラにネットワークアクセスできるマシンからコマンドを実行します。AppDynamics ルートユーザーのパスワードが必要です。

コマンドの形式は次のとおりです。

curl -k --basic --user root@system --header "Content-Type: application/json" --data '{ "controllerURL": "http://<controller>:<port>" }' http://<controller>:<port>/controller/rest/accounts/<ACCOUNT-NAME>/update-controller-url

REST API の使用の詳細については、「update-controller-url REST API コール」を参照してください。

データベースの変更によるアカウントコントローラ URL の更新

何らかの理由で REST API でコントローラに対処できない場合は、以下のようにデータベースの controller_url 設定を更新することで問題を修正できます。

  1. コントローラホストから、コントローラホームの次のディレクトリ「<controller_install_dir> /bin」に移動します。
  2. 次のコマンドを使用して、コントローラデータベースにログインします。

    ./controller.sh login-db

    Windowsではcontroller.batを使用します。

  3. アカウントテーブルの更新:

    select id,name,controller_url from account where name='customer1'
    update account set controller_url='https://myVIP:8090/' where name='customer1';
    commit;
  4. 次のコマンドの出力で controller_url が NULL でないことを確認します。

    select id,name,controller_url from account where name='customer1';
  5. コントローラアプリケーションサーバーを再起動します。

    <controller_home>/bin/controller.sh stop-appserver
    <controller_home>/bin/controller.sh start-appserver

コントローラレベルでの更新

コントローラレベルで(コントローラ内のすべてのアカウントの場合)内部 URL を更新するには、domain.xml ファイルを変更します

  1. コントローラのホームディレクトリで、domain.xml を開いて編集します

    /controller/appserver/glassfish/domains/domain1/config/domain.xml
  2. リクエスト URL を使用して次の設定を検索して更新します。

    <jvm-options>-Dappdynamics.controller.ui.deeplink.url=http://mycontroller:8090/controller</jvm-options>