Login con Jwt

Introducción
Se implemento el acceso mediante un servidor JWT, siglas de Json Web Token. El servidor utilizado es el joko-security. Dejamos el link al proyecto para poder levantarlo y manejar esta funcionalidad con dicho servidor. Acuérdese de hacer las configuraciones pertinentes de acuerdo al puerto y la dirección IP del servidor. Las variables que mantienen estos valores se encuentran dentro de la clase de la constantes Constants.class

Implementación
La implementación requiere que una activity maneje las funcionalidad de los token, tanto los de refresh como los de access. En Mboeha, es la primera con nombre SplashActivity. Funciones como setRefeshToken setAccessToken son a as que se mencionan. Esta actividad checa la valides de los tokens, para poder luego manejar los casos posibles según esta información.

En el LoginActivity existe una función llamada loginProcess que es la encargada de hacer la petición para el servidor y que retorna la respuesta.

authApi.login(loginRequest, Constants.CURRENT_MBOEHAO_VERSION) .observeOn(AndroidSchedulers.mainThread) .doOnError(Utilitys.errorHandler(LoginActivity.this)) .flatMap(userAccessResponse -> {                   try {                        userData.setExpiration(userAccessResponse.getExpiration);                        getUserData.setRefreshToken(userAccessResponse.getSecret);                        getUserData.setExpiration(userAccessResponse.getExpiration);                        getUserData.setUsername(username);                        getUserData.persistUser;                        return authApi.userAccess(userAccessResponse.getSecret);                    } catch (Exception t) {                        return Observable.error(t);                    }                }) .observeOn(AndroidSchedulers.mainThread) .subscribe(userAccessResponse -> {                   if (userAccessResponse.getSuccess) {                        userData.setUserAccessToken(userAccessResponse.getSecret);                        // Se accede al home... todavia los token no son necesarios...                        // ...para acceder a ningun servicio, ya que no hay todavia ninguno disponible...                        loginJWT;                    } else {                        Log.i(LOG_TAG, "login: Success false");                        sendErrorLoginMessage("Login: False Success");                        invalidLogin;                    }                }, Utilitys.errorHandler(LoginActivity.this));

Sea agrego un paquete con los archivos de autenticacion en el paquete de nombre auth.

Repositorio
Los servicios que el servidor mantiene son los que se describen en el paquete de repository y el archivo LoginRepository mantiene las llamadas a los servicios de login del servidor.

@POST(Constants.API_URL + "/login") Observable login(@Body LoginRequest loginRequest,                                   @Header(Constants.HEADER_VERSION) String refreshToken);

@POST(Constants.API_URL + "/logout") Observable logout(@Header(Constants.HEADER_AUTH) String refreshToken);

@POST(Constants.API_URL + "/token/user-access") Observable userAccess(@Header(Constants.HEADER_AUTH) String refreshToken);

@POST(Constants.API_URL + "/token/user-access") Call refreshUserAccess(@Header(Constants.HEADER_AUTH) String refreshToken);

@POST(Constants.API_URL + "/token/refresh") Call refreshToken(@Header(Constants.HEADER_AUTH) String refreshToken);