Sobre Opções de Autenticação das Aplicações Oracle Mobile Hub

Os usuários podem fazer autenticação na aplicação do Oracle Mobile Hub usando várias tecnologias, incluindo OAuth, sign-on único, autenticação básica HTTP e login do Facebook.

Sobre o Consumidor do OAuth

Seus usuários podem se autenticar com os seus aplicativos Oracle Mobile Hub Android usando o OAuth Consumer.

Primeiro, você inicializa o agente de autorização e define o tipo de autenticação como OAUTH:

private AuthorizationAgent mAuthorization; 
private MobileBackend mobileBackend; 

try {
  mobileBackend = MobileManager.getManager().getMobileBackend(this);
} catch (ServiceProxyException e) {
      e.printStackTrace();
}

mAuthorization = mobileBackend.getAuthorization(AuthType.OAUTH);

Em seguida, você usa o método authenticate para tentar a autenticação. A chamada inclui parâmetros para o contexto Android, nome do usuário, senha e um callback que conclui o processo de autorização:

TextView username, password; 
username = (TextView) findViewById(R.id.username);
password = (TextView) findViewById(R.id.password); 
String userName = username.getText().toString(); 
String passWord = password.getText().toString();
mAuthorization.authenticate(mCtx, userName, passWord, mLoginCallback); 

Aqui está a definição para o callback:

AuthorizationCallback mLoginCallback = new AuthorizationCallback() {
   @Override
   public void onCompletion(ServiceProxyException exception) {
     Log.d(TAG, "OnCompletion Auth Callback");
      if (exception != null) {
        Log.e(TAG, "Exception while receiving the Access Token", exception);
     } else {
        Log.e(TAG, "Authorization successful");
     }
   }
 }

Sobre a Autenticação de Sign-on Único com um Token de Terceiros

Você pode autenticar seu aplicativo móvel usando um token emitido por um provedor de terceiros.

Primeiro, seu aplicativo precisa obter um token do emissor de token de terceiros. A forma como você pode obter o token varia conforme o emissor.

Depois de ter o token, inicialize o agente de autorização e use o token em sua chamada de autorização.

private AuthorizationAgent mAuthorization; 
private MobileBackend mobileBackend; 
Context mCtx = getApplicationContext();

try {
  mobileBackend = MobileManager.getManager().getMobileBackend(this);
} catch (ServiceProxyException e) {
      e.printStackTrace();
}

mAuthorization = mobileBackend.getAuthorization(AuthType.TOKENEXCHANGE);

Em seguida, você usa o método authenticateUsingTokenExchange para tentar a autenticação.

mAuthorization.authenticateUsingTokenExchange(mCtx, token, false, mLoginCallback);

Este é o callback:

AuthorizationCallback mLoginCallback = new AuthorizationCallback() {
    @Override
    public void onCompletion(ServiceProxyException exception) {
        if (exception == null) {
            //redirect to another Activity after login
            Intent intent = new Intent(mCtx, ContentActivity.class);
            startActivity(intent);
  
        } else {
            Log.e(TAG, "Exception during token exchange:", exception);
            finish();
        }
    }
};

Observação:

O tempo de expiração padrão para armazenar um token de terceiros no Oracle Mobile Hub é de 6 horas. Você pode ajustar esse tempo alterando a política Security_TokenExchangeTimeoutSecs.

Você também pode codificar o aplicativo para manter o usuário conectado, mesmo ao fechar e reiniciar o aplicativo.

No exemplo acima, o método authenticateUsingTokenExchange() é chamado com o terceiro parâmetro (storeToken) definido como false. Se você definir esse parâmetro como true e o intercâmbio de token for bem-sucedido, o token do MCS será armazenado em um armazenamento seguro e o usuário permanecerá conectado até que o token expire.

Em seguida, você pode usar o método loadSSOTokenExchange no objeto Authorization para carregar o token armazenado. Se um token não puder ser recuperado da área de armazenamento segura, o método retornará false.

Aqui está algum código que tenta carregar um token salvo e, se ele falhar, reinicia o processo de autenticação:

try {
    mAuthorization = MobileManager.getManager().getMobileBackend(this).getAuthorization();
    if (!mAuthorization.loadSSOTokenExchange(mCtx)) {
        //user not logged in, so need to initiate login
        mAuthorization.authenticateUsingTokenExchange(mCtx, token, true, mLoginCallback);
    }

Quando você tiver o token armazenado no armazenamento seguro, ele permanecerá associado ao backend móvel que o aplicativo usou originalmente. Portanto, se a aplicação for atualizada para usar outro backend móvel (ou versão de backend móvel), será necessário remover o token salvo e reautenticar.

mAuthorization.clearSSOTokenExchange(mCtx);
mAuthorization.authenticateUsingTokenExchange(mCtx, token, true, mLoginCallback);

Sobre a Autenticação HTTP Básica

A autenticação de usuários usando o HTTP Basic é semelhante à autenticação usando o OAuth.

Primeiro, você inicializa o agente de autorização e define o tipo de autenticação como BASIC_AUTH:

private AuthorizationAgent mAuthorization; 
private MobileBackend mobileBackend; 

try {
  mobileBackend = MobileManager.getManager().getMobileBackend(this);
} catch (ServiceProxyException e) {
      e.printStackTrace();
}

mAuthorization = mobileBackend.getAuthorization(AuthType.BASIC_AUTH)

Em seguida, você usa o método authenticate para tentar a autenticação. A chamada inclui parâmetros para o contexto Android, nome do usuário, senha e um callback que conclui o processo de autorização.

TextView username, password; 
username = (TextView) findViewById(R.id.username);
password = (TextView) findViewById(R.id.password);
String userName = username.getText().toString(); 
String passWord = password.getText().toString();
mAuthorization.authenticate(mCtx, userName, passWord, mLoginCallback); 

Aqui está a definição para o callback:

AuthorizationCallback mLoginCallback = new AuthorizationCallback() {
   @Override
   public void onCompletion(ServiceProxyException exception) {
     Log.d(TAG, "OnCompletion Auth Callback");
     if (exception != null) {
       Log.e(TAG, "Exception while receiving the Access Token", exception);
     } else {
   Log.e(TAG, "Authorization successful");
   }
  }
 }

Sobre o Uso do Login do Facebook

Se você quiser usar o log-in do Facebook, poderá usar as classes na biblioteca oracle_mobile_android_social.

Primeiro, você inicializa o agente de autorização e define o tipo de autenticação como Facebook:

SocialAuthorizationAgent mAuthorization;
SocialMobileBackend socialMobileBackend;
try {
  socialMobileBackend = SocialMobileBackendManager.getManager().getMobileBackend(mCtx);
} catch(ServiceProxyException e){
    e.printStackTrace();
}
mAuthorization = socialMobileBackend.getSocialAuthorization(); mAuthorization.setAuthType(AuthType.FACEBOOK);


Usando um objeto CallbackManager do SDK da Facebook, inicie a autenticação.

private CallbackManager callbackManager;
mAuthorization.setup(getApplicationContext(), callback);
callbackManager = mAuthorization.getCallBackManager();
mAuthorization.authenticateSocial(mCtx);

Aqui está o código que você pode usar para o callback que é informado acima:

private FacebookCallback<LoginResult> callback = new FacebookCallback<LoginResult>() {
    @Override
    public void onSuccess(LoginResult loginResult) {
        Log.e(TAG, "facebook login successful.");
    }
    @Override
    public void onCancel() {
    }
    @Override
    public void onError(FacebookException e) {
    }
};

Substitua o método onActivityResult() para usar o callback:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    callbackManager.onActivityResult(requestCode, resultCode, data);