IBM Cloud Docs
行動應用程式

行動應用程式

使用 IBM Cloud® App ID,您可以快速建構適用於原生或混合式行動應用程式的鑑別層。

瞭解流程

當您開發要安裝在使用者裝置上的應用程式(原生應用程式)時,行動流程非常實用。 透過使用此流程,您可以在應用程式上安全地驗證使用者,以提供跨裝置的個人化使用者體驗。

何謂流程的技術基準?

因為原生應用程式直接安裝在使用者裝置上,所以第三方可以相當輕鬆地擷取專用使用者資訊及應用程式認證。 依預設,這些類型的應用程式稱為未授信的用戶端,因為它們無法儲存廣域認證或使用者重新整理記號。 因此,未授信的用戶端會要求使用者在每次其存取記號到期時輸入其認證。

若要將應用程式轉換為授信用戶端,App ID 會使用 動態用戶端登錄。 在應用程式實例開始驗證使用者之前,它會在 App ID 註冊為 OAuth2 用戶端。 由於用戶端註冊,您的應用程式會收到一個特定於安裝的用戶端 ID,該 ID 可以數位簽章,並用於授權 App ID 的請求。 因為 App ID 會儲存應用程式的對應公開金鑰,所以可以驗證您的要求簽章,以容許將您的應用程式當成機密用戶端進行檢視。 此處理程序可以將應用程式無限公開認證的風險降至最低,並透過容許自動記號重新整理來大幅改善使用者體驗。

註冊之後,您的使用者會使用 OAuth2 authorization coderesource owner password 授權授予流程來驗證使用者。

動態用戶端登錄

  1. 使用者會觸發用戶端應用程式對 App ID SDK 的要求。
  2. 如果您的應用程式尚未登錄為行動用戶端,則 SDK 會起始動態登錄流程。
  3. 成功登錄時,App ID 會傳回您的安裝特定用戶端 ID。

授權流程

App ID移動請求流
App ID移動請求流

  1. App ID SDK 使用 App ID /authorization 端點啟動授權程序。
  2. 向使用者顯示登入小組件。
  3. 使用其中一個已配置的身分提供者,來鑑別使用者。
  4. App ID 會傳回授權。
  5. 從 App ID /token 端點交換存取、身分及重新整理記號的授權。

使用 App ID SDK 配置行動應用程式

開始使用 App ID SDK。

開始之前

您需要下列資訊:

  • App ID 實例

  • 實例的承租戶 ID。 您可以在服務儀表板的服務認證標籤中找到此值。

  • 實例的部署 IBM Cloud 地區。 您可以藉由查看主控台來尋找您的地區。

    IBM Cloud區域與對應的 SDK 值
    IBM Cloud 地區 SDK 值
    美國南部 AppID.REGION_US_SOUTH
    雪梨 AppID.REGION_SYDNEY
    英國 AppID.REGION_UK
    德國 AppID.REGION_GERMANY

使用 Android SDK 進行鑑別

使用 App ID 客戶端 SDK 保護您的行動應用程式。

開始之前

開始之前,您必須具有下列必備項目:

  • API 27 或更新版本
  • Java 8.x
  • Android SDK Tools 26.1.1+
  • Android SDK Platform Tools 27.0.1+
  • Android Build Tools 27.0.0+ 版

安裝 SDK

  1. 建立 Android Studio 專案,或開啟現有專案。

  2. 將 JitPack 儲存庫新增至根 build.gradle 檔案。

       allprojects {
          repositories {
             ...
             maven { url 'https://jitpack.io' }
          }
       }
    
  3. 尋找應用程式的 build.gradle 檔案。 附註:請務必開啟您應用程式的檔案,而非專案 build.gradle 檔案。

    1. 將 App ID 用戶端 SDK 新增至 dependencies 區段。

      dependencies {
         compile group: 'com.github.ibm-cloud-security:appid-clientsdk-android:4.+'
      }
      
    2. defaultConfig 區段中,配置重新導向架構。

      defaultConfig {
      ...
      manifestPlaceholders = ['appIdRedirectScheme': android.defaultConfig.applicationId]
      }
      
  4. 將專案與 Gradle 同步化。 按一下工具 > Android > 將專案與 Gradle 檔案同步化


起始設定 SDK

  1. 將環境定義、承租戶 ID 及地區參數傳遞給起始設定方法,以配置 SDK。

    放置起始設定碼的一般(但非強制)位置是在 Android 應用程式中主要活動的 onCreate 方法。

    AppID.getInstance().initialize(getApplicationContext(), <tenantID>, <region>);
    

使用 iOS Swift SDK 進行鑑別

使用 App ID 客戶端 SDK 保護您的行動應用程式。

開始之前

