2016-04-08 7 views
0

WSO2-ISとWSO2-APIMを使用するカスタム認証ツールを実装しようとしています。しかし、私は認証されたユーザーに役割を割り当てる方法を見つけることができません。WSO2IS/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); 

これを正しく実装するためのガイドは非常に高く評価されています。

ありがとうございました。

答えて

0

私は私の問題の解決策を見つけました。 http://wso2.org/claims/roleクレームにロールを割り当てるカスタムフェデレーション認証者のコードに加えて、Just-In-Time provisioningも有効にする必要があります。カスタムフェデレーション認証者によって認証されたユーザーは、指定された役割のWSO2に作成されます。

PS。 Just-In-Time Provisioningを介してWSO2で最初に作成されたユーザーを持つことなく、特定の役割を持つカスタム認証者によってユーザーを認証させることはできません。

0

ユーザーストアに「顧客」という役割が既にあるとします。 ここでできることは、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"}); 
} 
} 
+0

ありがとうございます。しかし、私はそれを試して、それはまだ動作しません。私はデバッグして、カスタム認証者でユーザーを認証した後にメソッドdoPostAuthenticateが呼び出されないようです。 詳細情報私はユーザーストアで定義された役割 "顧客"を持っています。ただし、カスタムオーセンティケータで認証したユーザー名はユーザーストアにありません。 (そのため、カスタムオーセンティケータを作成する必要があります)。これは正しいアプローチですか? – tinnapat

+0

'doPostAuthenticate'メソッドが呼び出されない場合は、サービス登録の問題である必要があります。リスナーが正しく登録されているか確認してください。 あなたのユーザーと '顧客'の役割は2つの異なるユーザーストアにありますか?異なるユーザーストアの役割を、別のユーザーストアのユーザーに割り当てることはできません –

+0

こんにちはChamila。申し訳ありません。私はモバイルアプリケーション経由でユーザーを認証するカスタムオーセンティケータを作成しようとしています(OTPと同様に、ユーザーのモバイルアプリケーションにコードを送信し、ユーザーは認証エンドポイントのログインページにコードを入力する必要があります)。ユーザが任意のユーザストアに格納されないように)。しかし、ロール "customer"を持つユーザーのみを許可するAPIMのスコープを指定するので、認証されたユーザーにロール "customer"を持たせたいと思います。私のシナリオで可能ですか?ありがとう – tinnapat

関連する問題