WSO2IS/APIM: 如何在自定义身份验证器中分配用户角色

WSO2IS/APIM: How to assign user role in a custom authenticator

我正在尝试实现一个自定义身份验证器以与 WSO2-IS 和 WSO2-APIM 一起使用。但是,我找不到为经过身份验证的用户分配角色的方法。

我希望经过身份验证的用户具有角色 "customer"。下面是我在方法 processAuthenticationResponse 中使用的代码。

Map<ClaimMapping, String> claims = new HashMap<ClaimMapping, String>();
claims.put(ClaimMapping.build("http://wso2.org/claims/role", "http://wso2.org/claims/role", null, false), "customer");

AuthenticatedUser user = AuthenticatedUser.createLocalAuthenticatedUserFromSubjectIdentifier("xxxxxx");
context.setSubject(user);

非常感谢任何正确实施此操作的指南。

非常感谢。

我假设您的用户存储中已经有一个名为 'customer' 的角色。 您在这里可以做的是通过实现 org.wso2.carbon.user.core.listener.UserOperationEventListener 来实现自定义 UserStoreEventListener。在您的组件激活中,您需要将此侦听器注册为 osgi 服务。

protected void activate(ComponentContext context) {

    YourListener yourListener =
            new YourListener();
    context.getBundleContext().registerService(
            UserOperationEventListener.class.getName(), yourListener, null);
}

您可以通过扩展 org.wso2.carbon.user.core.common.AbstractUserOperationEventListener 来编写此侦听器,它是此接口的抽象实现。

然后通过实现 postAuthenticate 方法,您可以添加所需的功能,如下所示。

import org.wso2.carbon.user.core.common.AbstractUserOperationEventListener;

public class YourListener extends AbstractUserOperationEventListener {
public boolean isEnable() {
    //add implementation to this or you can enable always by returning true
}

public int getOrderId() {
    //give the order this listener should executed eg-:120
}

@Override
public boolean doPostAuthenticate(String userName, boolean authenticated,
                                  UserStoreManager userStoreManager) throws UserStoreException {

    userStoreManager.updateRoleListOfUser(userName,new String[0], new String[]{"customer"});
 }
}

我找到了解决问题的方法。除了我在自定义联合身份验证器中将角色分配给 http://wso2.org/claims/role 声明的代码外,我还需要启用 Just-In-Time provisioning 然后通过我的自定义联合身份验证器验证的用户将在 WSO2 中创建具有指定角色。

PS。我仍然无法让具有特定角色的自定义身份验证器对用户进行身份验证,而不必通过即时配置首先在 WSO2 中创建用户。