在開始之前,您必須具備下列先決條件:

  • Xcode 9.0 或更新版本
  • CocoaPods 1.1.0 或更新版本
  • iOS 10.0 或更新版本

安裝 SDK

App ID 用戶端 SDK 與 CocoaPods(Swift 及 Objective-C Cocoa 專案的相依關係管理程式)一起配送。 CocoaPods 會下載構件,並讓它們可供您的專案使用。

  1. 建立 Xcode 專案,或開啟現有專案。

  2. 在專案的目錄中,建立新的或開啟現有 Podfile

  3. IBMCloudAppID Pod 及 use_frameworks! 指令新增至目標的相依關係

    target '<yourTarget>' do
       use_frameworks!
       pod 'IBMCloudAppID'
    end
    
  4. 在專案目錄內,從指令行安裝相依關係。

    pod install --repo-update
    
  5. 安裝完成後,開啟 {your app}.xcworkspace 檔案,其中包含您的 Xcode 專案和連結的依賴項目

  6. 在 Xcode 專案中啟用金鑰鏈共用。 導覽至專案設定 > 功能 > 金鑰鏈共用,然後選取啟用金鑰鏈共用

  7. 開啟專案設定 > 資訊 > URL 類型,然後新增 URL 類型。 將下列值同時置於 IDURL 架構文字框中。

    (PRODUCT_BUNDLE_IDENTIFIER)
    

起始設定 SDK

  1. 將承租戶 ID 及地區參數傳遞給起始設定方法,以起始設定用戶端 SDK。

       AppID.sharedInstance.initialize(tenantId: <tenantID>, region: <region>)
    

    放置起始設定碼的一般(但非強制)位置是在 Swift 應用程式之 AppDelegate 檔案的 application:didFinishLaunchingWithOptions 方法。

  2. 將 App ID SDK 匯入至 AppDelegate 檔案。

    import IBMCloudAppID
    
  3. 配置應用程式,以透過 App ID 處理重新導向。

    func application(_ application: UIApplication, open url: URL, options :[UIApplication.OpenURLOptionsKey : Any]) -> Bool {
          return AppID.sharedInstance.application(application, open: url, options: options)
       }
    

存取受保護的 API

在成功登入流程之後,您可以使用存取及身分記號來呼叫受保護的後端資源,而這些資源使用您選擇的 SDK 或網路檔案庫。

使用 Swift SDK

  1. 將下列匯入項目新增至您要呼叫受保護資源要求的檔案:

    import BMSCore
    import IBMCloudAppID
    
  2. 呼叫受保護的資源

    BMSClient.sharedInstance.initialize(region: <region>)
    BMSClient.sharedInstance.authorizationManager = AppIDAuthorizationManager(appid: AppID.sharedInstance)
    let request =  Request(url: "{your protected resource url}")
    request.send { (response: Response?, error: Error?) in
       guard let response = response, error == null else {
             print("An error occurred invoking a protected resources", error?.localizedDescription ?? "No response was received")
             return;
       }
       // use your response object
    })
    

與 Android SDK

  1. 將下列匯入項目新增至您要呼叫受保護資源要求的檔案:

    import com.ibm.mobilefirstplatform.clientsdk.android.core.api.BMSClient;
    import com.ibm.cloud.appid.android.api.AppIDAuthorizationManager;
    
  2. 呼叫受保護的資源

    BMSClient bmsClient = BMSClient.getInstance();
    bmsClient.initialize(getApplicationContext(), <region>);
    AppIDAuthorizationManager appIdAuthMgr = new AppIDAuthorizationManager(AppID.getInstance())
    bmsClient.setAuthorizationManager(appIdAuthMgr);
    Request request = new Request("{your protected resource url}", Request.GET);
    request.send(this, new ResponseListener() {
    @Override
    public void onSuccess (Response response) {
          Log.d("My app", "onSuccess :: " + response.getResponseText());
    }
    @Override
    public void onFailure (Response response, Throwable t, JSONObject extendedInfo) {
          if (null != t) {
             Log.d("My app", "onFailure :: " + t.getMessage());
          } else if (null != extendedInfo) {
             Log.d("My app", "onFailure :: " + extendedInfo.toString());
          } else {
             Log.d("My app", "onFailure :: " + response.getResponseText());
             }
          }
    });
    

沒有 SDK

使用您選擇的檔案庫,設定您的 Authorization 要求標頭,以使用 Bearer 鑑別方法來傳輸存取記號。

要求格式範例:

GET /resource HTTP/1.1
Host: server.example.com
Authorization: Bearer <accessToken> <optionalIdentityToken>

下一步

在您的應用程式中安裝 App ID 之後,您幾乎已備妥可以開始鑑別使用者了! 接下來,請嘗試執行下列其中一個動作: