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