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

时间:2016-04-08 03:44:56

标签: wso2 wso2is wso2-am

我正在尝试使用WSO2-IS和WSO2-APIM来实现自定义身份验证器。但是,我找不到将方法分配给经过身份验证的用户的方法。

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

merge/concat

非常感谢任何正确实施此功能的指南。

非常感谢。

2 个答案:

答案 0 :(得分:0)

我假设您的用户商店中已经有一个名为“customer”的角色。 您可以在此处执行的是通过实施UserStoreEventListener来实施自定义org.wso2.carbon.user.core.listener.UserOperationEventListener。我的组件激活你需要将这个监听器注册为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"}); } } 方法,您可以添加如下所需的功能。

{
"_source": false,
"query": {
"nested": {
  "path": "somerecord",
  "query": {
    "bool": {
      "must": [
        { "match": { "fieldValue": "1" }}
       ]
    }
   },
   "inner_hits" :{}
   }
 }

答案 1 :(得分:0)

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

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