5

ServerAuthModuleカスタムログインシステムを使用するために、独自の を作成しようとしています。

すべてが正しいことを理解していれば、コンテナーはすべての着信要求に対して validateRequest メソッドを呼び出し、SAM は資格情報をチェックして、ユーザー名とユーザー グループ (資格情報が正しい場合) を介してコンテナーに通知します。 CallbackHandler。

public class MySAM implements ServerAuthModule {

    @Override
    public AuthStatus validateRequest(MessageInfo messageInfo, Subject clientSubject, Subject serviceSubject) throws AuthException {

        // check user credentials
        ...

        // set username and groups
        CallerPrincipalCallback cpCallback = new CallerPrincipalCallback(clientSubject, username);
        GroupPrincipalCallback gpCallback = new GroupPrincipalCallback(clientSubject, groups);
        callbackHandler.handle(new Callback[]{cpCallback, gpCallback}

        return AuthStatus.SUCCESS;
    }

    ...
}

私の問題は、ユーザーがログインしたときに、ユーザーがどのグループに属しているかがわからないことです。ユーザーが特定のグループに属しているかどうかのみを確認できます。メソッド内のグループを含む配列をコンテナに与える代わりに、ユーザーが特定のグループに属しているかどうかを確認できるメソッドをコンテナに与えることは何とか可能validateRequestですか?

boolean isInGroup(String username, String group) {
    // ask backend system
}
4

1 に答える 1

5

あなたがしていることは確かに正しいように見えます。

JASPIC には、意図したとおりにコンテナにメソッドを渡すという概念はありません。コンテナーは、与えられたグループ配列からプリンシパルのセットを作成しますが、そこにはメソッドを入れる余地がありません。

Java EE では、JACC でこれを実行できるはずです。JACC ポリシー プロバイダーは、isUserInRole の質問に回答する必要があるとき、およびユーザーがなんらかの権限 (/adminpanel へのアクセスを許可されているなど) を持っているかどうかを判断する必要があるときはいつでも参照されます。

その時点で、ある種のリバース チェックを実行して、特定のアクセス許可に必要なロールを確認できます (起動時に JACC が構築するアクセス許可マップへのロールを使用)。そのロールを使用すると、独自のロジックを使用して、ユーザーが実際にそのロールまたはグループを持っているかどうかを判断できます。

于 2014-12-15T13:53:38.863 に答える