2

GlassFish 3 でJSR 196に準拠したカスタム認証モジュールを使用したいと考えています。インターフェース javax.security.auth.message.ServerAuth には次のメソッドがあります。

AuthStatus validateRequest(
  MessageInfo messageInfo,
  javax.security.auth.Subject clientSubject,
  javax.security.auth.Subject serviceSubject
)

AuthStatus は、FAILURE や SUCCESS などの定数のいずれかになります。

問題は、JSR 196 を使用して「ロール データベース」からロールを取得するにはどうすればよいかということです。

例: サーバーは SSO トークン (たとえば、CAS トークン) を含む要求を受信し、トークンが有効かどうかを確認し、JDBC を介してデータベースから、または http を介して REST サービスから取得したロールをリモート ユーザー オブジェクトに取り込みます。

役割フェッチは JSR 196 の範囲内ですか? それはどのように実装できますか?

カスタム認証とカスタム ロール ソースを使用するには、 JSR 115と共に JSR 196 を使用する必要がありますか?

4

2 に答える 2

1

これは、私の JSR-196OpenID 実装のコード例です。このメソッドは、現在の CallerPrincipal の文字列配列に格納されているロールを設定します。

private boolean setCallerPrincipal(String caller, Subject clientSubject) {
            boolean rvalue = true;
            boolean assignGroups = true;
            // create CallerPrincipalCallback
            CallerPrincipalCallback cPCB = new CallerPrincipalCallback(
                            clientSubject, caller);
            if (cPCB.getName() == null && cPCB.getPrincipal() == null) {
                    assignGroups = false;
            }
            try {
                    handler.handle((assignGroups ? new Callback[] {
                                    cPCB,
                                    new GroupPrincipalCallback(cPCB.getSubject(),
                                                    assignedGroups) } : new Callback[] { cPCB }));
                    logInfo(DEBUG_JMAC, "jmac.caller_principal:" + cPCB.getName() + " "
                                    + cPCB.getPrincipal());
            } catch (Exception e) {
                    // should not happen
                    logger.log(Level.WARNING, "jmac.failed_to_set_caller", e);
                    rvalue = false;
            }
            return rvalue;
    }

このメソッドは、validateRequest() メソッドの中で呼び出します。ここで完全なコードを見ることができます: http://code.google.com/p/openid4java-jsr196/source/browse/trunk/src/main/java/org/imixs/openid/openid4java/OpenID4JavaAuthModule.java

また、このページも役立ちます: http://code.google.com/p/openid4java-jsr196/

于 2011-06-24T09:52:38.630 に答える
0

ユーザーをロールにマップする方法は次のとおりです。

web.xml には 3 つの役割があり、また、sun-web.xml には、これらの役割を複数のグループにマップする 3 つの役割からグループへのマッピングがあります。次に、「グループ」という列を持つテーブル ユーザーを持つデータベースがあります。そのグループは、役割にマップされたグループに対応します。OpenID で JSR 196 ベースのカスタム認証モジュールも使用しています。したがって、基本的に、ユーザーがグループにログインするたびにデータベースから読み取られ、アプリが対応するロールを割り当てます。これはすべて、J2EE の標準の宣言型セキュリティ モデルを使用して行われます。

私のカスタム認証モジュールでは、AuthenticRoastと呼ばれるライブラリを使用しています。これにより、作業がかなり簡単になります。

関連記事も…

お役に立てれば。

于 2010-03-17T17:58:04.070 に答える