我们正在尝试在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