Informazioni sulle opzioni di autenticazione per le applicazioni Oracle Mobile Hub

Gli utenti possono eseguire l'autenticazione con l'applicazione Oracle Mobile Hub utilizzando diverse tecnologie, tra cui OAuth, Single Sign-On, autenticazione Basic HTTP e login Facebook.

Informazioni sui consumer di OAuth

Gli utenti possono eseguire l'autenticazione con le applicazioni Oracle Mobile Hub Android utilizzando il consumer OAuth.

Innanzitutto inizializzare l'agente di autorizzazione e impostare il tipo di autenticazione su OAUTH:

private AuthorizationAgent mAuthorization; 
private MobileBackend mobileBackend; 

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

mAuthorization = mobileBackend.getAuthorization(AuthType.OAUTH);

Utilizzare quindi il metodo authenticate per tentare l'autenticazione. La chiamata include parametri per il contesto Android, il nome utente, la password e un callback che completa il processo di autorizzazione:

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); 

Di seguito è riportata la definizione per il 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");
     }
   }
 }

Informazioni sull'autenticazione Single Sign-On con un token di terze parti

È possibile autenticare l'applicazione mobile utilizzando un token emesso da un provider di terze parti.

Innanzitutto l'applicazione deve ottenere un token dall'emittente del token di terze parti. Il modo in cui è possibile ottenere il token varia in base all'emittente.

Una volta ottenuto il token, inizializzare l'agente di autorizzazione e utilizzare il token nella chiamata di autorizzazione.

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);

Utilizzare quindi il metodo authenticateUsingTokenExchange per tentare l'autenticazione.

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

Di seguito è riportato il 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();
        }
    }
};

Nota

Il periodo di scadenza predefinito per la memorizzazione di un token di terze parti in Oracle Mobile Hub è di 6 ore. È possibile regolare questa ora modificando il criterio Security_TokenExchangeTimeoutSecs.

È inoltre possibile codificare l'applicazione per mantenere l'utente collegato, anche quando si chiude e riavvia l'applicazione.

Nell'esempio sopra riportato, il metodo authenticateUsingTokenExchange() viene chiamato con il terzo parametro (storeToken) impostato su false. Se questo parametro viene impostato su true e lo scambio di token viene completato, il token MCS viene memorizzato in un'area di memorizzazione sicura e l'utente rimane collegato fino alla scadenza del token.

È quindi possibile utilizzare il metodo loadSSOTokenExchange sull'oggetto Authorization per caricare il token memorizzato. Se non è possibile recuperare un token dall'area di memorizzazione sicura, il metodo restituisce false.

Di seguito è riportato il codice che tenta di caricare un token salvato e, se l'operazione non riesce, il processo di autenticazione viene riavviato.

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 si dispone del token memorizzato nell'area di memorizzazione sicura, il token rimane associato al backend mobile utilizzato dall'applicazione originariamente. Pertanto, se l'applicazione viene aggiornata per utilizzare un backend mobile diverso (o una versione del backend mobile), è necessario cancellare il token salvato e ripetere l'autenticazione.

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

Informazioni sull'autenticazione HTTP di base

L'autenticazione degli utenti mediante HTTP Basic è simile all'autenticazione mediante OAuth.

Innanzitutto inizializzare l'agente di autorizzazione e impostare il tipo di autenticazione su 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)

Utilizzare quindi il metodo authenticate per tentare l'autenticazione. La chiamata include parametri per il contesto Android, il nome utente, la password e un callback che completa il processo di autorizzazione.

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); 

Di seguito è riportata la definizione per il 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");
   }
  }
 }

Informazioni sull'utilizzo del login a Facebook

Se si desidera utilizzare il login Facebook, è possibile utilizzare le classi nella libreria oracle_mobile_android_social.

Innanzitutto inizializzare l'agente di autorizzazione e impostare il tipo di autenticazione su Facebook:

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


Utilizzando un oggetto CallbackManager dal kit SDK di Facebook, avviare l'autenticazione.

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

Di seguito è riportato il codice che è possibile utilizzare per il file callback passato in precedenza:

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) {
    }
};

Sostituire il metodo onActivityResult() per utilizzare il callback:

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