关于Oracle Mobile Hub 应用程序的验证选项
您的用户可以使用多种技术在您的Oracle Mobile Hub 应用程序中进行验证,包括 OAuth、一次登入、HTTP 基本验证和 Facebook 登录。
关于 OAuth 使用者
您的用户可以使用 OAuth Consumer 验证您的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
策略来调整此时间。
您还可以对应用程序进行编码以保持用户登录,即使在关闭和重新启动应用程序时也是如此。
在上面的示例中,调用 authenticateUsingTokenExchange()
方法时,第三个参数(storeToken
)设置为 false
。如果将此参数设置为 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 Basic 对用户进行身份验证类似于使用 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);