Authentifizierungsoptionen für Oracle Mobile Hub-Anwendungen

Ihre Benutzer können sich mit Ihrer Oracle Mobile Hub-Anwendung mit einer Reihe von Technologien authentifizieren, einschließlich OAuth, Single Sign-On, HTTP-Basisauthentifizierung und Facebook-Anmeldung.

Info zu OAuth Consumer

Ihre Benutzer können sich mit Ihren Oracle Mobile Hub Android-Anwendungen mit OAuth Consumer authentifizieren.

Bevor Sie den Autorisierungs-Agent initialisieren und den Authentifizierungstyp auf OAUTH setzen:

private AuthorizationAgent mAuthorization; 
private MobileBackend mobileBackend; 

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

mAuthorization = mobileBackend.getAuthorization(AuthType.OAUTH);

Danach verwenden Sie die authenticate-Methode, um die Authentifizierung zu versuchen. Der Aufruf enthält Parameter für Android-Kontext, Benutzername, Kennwort und einen Callback, der den Autorisierungsprozess abschließt:

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

Im Folgenden finden Sie die Definition für den 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");
     }
   }
 }

Informationen zur Single Sign-On-Authentifizierung mit einem Drittanbietertoken

Sie können Ihre Mobile-Anwendung mit einem Token authentifizieren, das von einem externen Provider ausgegeben wurde.

Zuerst muss die App ein Token vom externen Tokenausgebenden Benutzer abrufen. Die Art, wie Sie das Token abrufen können, variiert nach ausgebendem Benutzer.

Nachdem Sie das Token ausgeführt haben, initialisieren Sie den Autorisierungs-Agent und verwenden das Token in Ihrem Autorisierungsaufruf.

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

Danach verwenden Sie die authenticateUsingTokenExchange-Methode, um die Authentifizierung zu versuchen.

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

Dies ist der 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();
        }
    }
};

Hinweis:

Die Standardablaufzeit für die Speicherung eines Drittanbietertokens in Oracle Mobile Hub beträgt 6 Stunden. Sie können diese Zeit anpassen, indem Sie die Policy Security_TokenExchangeTimeoutSecs ändern.

Sie können die App auch so codieren, dass der Benutzer angemeldet bleibt, selbst wenn Sie die App schließen und neu starten.

Im obigen Beispiel wird die Methode authenticateUsingTokenExchange() aufgerufen, wobei der dritte Parameter (storeToken) auf false gesetzt ist. Wenn Sie diesen Parameter auf true setzen und der Tokenaustausch erfolgreich ist, wird das MCS-Token in einem sicheren Speicher gespeichert, und der Benutzer bleibt angemeldet, bis das Token abläuft.

Sie können dann die Methode loadSSOTokenExchange für das Objekt Authorization verwenden, um das gespeicherte Token zu laden. Wenn ein Token nicht aus dem sicheren Speicher abgerufen werden kann, gibt die Methode false zurück.

Im Folgenden wird ein Code aufgeführt, der versucht, ein gespeichertes Token zu laden. Wenn der Vorgang nicht erfolgreich verläuft, wird der Authentifizierungsprozess neu gestartet:

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

Wenn das Token im sicheren Speicher gespeichert ist, bleibt es mit dem mobilen Backend verknüpft, das die App ursprünglich verwendet hat. Wenn die App also mit einem anderen mobilen Backend (oder einer mobilen Backend-Version) aktualisiert wird, müssen Sie daher das gespeicherte Token löschen und erneut authentifizieren.

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

Info zur einfachen HTTP-Authentifizierung

Die Authentifizierung von Benutzern mit HTTP Basic entspricht der Authentifizierung mit OAuth.

Bevor Sie den Autorisierungs-Agent initialisieren und den Authentifizierungstyp auf BASIC_AUTH setzen:

private AuthorizationAgent mAuthorization; 
private MobileBackend mobileBackend; 

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

mAuthorization = mobileBackend.getAuthorization(AuthType.BASIC_AUTH)

Danach verwenden Sie die authenticate-Methode, um die Authentifizierung zu versuchen. Der Aufruf enthält Parameter für Android-Kontext, Benutzername, Kennwort und einen Callback, der den Autorisierungsprozess abschließt.

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

Im Folgenden finden Sie die Definition für den 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");
   }
  }
 }

Facebook-Anmeldung verwenden

Wenn Sie Facebook-Anmeldung verwenden möchten, können Sie die Klassen in der Library oracle_mobile_android_social verwenden.

Bevor Sie den Autorisierungs-Agent initialisieren und den Authentifizierungstyp auf Facebook setzen:

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


Starten Sie die Authentifizierung mit einem CallbackManager-Objekt aus FacebookSDK.

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

Der folgende Code kann für die callback verwendet werden, die oben übergeben wird:

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

Setzen Sie die onActivityResult()-Methode außer Kraft, um den Callback zu verwenden:

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