關於Oracle Mobile Hub 應用程式的認證選項

您的使用者可以使用許多技術 (包括 OAuth、單一登入、HTTP 基本認證和 Facebook 登入),向您的Oracle Mobile Hub 應用程式進行認證。

關於 OAuth 用戶

您的使用者可以使用 OAuth 用戶向您的Oracle Mobile Hub Android 應用程式認證。

首先,您可以起始授權代理程式並將認證類型設為 OAUTH

private AuthorizationAgent mAuthorization; 
private MobileBackend mobileBackend; 

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

mAuthorization = mobileBackend.getAuthorization(AuthType.OAUTH);

然後使用 authenticate 方法嘗試認證。此呼叫包括 Android 相關資訊環境參數、使用者名稱、密碼以及完成授權處理作業的回呼:

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

以下為回呼的定義:

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

關於具有第三方權杖的單一登入認證

您可以使用第三方提供者發出的記號來認證您的行動應用程式。

首先,您的應用程式需要從第三方權杖發出者取得權杖。您可以透過發照者取得記號的方式而有所不同。

一旦您擁有權杖,請初始化授權代理程式,並在您的授權呼叫中使用權杖。

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

然後使用 authenticateUsingTokenExchange 方法嘗試認證。

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

以下為回呼:

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

注意事項:

Oracle Mobile Hub 中儲存第三方記號的預設到期時間為 6 小時。您可以透過變更 Security_TokenExchangeTimeoutSecs 原則來調整此時間。

即使在關閉並重新啟動應用程式時,您也可以代碼應用程式以保留使用者登入。

在上述範例中,使用第三個參數 (storeToken) 設為 false 時會呼叫 authenticateUsingTokenExchange() 方法。如果您將此參數設為 true,且記號交換成功,MCS 記號會儲存在安全存放區中,而使用者會持續登入直到記號到期為止。

然後,您可以使用 Authorization 物件上的 loadSSOTokenExchange 方法來載入儲存的記號。若無法從安全存放區擷取記號,方法會傳回 false

以下是嘗試載入已儲存記號的部分程式碼,如果該程式碼失敗,會重新啟動認證處理作業:

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

當您將記號儲存在安全存放區中時,它仍然會與應用程式原先使用的行動後端關聯。因此,如果應用程式已更新為使用不同的行動後端 (或行動後端版本),您必須清除儲存的記號並重新認證。

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

關於基本 HTTP 認證

使用 HTTP 基本驗證使用者與使用 OAuth 進行認證類似。

首先,您可以起始授權代理程式並將認證類型設為 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)

然後使用 authenticate 方法嘗試認證。此呼叫包括 Android 相關資訊環境參數、使用者名稱、密碼以及完成授權處理作業的回呼。

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

以下為回呼的定義:

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 登入

若要使用 Facebook 登入,可以使用 oracle_mobile_android_social 程式庫中的類別。

首先,您可以起始授權代理程式並將認證類型設為 Facebook

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


從 Facebook 的 SDK 使用 CallbackManager 物件,起始認證。

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

您可以在以下傳送的 callback 使用此程式碼:

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

覆寫 onActivityResult() 方法以使用回呼:

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