我们正在构建具有两步身份验证过程的 Worklight 应用程序。
第 1 步:表单身份验证
我们正在使用开箱即用的 WASLTPARealm,它根据 WebSphere 中的自定义 JAAS 模块对我们进行身份验证并返回一个 LTPA 令牌。这按预期工作。
第 2 步:自定义身份验证
器 第二步是自定义身份验证器和登录模块,它:
- 读取在步骤 1 中设置的 LTPA cookie
- 使用 LTPA cookie 向另一个应用程序发出 POST 请求(这两个应用程序通过单点登录受信任)
- 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 而不是我们的 Custom Authenticator 接收。
我们正在通过以下方式将请求 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");
似乎混在一起了。我认为调用submitLoginForm
customAuthenticator 不应该被 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 代码中的请求。
希望这是有道理的。提前致谢。