2014-03-18 36 views
0

我正在嘗試基於SingleStepAuthAdapter應用程序示例使用Worklight customSecurityTest開發自定義登錄表單。Worklight身份驗證問題

基本上,我已經注意到SingleStepAuthAdapater中使用的登錄函數總是在用戶試圖訪問安全函數之後調用的(在此之後,在登錄操作中,安全數據被髮送給用戶),但是如果我嘗試直接調用submitAuthentication函數,然後嘗試訪問安全函數(我已將「登錄頁面」與「獲取安全數據」頁面相反),我在螢火蟲上遇到以下錯誤/ lo:

enter image description here

兩個POST調用是相同的功能RA是由Worklight在登錄操作(singleStepAuthAdapter內由singleStepAuthRealmChallengeHandler.submitAdapterAuthentication(invocationData,{})調用的submitAuthentication函數)中執行兩次,並且該錯誤與請求兩次驗證的事實有關:可能在執行驗證請求時,此函數在submitChallenge內部調用submitSuccess()函數之後發出兩次(事實上,當我刪除submitSuccess調用時,問題不會發生,但WL框架未被通知,並且例如isUserAuthenticated函數返回false,直到對安全資源的訪問被執行)。

如何解決這個問題?有什麼最佳實踐來開發一個簡單的登錄表單使用worklight,允許在任何訪問受保護的資源之前進行身份驗證?我發現了一些解決方法(例如在執行submitAuthentication之前執行假數據請求,但我希望您能向我推薦一個更好的解決方案)。

我查閱過的信息中心和入門模塊,但可能是由於我的過錯,我無法找到任何有用的信息

+0

這個職位可能會回答你的問題 - http://stackoverflow.com/questions/16997804/worklight-wl-server-setactiveuser-cannt-modify-illegal-state-cannot-chang – Anton

+0

什麼對我有效,因爲我有一個你必須登錄才能使用的應用程序是設置應用程序本身的安全檢查(application-descriptor.xml) – tik27

+1

@Anton,該帖子引用了同樣的錯誤信息,但上下文不同,因爲在我的情況下在用戶第一次嘗試登錄時發生。 登錄失敗,因爲setActiveUser被觸發兩次:第一次通過challengehandler.submitAdapterAuthentication調用對用戶進行身份驗證的適配器函數時,第二次調用submitSuccess來通知身份驗證。這個流程可能有問題,但似乎我遵循WL規範。 – brillantef

回答

2

通常的做法是有一個初步的空白頁或查看您應用程序。

在WLCommonInit中,要麼訪問受保護的資源(即getsecretdata的全部內容),要麼調用WL.Client.login()。另一種選擇(由@ tk27建議)是在應用程序描述符中保護應用程序,並將登錄時的連接設置爲true。這將在應用程序啓動時觸發身份驗證。

您的質詢處理程序應該顯示一個登錄提示對話框,當身份驗證成功完成時,轉換到您的應用程序的第一個實際頁面。

通過這種方式,身份驗證仍然是爲了響應來自WL服務器的質詢(因爲它必須是),但在登錄成功之前,除了登錄提示的空白頁之外,其他任何內容都沒有看到。