Composer での ThingWorx モデルの定義 > セキュリティ > シングルサインオン認証 > シングルサインオンのトラブルシューティング
シングルサインオンのトラブルシューティング
SSO に関連する問題をトラブルシューティングするには、イベントのログを有効にします。ログを有効にするには、ThingworxPlatform ディレクトリにある標準の logback.xml ファイルを使用します。logback.xml ファイルがこの場所に存在する場合は、既存のロガーのセットに SSO ロガーを単純に追加できます。logback.xml ファイルの詳細については、 ログの設定を参照してください。
Logback.xml 機能は Java の標準です。これらのファイルの設定手順については、Java のドキュメンテーションを参照してください。
次の表は、ThingWorx の SSO コンフィギュレーションに関連する問題を調査するために追加できるロガーパッケージに関する情報を示しています。
パッケージ
説明
com.thingworx.security.authentication.sso
すべての ThingWorx SSO 認証コンポーネント用のパッケージ。次の例は、ロガーパッケージ内のエントリを示しています。
たとえば、アプリケーションログに送られるメッセージの場合は、以下のとおりです。
LogUtilities.getInstance().getApplicationLogger([class name]):
<logger name="com.thingworx.security.authentication.sso" level="DEBUG"/>
セキュリティロガーは、このパッケージ内のクラスの多くで使用されます。次に例を示します。
LogUtilities.getInstance().getSecurityLogger(ThingworxSSOAuthenticator.class);
これらのロガーを有効にするには、ルート親ロガーとして SecurityLog を追加します。
<logger name="SecurityLog.com.thingworx.security.authentication.sso" level="DEBUG"/>
SecurityLog.com.thingworx.security.sso
アクセストークン、およびそのコンフィギュレーションを取得する際に統合コネクタによって使用される委任認証ワークフロー用のパッケージ。
com.thingworx.ptc.eauth.identity
すべての PTC コア SSO ライブラリコンポーネント用のパッケージ。
com.springframework.security
すべての spring フレームワークセキュリティコンポーネント用のパッケージ。
com.springframework.jdbc
すべての spring フレームワーク JDBC 認証コンポーネント用のパッケージ。
SSO の実装によってエラーが発生している場合は、以下のトラブルシューティング項目を調査できます。
問題
ThingWorx 管理者がサインインできない - Invalid_scope エラーの受取り
説明
サインイン後、ユーザーは、システムに認証コンフィギュレーションエラーが現在発生していることを示す ThingWorx エラーページにリダイレクトされます。
ソリューション
ThingWorx 統合コネクタまたはメディアエンティティに登録されている範囲の 1 つ以上が、PingFederate (または選択した CAS) に登録されている範囲と一致しません。PingFederate 間の範囲の不一致が原因で、ThingWorx 管理者がロックされる可能性があります。ThingWorx に登録されたリソースプロバイダの範囲は、セキュリティログで確認できます。これを解決するには、以下のようにします。
1. PingFederate にログインして、ThingWorx セキュリティログから報告された範囲を、PingFederate に登録された範囲と比較します。PingFederate に登録されていない ThingWorx の範囲、または名前が一致しない範囲があれば、PingFederate で範囲を追加するか、ThingWorx でのスペルと一致するように名前を修正します (これが範囲の正しいスペルではない場合でも)。
2. これで権限承認ページが正しく機能するようになり、ThingWorx に管理者としてサインインできます。ThingWorx Composer で、範囲を使用しようとしている統合コネクタまたはメディアエンティティに移動します。その範囲を、統合コネクタまたはメディアエンティティの範囲登録テーブルから除去します。ThingWorx の新しいセッションでログインして、ログインが正常に行われることを確認します。
3. 登録されていない範囲を ThingWorx が使用しようとしていた場合は、PingFederate で範囲管理ページから不要な範囲を除去します。範囲名が一致していない場合、その範囲を削除してから、正しいスペルで PingFederate と ThingWorx 統合コネクタまたはメディアエンティティに再度登録します。
問題
統合コネクタまたはメディアエンティティ上のサービスが動作しない - アクセストークンの取得に失敗した。
説明
ThingWorx Composer にログインし、すでにアクセストークンを持っています。範囲を含むコネクタをインポートまたは作成し、コネクタ上でサービスを実行しようとしましたが、機能しませんでした。
ソリューション
ログアウトして再度ログインし、コネクタの範囲の権限承認ページを開きます。サービスが機能するためには、新しく登録された範囲の権限を承認する必要があります。
範囲を含むメディアエンティティをインポートまたは作成する場合にも、同じことが当てはまります。
問題
ThingWorx 起動時の SSO コンテキストおよびビーン初期化エラー。
説明
ThingWorx が起動に失敗します。
ソリューション
エラーログを参照して問題を特定します。コンテキストまたはビーンの初期化警告またはエラーログの末尾のテキストに、問題の説明があります。たとえば、考えられるエラーの記述は以下のとおりです。
SSOConfigurationException: BasicSettings > idpMetadataFilePath cannot be null or empty
sso settings.json ファイル内の idpMetadataFilePath パラメータの値を確認して、適切な値を追加します。
問題
PingFederate の「Request Grant Approval」ページで、要求対象の範囲に対してユーザーが「Don't allow」をクリックした後、ThingWorx マッシュアップまたはアプリケーションがロードされない。
説明
「Request Grant Approval」ページで「Don't allow」をクリックした後、マッシュアップがロードされず、ブラウザ URL の末尾はハッシュ記号 "#" とピリオド記号 "." になります。
ソリューション
デフォルトでは、PingFederate はフラグメントのプレースホルダーとしてピリオド "." を使用します。この問題は、これが原因で発生します。この問題を解決するには、以下のことを行います。
1. PingFederate のインストール場所で、<PingFederateInstallation>\server\default\data\config-store\sanitize-fragments.xml に移動します。
2. この XML ファイルを編集して、フラグメントのプレースホルダーからピリオド "." を除去します。この行は以下のようになります: <con:item name="FragmentPlaceholder"></con:item>
3. PingFederate サーバーを再起動します。
問題
ログインが正常に行われた後、http://<お使いのサーバー>:<ポート>/Thingworx/runtime/index.html#mashup=<MyMashup> に対する SAML 認証が、http://<お使いのサーバー>:<ポート>/Thingworx/runtime/index.html にリダイレクトされます。
説明
マッシュアップ URL に対するログイン時に、URL のフラグメント部分 (つまり、#mashup=<MyMashup>) が ThingWorx サーバーまたは認証サーバーに送信されず、正常なログイン後のリダイレクトが正しく行われません。これは、そのデータがクライアントのみによる使用を目的としてブラウザに保管されるからです。このため、ThingWorx サーバーと認証サーバーはフラグメントを除いた URL を受け取ります (http://<お使いのサーバー>:<ポート>/Thingworx/runtime/index.html)。
ソリューション
最初の認証ポイントとして使用されるマッシュアップ URL の場合は、フラグメントパラメータの代わりに照会パラメータを使用して URL を作成します。
したがって、この例では、URL http://<お使いのサーバー>:<ポート>/Thingworx/runtime/index.html?mashup=<MyMashup> を使用します。