Oracle Mobile Hubアプリケーションの認証オプションについて
ユーザーは、OAuth、シングル・サインオン、HTTP Basic認証、Facebookログインなど、多数のテクノロジを使用してOracle Mobile Hubアプリケーションで認証できます。
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
ポリシーを変更することで調整できます。
アプリケーションを閉じて再起動する場合でも、ユーザーがログインした状態を維持するようにアプリケーションをコーディングすることができます。
前述の例では、3番目のパラメータ(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);
Basic 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);