我尝试在登录时根据SAML2令牌中包含的自定义属性在WSO2 API Manager中设置用户权限级别(发布,创建,订阅等)。不基于活动用户及其映射角色的列表。是否可以使用一组动态自定义属性自定义用户权限?
SAML令牌来自第三方来源,但如果需要,可以与WSO2 Identity Server集成。
答案 0 :(得分:0)
API Manager在底层运行Identity Server应用程序管理,以查找用户角色和权限。在org.wso2.carbon.identity.application.mgt.ApplicationMgtUtil
中,只要应用程序需要检查用户的权限,您就可以看到可能会触发的isUserAuthorized
方法。
/**
* @param applicationName
* @param username
* @return
* @throws IdentityApplicationManagementException
*/
public static boolean isUserAuthorized(String applicationName, String username)
throws IdentityApplicationManagementException {
String applicationRoleName = getAppRoleName(applicationName);
try {
if (log.isDebugEnabled()) {
log.debug("Checking whether user has role : " + applicationRoleName + " by retrieving role list of " +
"user : " + username);
}
String[] userRoles = CarbonContext.getThreadLocalCarbonContext().getUserRealm()
.getUserStoreManager().getRoleListOfUser(username);
for (String userRole : userRoles) {
if (applicationRoleName.equals(userRole)) {
return true;
}
}
} catch (UserStoreException e) {
throw new IdentityApplicationManagementException("Error while checking authorization for user: " +
username + " for application: " + applicationName, e);
}
return false;
}
您应该可以替换
String[] userRoles = CarbonContext.getThreadLocalCarbonContext().getUserRealm()
.getUserStoreManager().getRoleListOfUser(username);
代码将根据SAML2令牌中存在的属性检索角色,但显然您必须构建并支持能够存储此类映射的结构。