Oracle Mobile Hub 애플리케이션에 대한 인증 옵션 정보

사용자는 OAuth, Single Sign-On, 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");
     }
   }
 }

타사 토큰이 있는 Single Sign-On 인증 정보

타사 제공자가 발급한 토큰을 사용하여 모바일 애플리케이션을 인증할 수 있습니다.

첫째, 앱은 타사 토큰 발행자로부터 토큰을 가져와야 합니다. 토큰을 얻을 수 있는 방법은 발행자에 따라 다릅니다.

토큰이 있으면 권한 부여 에이전트를 초기화하고 권한 부여 호출에서 토큰을 사용합니다.

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 기본 기능을 사용한 사용자 인증은 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);