首页 > 解决方案 > 如何将内部/订阅者角色设置为 WSO2 Api 管理器中所有经过身份验证的用户的默认角色?

问题描述

我正在尝试将默认角色作为内部/订阅者提供给所有用户。我在文件/_system/config/apimgt/applicationdata/tenant-conf.json 中进行了更改并添加了角色,例如内部/创建者,内部/每个人,apimrole “名称”:“apim:订阅”,“角色": "admin,Internal/creator,Internal/everyone,apimrole,Internal/subscriber" 它给了我下面的错误

org.wso2.carbon.apimgt.api.APIManagementException: Error while adding the subscriber 
laxman@gmail.com@carbon.super@carbon.super

任何帮助表示赞赏

标签: deploymentwso2wso2isroleswso2-appm

解决方案


在 WSO2 API Manager 中以两种方式创建新用户。

  1. 通过 API Manager 的管理控制台
  2. 自行注册

在第一种方式中,您可以在创建用户时分配角色。

对于自注册用户,已经存在一个处理程序,用于将内部/订阅者角色分配给具有内部/自注册角色的新用户。

分配角色:内部/订阅者给新用户或现有角色未分配用户,我们有以下两个选项:

选项1

如果您希望使用管理控制台将订阅者角色分配给未分配用户的现有角色,则可以转到此处的角色列表页面:

角色列表

有一个选项:在与内部/订阅者角色相关的角色列表中的操作列中分配用户。

为角色分配用户

它将列出所有未分配内部/订阅者角色的用户,并且有几个选项可以一次选择多个用户并分配角色。

选项 2

您可以编写自定义用户操作事件侦听器并将其添加为 OSGI 包。在这种情况下,您可以参考此WSO2 IS 文档并编写一个扩展 AbstractIdentityUserOperationEventListener 的事件侦听器。

此示例代码对我有用:

public class SampleEventListener extends AbstractIdentityUserOperationEventListener {

private static final String EVENT_LISTENER_TYPE = "org.wso2.carbon.user.core.listener.UserOperationEventListener";
private static final String SUBSCRIBER_ROLE = "Internal/subscriber";

@Override
public boolean doPreAddUser(String userName, Object credential, String[] roleList, Map<String, String> claims,
                            String profile, UserStoreManager userStoreManager) throws UserStoreException {

    List<String> roles = new ArrayList<>(Arrays.asList(roleList));
    if (!roles.isEmpty() && !roles.contains(SUBSCRIBER_ROLE)) {
        userStoreManager.updateRoleListOfUser(userName, new String[]{}, new String[] { SUBSCRIBER_ROLE });
    }
    return true;
}

如果用户在添加新用户的过程中没有该角色,这将为每个新添加的用户添加内部/订阅者角色。

这里它提到了多个接口,您可以使用它们实现用户存储侦听器。

对于 OSGI 包的创建和部署过程,您可以找到这个示例 GitHub 项目<APIM_HOME>/repository/components/dropins/您可以按照那里提到的步骤将构建的 jar 文件复制到目录中。(由于 WSO2 API Manager 也使用 WSO2 IS 组件,您也可以按照自述文件中提到的相同步骤使用 API Manger)

您可以通过这篇博文了解有关 OSGI 捆绑的完整信息。


推荐阅读