我们正在开发基于MFP 7.1的混合应用程序cordova。据观察,该应用程序使用客户端ID作为会话ID。如下面的红色框
发现在重新安装应用程序之前不会更改客户端ID。每当用户登录设备时,其身份将与客户端ID相关联。使用客户端ID,它可以从应用程序服务器检索另一个ID WL-Instance-ID。凭借有效的客户端ID和WL-Instance-ID,攻击者将能够以受害用户的权限访问该应用程序。
如何分离客户ID和会话ID?即,不应仅仅通过客户端ID检索有效的会话ID /令牌。在安全上下文更改期间,应更改会话ID /令牌。
我们按照此处的说明实施身份验证 https://mobilefirstplatform.ibmcloud.com/tutorials/en/foundation/7.1/authentication-security/custom-authentication/
创建mobileSecurityTest以保护适配器的程序;它位于SecurityTests部分。
<mobileSecurityTest name="LoginAdapter-securityTest">
<testUser realm="LoginAdapterRealm" />
<testDeviceId provisioningType="none" />
<testDirectUpdate mode="disabled"/>
</mobileSecurityTest>
使用AdapterAuthenticator处理userIdentity,并在LoginAdapter中定义LoginAdapter.onAuthRequired,LoginAdapter.onLogout两个方法来处理安全请求。
<realm loginModule="LoginAdapterModule" name="LoginAdapterRealm">
<className>com.worklight.integration.auth.AdapterAuthenticator</className>
<parameter name="login-function" value="LoginAdapter.onAuthRequired" />
<parameter name="logout-function" value="LoginAdapter.onLogout" />
</realm>
定义模块以创建和存储LoginAdapterRealm使用的用户身份;它位于loginModules部分。
<loginModule name="LoginAdapterModule" expirationInSeconds="1800">
<className>com.worklight.core.auth.ext.NonValidatingLoginModule</className>
</loginModule>