IBM Cloud Docs
モバイル・アプリ

モバイル・アプリ

IBM Cloud® App ID を使用すると、ネイティブまたはハイブリッドのモバイル・アプリ用に認証レイヤーを素早く構成できます。

フローについて

モバイル・フローは、ユーザーのデバイス (ネイティブ・アプリケーション) にインストールされるアプリを開発する際に役立ちます。 このフローを使用すると、アプリ上でユーザーを安全に認証できるので、各デバイスでパーソナライズされたユーザー・エクスペリエンスを提供できます。

このフローの技術基盤

ネイティブ・アプリケーションはユーザーのデバイスに直接インストールされるため、サード・パーティーは、プライベート・ユーザー情報とアプリケーション資格情報を比較的に容易に抽出できます。 デフォルトでは、これらのタイプのアプリケーションは、グローバル資格情報やユーザー・リフレッシュ・トークンを保管できないため、信頼できないクライアントと呼ばれます。 その結果、信頼できないクライアントでは、アクセス・トークンの有効期限が切れるたびにユーザーが資格情報を入力する必要があります。

アプリケーションをトラステッド・クライアントに変換するために、 App ID は 動的クライアント登録を使用します。 アプリケーション・インスタンスは、ユーザー認証を開始する前に、 App ID に OAuth2 クライアントとして登録する。 クライアント登録により、アプリケーションはインストール固有のクライアント ID を受け取ります。このクライアント ID は電子署名され、 App ID でリクエストを承認するために使用されます。 App ID はアプリケーションの対応する公開鍵を保管しているので、要求署名を検証できます。これにより、アプリケーションを機密クライアントとして扱うことが可能になります。 このプロセスにより、アプリケーションが資格情報を無期限に公開するリスクが最小限に抑えられます。また、トークンの自動リフレッシュが可能になるので、ユーザー・エクスペリエンスが大幅に向上します。

登録後、 OAuth2 authorization code または resource 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. 構成されている ID プロバイダーのいずれかを使用して、ユーザーの認証が行われます。
  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 Client 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 ファイルと同期 (Sync Project with Gradle Files)」**とクリックします。


SDK の初期化

  1. context、tenant ID、region パラメーターを initialize メソッドに渡して、SDK を構成します。

    初期化コードを入れる一般的な場所 (ただし、必須ではない) は、Android アプリケーション内のメイン・アクティビティーの onCreate メソッド内です。

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

iOS Swift SDK を使用した認証

App ID Client SDK を使用してモバイル・アプリケーションを保護します。

開始前に

開始する前に、以下の前提条件を満たしている必要があります。

  • Xcode 9.0 以上
  • CocoaPods 1.1.0 以上
  • iOS 10.0 以上

SDK のインストール

App ID Client SDK には、Swift プロジェクトと Objective-C Cocoa プロジェクト用の従属関係マネージャーである CocoaPods が付属しています。 CocoaPods は成果物をダウンロードし、プロジェクトで使用できるようにします。

  1. Xcode プロジェクトを作成するか、既存のプロジェクトを開きます。

  2. プロジェクトのディレクトリー内に Podfile を新規作成するか、または既存のものを開きます。

  3. IBMCloudAppID ポッドと use_frameworks! コマンドをターゲットの従属関係に追加します

    target '<yourTarget>' do
       use_frameworks!
       pod 'IBMCloudAppID'
    end
    
  4. プロジェクト・ディレクトリー内のコマンド・ラインから従属関係をインストールします。

    pod install --repo-update
    
  5. インストールの後に、Xcode プロジェクトとリンクされた従属関係が含まれている {your app}.xcworkspace ファイルを開きます。

  6. Xcode プロジェクトのキーチェーン共有を有効にします。 **「Project Settings」>「Capabilities」>「Keychain Sharing」に移動し、「Enable keychain sharing」**を選択します。

  7. **「Project Settings」>「Info」>「URL Types」を開き、「URL Type」**を追加します。 **「Identifier」「URL Scheme」**の両方のテキスト・ボックスに以下の値を入力します。

    (PRODUCT_BUNDLE_IDENTIFIER)
    

SDK の初期化

  1. tenant ID パラメーターと region パラメーターを initialize メソッドに渡すことによって、Client 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 へのアクセス

ログイン・フローが成功した後に、アクセス・トークンと ID トークンを使用して、任意の 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 がアプリケーションにインストールされたので、ユーザーの認証を開始する準備がほとんどできています。 次に、以下のいずれかの作業を行ってください。