针对适配器冲突的 Work Light 2 安全测试

Posted

技术标签:

【中文标题】针对适配器冲突的 Work Light 2 安全测试【英文标题】:Worklight 2 security tests for adapters conflic 【发布时间】:2014-06-06 16:12:00 【问题描述】:

我一直在为适配器进行两项安全测试。

其中一项安全测试是查看用户是否为管理员

第二个安全测试是看用户是否是项目经理。

这两个角色都有不同类型的访问权限,需要单独处理。

所以我在 authenticationConfiguration.xml 中定义了两个安全测试

对于这两个安全测试,我已经在 javascript 的移动应用程序中制作了它们的领域处理程序

所有代码都在下面找到。

问题:

如果调用了需要安全检查的过程,则调用两个安全域。但只有最先加载的安全测试才会继续验证,而其他安全测试甚至不会收到挑战。

谁能告诉我为什么调用这两个安全测试以及我如何确保它只为正确的适配器调用安全测试。 两个安全测试都是单步验证

    <securityTests>
    <customSecurityTest name="Admin-securityTest">
        <test isInternalUserID="true" realm="AdminAuthRealm"/>
    </customSecurityTest>
    <customSecurityTest name="PM-securityTest">
        <test isInternalUserID="true" realm="PMAuthRealm"/>
    </customSecurityTest>
</securityTests>

<realms>


    <realm loginModule="AuthLoginModule" name="AdminAuthRealm">
        <className>com.worklight.integration.auth.AdapterAuthenticator</className>
        <parameter name="login-function" value="AdminAdapter.onAuthRequired"/>
        <parameter name="logout-function" value="AdminAdapter.onLogout"/>
    </realm>
     <realm loginModule="AuthLoginModule" name="PMAuthRealm">
        <className>com.worklight.integration.auth.AdapterAuthenticator</className>
        <parameter name="login-function" value="ProjectAdapter.onAuthRequired"/>
        <parameter name="logout-function" value="ProjectAdapter.onLogout"/>
    </realm>
</realms>

<loginModules>    

    <loginModule name="AuthLoginModule">
        <className>com.worklight.core.auth.ext.NonValidatingLoginModule</className>
    </loginModule>
</loginModules> 

管理适配器

    <procedure name="submitAuthentication"/>
<procedure name="getUsers" securityTest="Admin-securityTest"/>

PM适配器

    <procedure name="submitAuthentication"/>
<procedure name="updateProject" securityTest="PM-securityTest"/>

AdminRealmHandler

var AdminAuthRealmChallengeHandler = WL.Client.createChallengeHandler("AdminAuthRealm")
AdminAuthRealmChallengeHandler.isCustomResponse = function(response) 
console.log("ADMIN AUTH");
console.log(response);
if (!response || !response.responseJSON || response.responseText === null) 
    console.log("is costumresponse false 1 No json");
    return false;

if (typeof(response.responseJSON.authRequired) !== 'undefined')
    console.log("is costumresponse true needs auth");
    return true;
 
else 
    console.log("is costumresponse false 2 else");
    return false;

;

AdminAuthRealmChallengeHandler.handleChallenge = function(response)

var authRequired = response.responseJSON.authRequired;

 if (authRequired == true)
     if(response.responseJSON.errorMessage !== null)
            AdminAuthRealmChallengeHandler.submitFailure();
        else
        var invocationData = 
                adapter : "AdminAdapter",
                procedure : "submitAuthentication",
                parameters : [ userId, email, connectionsUid ]
            ;
        AdminAuthRealmChallengeHandler.submitAdapterAuthentication(invocationData, );
        

else if (authRequired == false)
    AdminAuthRealmChallengeHandler.submitSuccess();

;

ProjectRealmHandler

var PMAdminAuthRealmChallengeHandler = WL.Client.createChallengeHandler("PMAuthRealm");
PMAdminAuthRealmChallengeHandler.isCustomResponse = function(response) 
console.log(response);
if (!response || !response.responseJSON || response.responseText === null) 
    return false;

if (typeof(response.responseJSON.authRequired) !== 'undefined')
    return true;
 else 
    return false;

;

PMAdminAuthRealmChallengeHandler.handleChallenge = function(response)
var authRequired = response.responseJSON.authRequired;
console.log(response);

if(response.responseJSON.errorMessage !== null && typeof(response.responseJSON.errorMessage) !== 'undefined')
    PMAdminAuthRealmChallengeHandler.submitFailure();

if (authRequired == true)
     if(response.responseJSON.errorMessage !== null)
            PMAdminAuthRealmChallengeHandler.submitFailure();
        else


            var invocationDataPM = 
                    adapter : "ProjectAdapter",
                    procedure : "submitAuthentication",
                    parameters : [ userId, email, connectionsUid ]
                ;
            PMAdminAuthRealmChallengeHandler.submitAdapterAuthentication(invocationDataPM, );
        


else if (authRequired == false)
    PMAdminAuthRealmChallengeHandler.submitSuccess();

;

【问题讨论】:

【参考方案1】:

我认为您不能对一种身份验证使用两种不同的安全测试。但是您可以做的是使用受相同自定义安全测试保护的两个领域并选择检查顺序。在这个document阅读第23页

【讨论】:

以上是关于针对适配器冲突的 Work Light 2 安全测试的主要内容,如果未能解决你的问题,请参考以下文章

getUser 通知订阅 WORK LIGHT 推送通知中的用户 ID

Windows 8 问题上的 Work Light 6.0 部署

更新应用程序后在 Work Light 6.0 中收到多次推送通知

“吐槽”自动驾驶测试场:费用高门槛高不安全不实际!| 中国汽车报

ecshop jquery冲突 终极解决方案。亲测生效。

Hadoop-HDFS压测针对HDFS进行读写性能测试