wso2 身份服务器 5.10.1 - 基于角色的自适应用户身份验证 var hasRole 始终为 false

问题描述

我们将 WSO2 5.10.1 用于 SSO,我正在尝试使自适应 MFA 正常工作,但遇到了一些问题。基于 IP 的自适应认证模板有效,但由于某种原因,基于角色的模板不起作用。出于某种原因,变量 hasRole 始终返回 false,即使我的测试用户是名为 staff2 的内部角色的成员。 Staff2 是一个仅包含测试用户的内部角色。

带有信息的 wso2carbon.log 如下。我还包括了我正在使用的脚本,它是基于角色的认模板,以及我为了在日志中获取更多信息而进行的一些修改

日志:

TID: [-1234] [] [2021-02-02 10:14:34,684] [badcbf3d-288c-4d3a-8abc-372763d87e0b]  INFO {org.wso2.carbon.identity.application.authentication.framework.config.model.graph.js.JsLogger} - Working so far
TID: [-1234] [] [2021-02-02 10:14:34,684] [badcbf3d-288c-4d3a-8abc-372763d87e0b]  INFO {org.wso2.carbon.identity.application.authentication.framework.config.model.graph.js.JsLogger} - false string info
TID: [-1234] [] [2021-02-02 10:14:34,684] [badcbf3d-288c-4d3a-8abc-372763d87e0b]  INFO {org.wso2.carbon.identity.application.authentication.framework.config.model.graph.js.JsLogger} - <testuser> Has one of Roles: [staff2]

我的代码

// Role-Based from Template...

// This script will step up authentication for any user belonging
// to one of the given roles
// If the user has any of the below roles,authentication will be stepped up
var rolesToStepUp = ['staff2'];

var onLoginRequest = function(context) {
    executeStep(1,{
        onSuccess: function (context) {
            // Extracting authenticated subject from the first step
            var user = context.currentKNownSubject;
            // Checking if the user is assigned to one of the given roles
            var hasRole = hasAnyOfTheRoles(user,rolesToStepUp);
            Log.info('Working so far');
            Log.info(hasRole + ' string info');
            if (5 > 1) {
                Log.info(user.username + ' Has one of Roles: ' + rolesToStepUp.toString());
                executeStep(2);
            }
        }
    });
};

// End of Role-Based.......

解决方法

如下更改您的 rolesToStepUp 变量并尝试。

var rolesToStepUp = ['Internal/staff2'];

如果您将变量用作 var rolesToStepUp = ['staff2'];,它会检查用户在 PRIMARY 用户存储中是否具有名为“staff2”的角色。例如,如果您通过选择域-PRIMARY 和角色名称-staff2 创建一个角色,则分配到该角色的用户将能够根据您的脚本执行 2 个步骤。

如果要使用附加到 PRIMARY 用户存储的角色以外的角色,则需要在 var rolesToStepUp 数组中定义域。 由于您已创建内部角色,因此 var rolesToStepUp 应定​​义为 var rolesToStepUp = ['Internal/staff2'];