首页 文章

配置WSO2 API Manager以根据SAML2属性设置权限

提问于
浏览
1

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

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

1 回答

  • 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

相关问题