配置WSO2 API Manager以基于SAML2属性设置权限

时间:2016-06-30 18:08:50

标签: wso2 wso2carbon wso2-am

我尝试在登录时根据SAML2令牌中包含的自定义属性在WSO2 API Manager中设置用户权限级别(发布,创建,订阅等)。不基于活动用户及其映射角色的列表。是否可以使用一组动态自定义属性自定义用户权限?

SAML令牌来自第三方来源,但如果需要,可以与WSO2 Identity Server集成。

1 个答案:

答案 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令牌中存在的属性检索角色,但显然您必须构建并支持能够存储此类映射的结构。

https://github.com/wso2/carbon-identity-framework/blob/master/components/application-mgt/org.wso2.carbon.identity.application.mgt/src/main/java/org/wso2/carbon/identity/application/mgt/ApplicationMgtUtil.java