我們正在嘗試在IBMWorklight服務器上開發會話管理。以下是我們對會話管理系統的需求 -IBMWorklight會話管理
- 會話應該在每個用戶使用其憑據(用戶名/密碼)登錄時創建一次。
- 這次會議應該能夠存儲特定的用戶即會話的數據說,會議應該拯救他的憑證,所以他不必再訪問其他服務傳遞這些。
- 會話超時應在一段時間後發生。
我們的進步
創建一個境界中authenticationConfig:
<realm name="SimpleAuthRealm" loginModule="SimpleAuthLoginModule"> <className>com.worklight.integration.auth.AdapterAuthenticator</className> <parameter name="login-function" value="SimpleAuthAdapter.onAuthRequired" /> <parameter name="logout-function" value="SimpleAuthAdapter.onLogout" /> </realm>
創建於authenticationConfig登錄模塊:
<loginModule name="SimpleAuthLoginModule"> <className>com.worklight.core.auth.ext.NonValidatingLoginModule</className> </loginModule>
創建安全測試:
<customSecurityTest name="SimpleAuthAdapterTest"> <test realm="SimpleAuthRealm" isInternalUserID="true"/> </customSecurityTest>
我們已經創建了一個包含兩個過程的適配器。以下是adapter.xml文件
<procedure name="requestForData" securityTest="SimpleAuthAdapterTest" /> <procedure name="requestForOtherData" securityTest="SimpleAuthAdapterTest" />
以下是適配器實現文件:
function onAuthRequired(headers, errorMessage) { WL.Logger.info("onAuthRequired(headers, errorMessage)----> START"); WL.Logger.info("headers: " + JSON.stringify(headers)); WL.Logger.info("errorMessage: " + errorMessage); errorMessage = errorMessage ? errorMessage : null; WL.Logger.info("onAuthRequired(headers, errorMessage)----> STOP"); return { authRequired : true, errorMessage : errorMessage }; } function submitAuthentication(username, password) { WL.Logger.info("submitAuthentication(username, password)----> START"); WL.Logger.info("username: " + username); WL.Logger.info("password: " + password); if (username === "worklight" && password === "worklight") { WL.Logger.info("Login successfull"); var userIdentity = { userId : username, displayName : username, }; WL.Server.setActiveUser("SimpleAuthRealm", userIdentity); var response = { authRequired : false, errorMessage : "" }; WL.Logger.info("submitAuthentication(username, password)----> STOP"); WL.Logger.info("response: " + JSON.stringify(response)); return response; } var response = { authRequired : true, errorMessage : "Invalid login credentials" }; WL.Logger.info("submitAuthentication(username, password)----> STOP"); WL.Logger.info("response: " + JSON.stringify(response)); return response; } function onLogout() { WL.Logger.info("onLogout()---->START"); WL.Server.setActiveUser("SimpleAuthRealm", null); //WL.Client.logout('SimpleAuthRealm'); WL.Logger.info("onLogout()---->STOP"); }
我們已經創建虛擬用戶界面,其中包括登錄頁面和主頁。單擊登錄按鈕將調用submitAuthentication()服務並遷移到主頁。主頁由兩個按鈕組成,一個用於調用requestForData()服務,另一個用於requestForOtherData()服務。
問題,我們都面臨着:
- 此流量需求率先例如打電話的保護服務requestForData和作爲響應的worklight服務器將拋出挑戰,我們將通過提供用戶憑證來清除這些挑戰。我們需要倒過來,我們希望提供用戶的憑據,並啓動會話,這樣,由該領域(安全測試)保護所有的服務應該可以訪問。
- 一旦我們的第一個服務,我們可以調用其他服務,而無需提供用戶憑據,但同時呼籲未來的服務,我們不是通過調用客戶端的任何標識,這使我們相信明顯挑戰這是建立在第一個服務會話呼叫挑戰是針對所有/任何用戶而不是用戶特定的。我們需要非常非常特定用戶的會話。
請在我們正在開發銀行移動應用程序時,如果這是維護Worklight中間件服務器會話的好主意,請發表評論。請上述建議的解決方案......
感謝您的回覆大衛,以下是仍然存在的疑問 - 1。我們的服務即使沒有身份驗證也必須被調用。如果我們在第一次連接呼叫時要求認證,它將自己詢問用戶名和密碼,如果用戶沒有證書,他甚至不能訪問不需要認證的服務。 – Sumit 2014-09-03 07:43:57
...如果我們要求在第一次連接呼叫時進行身份驗證,它將自動詢問用戶名和密碼,如果用戶沒有憑據,他甚至不能訪問不需要身份驗證的服務。 2.會話基於用戶和設備進行維護,即如果我們使用兩臺設備並使用同一用戶登錄,但仍創建了與預期相同的單獨會話,但我們未在後續服務中明確傳遞任何設備令牌或用戶標識調用。它如何自動運行... – Sumit 2014-09-03 07:55:03
如果您有一項要求,即該應用程序具有可在沒有登錄的情況下運行的某些功能,並且需要登錄的功能,則啓動時無法進行身份驗證。我誤解了你的擔憂嗎?如果您未保護應用程序,但僅保護服務,則在您第一次嘗試訪問受保護服務時,服務器將發送一個質詢。從那時起(只要移動應用程序的工作燈會話有效),應用程序就可以訪問在同一領域受保護的服務,而不會有進一步的挑戰。 – 2014-09-03 14:00:25