0

mobilefirst Java アダプター用の単純なカスタム・ログイン・モジュールを作成しました。

authentication-config.xml

<customSecurityTest name="DummyAdapter-securityTest" AccessTokenExpirationSec="15">
<test isInternalUserID="true" realm="CustomAuthenticatorRealm"/></customSecurityTest> 

<realm name="CustomAuthenticatorRealm" loginModule="CustomerLoginModule">           <className>com.mbanking.customauthenticator.CustomerAuthenticator</className>
</realm>

<loginModule name="CustomerLoginModule">            <className>com.mbanking.customauthenticator.CustomerLoginModule</className>
</loginModule>

application-descriptor.xml に以下を定義

<userIdentityRealms>CustomAuthenticatorRealm</userIdentityRealms>

IBM チュートリアルに示されているように、CustomerAuthenticator と CustomerLoginModule でハードコードされたユーザー名とパスワードを認証しています。

    @Override
    public AuthenticationResult processRequest(HttpServletRequest request, HttpServletResponse response,
            boolean isAccessToProtectedResource) throws IOException, ServletException {
        if (request.getRequestURI() != null){

         String username = "Prabhu";
         String password = "polo11";

if (null != username && null != password && username.length() > 0 && password.length() > 0){
                authenticationData = new HashMap<String, Object>();
                authenticationData.put("username", username);
                authenticationData.put("password", password);
                return AuthenticationResult.createFrom(AuthenticationStatus.SUCCESS);
            } else {
                response.setContentType("application/json; charset=UTF-8");
                response.setHeader("Cache-Control", "no-cache, must-revalidate");
                response.getWriter().print("{\"authStatus\":\"required\", \"errorMessage\":\"Please enter username and password\"}");
                return AuthenticationResult.createFrom(AuthenticationStatus.CLIENT_INTERACTION_REQUIRED);
            }
        }

        if (!isAccessToProtectedResource){
            return AuthenticationResult.createFrom(AuthenticationStatus.REQUEST_NOT_RECOGNIZED);
        } 
        response.setContentType("application/json; charset=UTF-8");
        response.setHeader("Cache-Control", "no-cache, must-revalidate");
        response.getWriter().print("{\"authStatus\":\"required\"}");
        return AuthenticationResult.createFrom(AuthenticationStatus.CLIENT_INTERACTION_REQUIRED);
}

ログインモジュール

@Override
    public boolean login(Map<String, Object> authenticationData) {
          USERNAME =(String) authenticationData.get("username");
          PASSWORD = (String) authenticationData.get("password");

          if ("Prabhu".equals(USERNAME) && "polo11".equals(PASSWORD)){
          return true;
          }else{
              throw new RuntimeException("Invalid credentials"); 
              } 
    }

Java アダプター コード

@GET
    @Path("/mobile")
    @Produces(MediaType.APPLICATION_JSON)
    @OAuthSecurity(scope="CustomAuthenticatorRealm")
    public JSONObject generate(){
        JSONObject responseValue = new JSONObject();
        responseValue.put("data", "Secret Data From Adpter");       
        return responseValue;   
    }

承認に失敗しています

[ERROR   ] FWLSE0059E: Login into realm 'CustomerLoginModule' failed. null. [project JIB]
java.lang.NullPointerException
[ERROR   ] FWLSE0117E: Error code: 4, error description: AUTHENTICATION_ERROR, error message: An error occurred while performing authentication using loginModule CustomerLoginModule, User Identity {wl_antiXSRFRealm=(name:lbgo1f8edsjvsjgfv8i9umdneb, loginModule:WLAntiXSRFLoginModule), wl_authenticityRealm=null, CustomAuthenticatorRealm=(name:Prabhu, loginModule:CustomerLoginModule), CustomRealm=null, wl_directUpdateRealm=null, wl_remoteDisableRealm=null, SampleAppRealm=null, myserver=(name:ac09d1e7-71a6-47da-bbb8-e6c2f48651f3, loginModule:WeakDummy), wl_deviceNoProvisioningRealm=null, wl_anonymousUserRealm=(name:ac09d1e7-71a6-47da-bbb8-e6c2f48651f3, loginModule:WeakDummy), wl_deviceAutoProvisioningRealm=null}. [project JIB] [project JIB]

デバッグしようとすると、内部例外が発生します。

CLIENT_INTERACTION_REQUIRED{"challenges":{"wl_antiXSRFRealm":{"WL-Instance-Id":"lr0tsjecoeghhrf670oc8hu17v"}}}

再起動後でも、モバイルファーストサーバーが古い値を取得しているため、多くのキャッシュがあります。

誰でも助けてもらえますか?これは一方向の承認です。なぜ wl_antiXSRFRealm がその間に呼び出されるのか、これに関連する参照は得られません。

4

0 に答える 0