私たちは、2 段階の認証プロセスを持つ Worklight アプリケーションを作成中です。
ステップ 1: フォーム認証
ここでは、すぐに使える WASLTPARealm を使用しています。これは、WebSphere のカスタム JAAS モジュールに対して認証を行い、LTPA トークンを返します。これは期待どおりに機能します。
ステップ 2: カスタム認証システム
2 番目のステップは、カスタム認証システムとログイン モジュールです。
- ステップ 1 で設定された LTPA Cookie を読み取ります
- LTPA Cookie を使用して別のアプリケーションに POST 要求を行います (これら 2 つのアプリケーションはシングル サインオンによって信頼されています)。
- POST リクエストは、追加のセッション Cookie を含むレスポンスを返します
- ユーザーが認証される
問題は、ドキュメントで提供されているクライアント コードを使用すると、カスタム認証システムが起動しないことです。基本的
customAuthenticator は、通常の方法で作成されます
var customAuthenticator = WL.Client.createChallengeHandler("MyCustomRealm");
次に、クライアントコードのさらに下に
var reqURL = '/my_custom_auth_request_url';
var options = {};
options.parameters = {};
options.headers = {};
customAuthenticator.submitLoginForm(reqURL, options, customAuthenticator.submitLoginFormCallback);
404 の結果
[27/05/13 10:35:07:616 NZST] 00000326 WebSphereForm I com.worklight.core.auth.ext.WebSphereFormBasedAuthenticator processRequest FWLSE0055I: Not recognized.
[27/05/13 10:35:07:616 NZST] 00000326 Authenticatio E com.worklight.core.auth.impl.AuthenticationFilter doFilter FWLSE0048E: Unhandled exception caught: SRVE0190E: File not found: /apps/services/my_custom_auth_request_url
java.io.FileNotFoundException: SRVE0190E: File not found: /apps/services/my_custom_auth_request_url
これは、カスタム・オーセンティケーターではなく、WebSphereFormBasedAuthenticator によってリクエストが取得されるために発生します。
カスタムオーセンティケーター内のログにリクエスト URL を書き込みます。
public AuthenticationResult processRequest(HttpServletRequest request, HttpServletResponse response, boolean isAccessToProtectedResource) throws IOException, ServletException {
logger.info("Request URL is: " + request.getRequestURI());
しかし、そのラインはヒットすることはありません。
2 つのオーセンティケーターを並べて使用できますか? 私が見ている動作は、
var wlFormsAuthenticator = WL.Client.createChallengeHandler("WASLTPARealm");
と
var customAuthenticator = WL.Client.createChallengeHandler("MyCustomRealm");
混みそうです。customAuthenticator の呼び出しsubmitLoginForm
は、WebSphereForms オーセンティケーターによって取得されるべきではなく、代わりにカスタム オーセンティケーターに送られるべきだと考えました。
予想される動作と考えられる回避策を明確にしていただけますか?
また、機能するのは呼び出しです
WL.Client.login("MyCustomRealm", {
onSuccess: function() {
},
onFailure: function() {
}
});
この場合、Java コードがヒットし、認証に成功しましたが、 URLは
http://localhosT:9080/worklight/apps/services/api/MyApp/common/login
my_custom_auth_request_url
これは、Java コードでリクエストを除外できないという意味ではありません。
これが理にかなっていることを願っています。前もって感謝します。