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 がその間に呼び出されるのか、これに関連する参照は得られません。