私が到達した結論は、リダイレクトがliferayで認証しようとしているが、どういうわけか探しているものを取得できず、openssoに戻り、これが無限に繰り返されるということです。ここで同様の問題が報告されていることがわかります。残念ながら、うまくいきませんでした。
その後、liferay コードをデバッグすることにし、com.liferay.portal.servlet.filters.sso.opensso.OpenSSOUtil と com.liferay.portal.servlet.filters.sso.opensso.OpenSSOFilter にブレーク ポイントを設定しました。このコードが書かれていることを理解する方法は、最初に OpenSSOUtil.processFilter() メソッドに行き、liferay で構成した openSSO 設定情報を取得し、後でメソッド OpenSSOUtil.isAuthenticated() を呼び出して認証されているかどうかを確認することです。この特定の実装は基本的に、送信された Cookie 情報を読み取り、メソッド OpenSSOUtil._setCookieProperty() を呼び出して、liferay に Cookie プロパティを設定しようとします。ここで失敗します。HttpServletRequest オブジェクトを使用して liferay クラス com.liferay.util.CookieUtil から [iPlanetDirectoryPro] という名前の Cookie を読み取ろうとしますが、取得するのはすべて NULL です。
以下はクラスのコードですcom.liferay.util.CookieUtil
public static String get(HttpServletRequest request, String name) {
Cookie[] cookies = request.getCookies();
if (cookies == null) {
return null;
}
for (int i = 0; i < cookies.length; i++) {
Cookie cookie = cookies;
String cookieName = GetterUtil.getString(cookie.getName());
if (cookieName.equalsIgnoreCase(name)) {
return cookie.getValue();
}
}
return null;
}
opensso が送信した Cookie を liferay が見つけられない理由を誰か教えてください。Cookie 値の有効化に関する Opensso 設定に関連している場合は、OpenSSO で次の場所に移動しました: [構成] -> [サーバーとサイト] -> -> [セキュリティ] -> [Cookie] -> [Cookie 値のエンコード] をオンにします ([はい] に設定)
何が機能するか: このループが実行されているときに、別のタブを開き、明示的にアプリケーションにログインします。アプリケーションからサインアウトすると、opensso からもサインアウトされます。これは私には奇妙です。
詳細については、このリダイレクト ループが発生している間、次の URL でこれらの情報セットが得られます
http://opensso.ple.com:9090/openam/identity/getCookieNameForToken
string=iPlanetDirectoryPro
http://opensso.ple.com:9090/openam/identity/isTokenValid
boolean=true