5

このJaspic Exampleに基づいて、次validateRequestの a のメソッドを作成しましたServerAuthModule

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

    boolean authenticated = false;
    final HttpServletRequest request = 
                      (HttpServletRequest) messageInfo.getRequestMessage();
    final String token = request.getParameter("token");
    TokenPrincipal principal = (TokenPrincipal) request.getUserPrincipal();

    Callback[] callbacks = new Callback[] {
            new CallerPrincipalCallback(clientSubject, (TokenPrincipal) null) };

    if (principal != null) {
        callbacks = new Callback[] { 
                new CallerPrincipalCallback(clientSubject, principal) };
        authenticated = true;
    } else {
        if (token != null && token.length() == Constants.tokenLength) {
            try {
                principal = fetchUser(token);
            } catch (final Exception e) {
                throw (AuthException) new AuthException().initCause(e);
            }
            callbacks = new Callback[]
                        { 
                             new CallerPrincipalCallback(clientSubject, principal),
                             new GroupPrincipalCallback(clientSubject,
                                                        new String[] { "aRole" })
                        };
            messageInfo.getMap().put("javax.servlet.http.registerSession", "TRUE");
            authenticated = true;
        }
    }

    if (authenticated) {
        try {
            handler.handle(callbacks);
        } catch (final Exception e) {
            throw (AuthException) new AuthException().initCause(e);
        }
        return SUCCESS;
    }

    return AuthStatus.SEND_FAILURE;
}

これは、ejb の最初の呼び出しでは期待どおりに機能します@RolesAllowed("aRole")が、次の呼び出しではまったく機能しません。Wildfly は、次のエラー メッセージでそれを否定しています。

ERROR [org.jboss.as.ejb3.invocation] (default task-4) WFLYEJB0034: EJB Invocation 
    failed on component TestEJB for method public java.lang.String 
    com.jaspic.security.TestEJB.getPrincipalName():
    javax.ejb.EJBAccessException: WFLYSEC0027: Invalid User

私が正しいと思う場合、エラーは次の場所で発生します: wilflyのソース コードのorg.jboss.as.security.service.SimpleSecurityManager 367 行credentialnull

これは、Wildfly 8/9/10CR (他のバージョンはテストされていません) でも同じようです。

繰り返しますが、私が間違っているのか、それとも https://issues.jboss.org/browse/WFLY-4626と同じバグなのかわかりません。そして、それはバグですか、それとも予想される動作ですか?

4

1 に答える 1