トラブルシューティングでは、onelogin.saml.propertiesのonelogin.sample2.idp.single_sign_on_service.urlから提供されるSSO URLを、理想的にはAD FSサーバ上で実行するのが好ましいです。
こちらの項目では、以下のように基礎的な問題への解決策を紹介します。
よりシンプルな統合のために、Yellowfin 9.6にはSAML インターフェースが同梱されています。こちらの項目で説明をするSAML Bridge アプリケーションをまだ使用していない場合は、新しいインターフェースで必要なすべてのツールが揃うかもしれません。ただ、サービスプロバイダーが開始するフローを実装する予定の場合は、こちらの項目で説明をするSAML Bridge アプリケーションを使用しなくてはいけません。
署名の検証に失敗
以下のエラーが発生した場合:
ERROR c.onelogin.saml2.authn.SamlResponse - Signature validation failed. SAML Response rejected
onelogin.saml.propertiesで参照した、以下のような公開鍵が無効であることを意味します。
onelogin.saml2.idp.x509cert =MIIC2DCCAcCgAwIBAgIQfdRAAWmWko1IsimA004o3TANBgkqhki…
解決策
- AD FSから有効な証明書を取得
- onelogin.saml.properties(onelogin.saml2.idp.x509cert)の編集
- Yellowfinの再起動
- AD FSのYellowfin SMAL Bridgeのreplying party(信頼できる利用者)メタデータを更新
不正な鍵長
Yellowfinログに、以下のような例外が見つかる場合があります。
org.apache.xml.security.encryption.XMLEncryptionException: 不正な鍵長
元の例外は、java.security.InvalidKeyException:不正な鍵長
解決策
以下のSAML応答ペイロードを検証する際、データはAES-256で暗号化されます。
EncryptionMethodアルゴリズムは、こちらを参照してください。:http://www.w3.org/2001/04/xmlenc#aes256-cbc
デフォルトでは、アメリカのエクスポート規制、数カ国のインポート規制に従い、Javaの鍵長は128bitに制限されています。
こちらを変更する方法は、以下の通りです。
- Java暗号化拡張機能(Java Cryptography Extension (JCE))無制限強度管轄ポジリーファイルをダウンロードする。
Java 7:http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html
Java 8:http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html - local_policy.jarとUS_export_policy.jarファイルを、[JAVA_HOME]/jre/lib/securityディレクトリにコピーする
無効な名前ID
SAMLは、アイデンティティプロバイダー応答の一部として、名前IDを要求します。AD FSの不正な名前IDを提供した場合、ブラウザに以下の例外が表示されます。
SAML bridgeが想定する形式(onelogin.saml.propertiesのonelogin.saml2.sp.nameidformat)に一致する適切な名前IDを渡します。
可能な形式の一覧は、以下の通りです。
NAMEID_EMAIL_ADDRESS = 'urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress';
NAMEID_X509_SUBJECT_NAME = 'urn:oasis:names:tc:SAML:1.1:nameid-format:X509SubjectName';
NAMEID_WINDOWS_DOMAIN_QUALIFIED_NAME = 'urn:oasis:names:tc:SAML:1.1:nameid-format:WindowsDomainQualifiedName';
NAMEID_UNSPECIFIED = 'urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified';
NAMEID_KERBEROS = 'urn:oasis:names:tc:SAML:2.0:nameid-format:kerberos';
NAMEID_ENTITY = 'urn:oasis:names:tc:SAML:2.0:nameid-format:entity';
NAMEID_TRANSIENT = 'urn:oasis:names:tc:SAML:2.0:nameid-format:transient';
NAMEID_PERSISTENT = 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent';
NAMEID_ENCRYPTED = 'urn:oasis:names:tc:SAML:2.0:nameid-format:encrypted';
以下は、SAML応答に関する正確なYellowfinログの一覧の例を示しています。
DEBUG c.onelogin.saml2.authn.SamlResponse - SAMLResponse validated --> …
…
DEBUG c.onelogin.saml2.authn.SamlResponse - SAMLResponse has NameID --> john.smith@yellowfin.bi
DEBUG c.onelogin.saml2.authn.SamlResponse - SAMLResponse has attributes: {http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress=[john.smith@yellowfin.bi]}
DEBUG com.onelogin.saml2.SamlAuth - processResponse success --> <very long line representing signing certificate>
COULD_NOT_FIND_PERSON
Yellowfinログに以下のエラーが表示される場合:
INFO (AdministrationService:remoteAdministrationCall) - WebserviceException caught: 8(COULD_NOT_FIND_PERSON)