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