- PR -

EJBの実行権限を管理できるようなフレームワークを探しています

1
投稿者投稿内容
10takashi
会議室デビュー日: 2008/02/28
投稿数: 8
投稿日時: 2008-03-19 23:43
大変抽象的な質問になってしまいますが、今訳があってEJB(Session Bean)を実行する際に、
実行するユーザ(厳密にはBeanを呼び出すメソッド)に権限を付加して、
アクセスコントロールの仕組みを確立して欲しいと上司に頼まれました。

できればフレームワークを使用してこれらを実現させたいとの事なので
どなたか、このような権限管理ができるフレームワークを知っていたら
教えて頂けると甚だ幸いです。

システムへの実装はその次の段階で考慮したいので、まずはなるべく多く
意見を頂けると幸いです。

よろしくお願いいたします。
まっつん
会議室デビュー日: 2008/03/20
投稿数: 1
投稿日時: 2008-03-20 01:48
アプリケーションサーバ毎に使い方は異なるかもしれませんが、J2EEにはレルムというものが標準で備わっていると思います。

普通はそれを使うと思います。
10takashi
会議室デビュー日: 2008/02/28
投稿数: 8
投稿日時: 2008-03-20 23:24
あちがとうございます。皆様に頂いたアドバイスから
フレームワークを探すのでなく、JAASを使用することに決めました。

現在はJboss(4.2.2-AG)側の設定を終えて、Beanの実行時に、ユーザ名、パスワード
チェックによる認証処理、及びユーザ名に紐付いたロール名で、ロール
ベースの認証が行えています。

具体的に施した処理を記述すると

============ conf/login-config

<!-- Additional Application Policy to test role based authentication -->
<application-policy name="ejb3sample">
<authentication>
<module-option name ="managedConnectionFactoryName">jboss.jca:service=LocalTxCM,name=DefaultDS</module-option>
<login-module code="org.jboss.security.auth.spi.UsersRolesLoginModule" flag="required">
<module-option name="usersProperties">props/users.properties</module-option>
<module-option name="rolesProperties">props/roles.properties</module-option>
<module-option name="unauthenticatedIdentity">anonymous</module-option>
</login-module>
</authentication>
</application-policy>
-----

こちらのセキュリティドメインの設定を追記し、さらにconf/props配下に
user.properties, role.propertiesを生成して、ユーザ名ーパスワード
ユーザ名ーロール名のマッピングを行いました。

その後に、テスト用のセッションBean

======== SimpleHelloBean
package eu.ejb;

import javax.annotation.security.PermitAll;
import javax.annotation.security.RolesAllowed;
import javax.annotation.security.RunAs;
import javax.ejb.Stateless;

import org.jboss.annotation.ejb.RemoteBinding;
import org.jboss.annotation.security.SecurityDomain;


import eu.valueprice.jaas.interfaces.SimpleHello;

@Stateless
@SecurityDomain("java:/jaas/ejb3sample")
@RunAs("admin")
@RolesAllowed({"admin"})
@RemoteBinding(jndiBinding = "ejb/JAAS")
public class SimpleHelloBean implements SimpleHello {

@RolesAllowed("admin")
public void sayHello() {
System.out.println("This is allowed to Admin");
}

@PermitAll
public void test() {
System.out.println("This is allowed to vip");

}

}


続いてインタフェースの作成
===== SimpleHello
package eu.interfaces;

import javax.ejb.Remote;

@Remote
public interface SimpleHello {

public void sayHello();

public void test();
}

最後にクライアントの作成
====== Client
package eu.client;

import java.util.Properties;

import javax.naming.Context;
import javax.naming.InitialContext;
import eu.valueprice.jaas.interfaces.SimpleHello;

public class SimpleClient {

/**
* @param args
* @throws Exception
*/

public static void main(String[] args) throws Exception {

Properties props = new Properties();
props.setProperty(Context.SECURITY_PRINCIPAL, "user1");
props.setProperty(Context.SECURITY_CREDENTIALS, "password1");

Context cntxt = new InitialContext();
SimpleHello simpleHello = (SimpleHello) cntxt.lookup("ejb/JAAS");

simpleHello.sayHello();
simpleHello.test();

}

}


この状態でクライアントを実行すると無事にロールベースの制御を実現
させることができました。

ただ、問題は、Remoteインタフェースから、Localインタフェースに変えて
同じ作業を行ったところ、

ERROR [RoleBasedAuthorizationInterceptor] Insufficient permissions, principal=null, requiredRoles=[admin], principalRoles=[]

こんなエラーが返り、認証に失敗しました。ローカルインタフェースの場合は
この方法ではだめなのでしょうか???
誰か知見がございましたら、教えてください。。。
1

スキルアップ/キャリアアップ(JOB@IT)