![](/img/trans.png)
[英]Wso2 IS adaptive authentication clear session on backbutton click
[英]Wso2 Identity Server Adaptive Authentication with Federation
我们正在使用 Microsoft Azure 实施 MFA。 我们运行 wso2 身份服务器 5.10.4。
我希望看到发生的情况是,当用户登录时,如果他们具有某些 memberOf AD 角色,就会发生联合。 如果没有,它只使用基本的身份验证/正常登录。
我一直在使用自适应身份验证自定义脚本来解决这个问题。 在服务提供商上,我创建了两个登录步骤。 第 1 步是基本身份验证。 第 2 步是我们的 MS 联合身份验证器。
var arrayOfRoles = ["employee","student"];
var onLoginRequest = function(context) {
executeStep(1, {
onSuccess: function (context) {
// Extracting authenticated subject from the first step
var memberOfClaim = 'http://wso2.org/claims/employeeType';
var user = context.currentKnownSubject;
var roles = context.currentKnownSubject.localClaims[memberOfClaim];
foundRole = '-1';
var arrayOfRolesLen = arrayOfRoles.length;
for (var i = 0; i < arrayOfRolesLen; i++) {
searchRole = roles.indexOf(arrayOfRoles[i]);
if (searchRole >= 0) {
foundRole = searchRole;
}
}
if (foundRole >= 0 ) {
Log.info(user.username + ' found a role, indexof=' + foundRole);
// Step 2 is MFA
executeStep(2);
}
}
});
};
该脚本正确地找到了此人的 AD memberOf 值,并且我可以使用此脚本执行第 2 步。 问题是一个人登录一次 wso2,然后如果角色匹配并调用了 executeStep(2),则会提示他们另一个登录屏幕 wso2。
当某人符合第 2 步的条件时,如何防止再次登录? 或者,对于何时使用 basicauth 进行身份验证以及何时使用联合身份验证做出基于角色的决策,这是错误的方法吗?
让我解释一下您使用脚本在此处编写的内容。 所以你有两个身份验证步骤。
如果您尚未启用自适应脚本,则在基本身份验证步骤(步骤 1)之后,用户需要针对 FIDP 进行身份验证(步骤 2)。
根据您编写的当前脚本,所有用户都将有一个用户名和密码验证步骤(步骤1)。 该步骤成功后,如果用户具有特定的一组角色,则将启用 FIDP 身份验证(步骤 2)。
现在考虑具有这些指定角色的用户。 当该用户登录时,首先用户将看到用户名密码登录页面。 之后,如果用户在 Azure 中没有活动的 session,用户将看到 azure 登录页面(如果启用了 SSO,用户可能看不到第二个屏幕)。 所以预计会看到两个登录屏幕。
所以你在这里做的是正确的,但是用户体验有点奇怪。 这里解释了一个类似的场景。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.