0

我正在尝试使用基于 SingleStepAuthAdapter 应用程序示例的 Worklight customSecurityTest 开发自定义登录表单。

基本上,我注意到 SingleStepAuthAdapater 中使用的登录函数总是在该用户尝试访问安全函数后被调用(之后,在登录操作时,安全数据被发送给用户),但是如果我尝试调用submitAuthentication 功能直接,在任何尝试访问安全功能之前(我已经用“获取安全数据”页面反转了“登录页面”),我在萤火虫上得到了以下错误/lo:

在此处输入图像描述

这两个 POST 调用是 Worklight 在登录操作上引发两次的相同函数(由 singleStepAuthRealmChallengeHandler.submitAdapterAuthentication(invocationData, {}) 调用的 SingleStepAuthAdapter 内的 submitAuthentication 函数),错误与请求两次身份验证的事实有关:可能是当执行身份验证请求,此函数在 handleChallenge 内部调用 submitSuccess() 函数后发出两次(实际上,当我删除 submitSuccess 调用时,不会出现此问题,但未通知 WL 框架,例如isUserAuthenticated 函数返回 false,直到执行对安全资源的访问)。

如何解决此行为?使用 worklight 开发一个简单的登录表单的最佳实践是什么,允许在访问受保护的资源之前进行身份验证?我找到了一些解决方法(例如在执行 submitAuthentication 之前执行虚假数据请求,但我希望您能建议我一个更好的解决方案)。

我已经查阅了信息中心和入门模块,但可能由于我的错误,我无法找到任何有用的信息

4

1 回答 1

2

一种常见的做法是为您的应用程序创建一个初始空白页面或视图。

在 WLCommonInit 中,要么访问受保护的资源(这就是 getsecretdata 的全部内容),要么调用 WL.Client.login()。另一个选项(@tk27 建议)是在应用程序描述符中保护应用程序并将登录时连接设置为 true。这将在应用程序启动时触发身份验证。

您的质询处理程序应该显示一个登录提示对话框,并且当身份验证成功完成时,转换到您的应用程序的第一个真实页面。

这样,身份验证仍会响应来自 WL 服务器的质询(必须如此)进行,但在登录成功之前,您只会看到登录提示的空白页面。

于 2014-03-19T13:55:44.730 回答