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 会返回特定于安装的客户端标识。

授权流程

App ID mobile request flow
App ID mobile request flow

  1. The App ID SDK starts the authorization process by using the App ID /authorization endpoint.
  2. 这样将向用户显示登录窗口小部件。
  3. 用户使用其中一个已配置的身份提供者进行认证。
  4. App ID 返回授权。
  5. 将使用授权来交换来自 App ID /token 端点的访问令牌、身份令牌和刷新令牌。

使用 App ID SDK 配置移动应用程序

开始使用 App ID SDK。

准备工作

您需要以下信息:

  • App 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 V27.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. 将上下文、租户标识和区域参数传递到初始化方法以配置 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 进行分发;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. 安装完成后,打开包含 Xcode 项目和链接依赖项的 {your app}.xcworkspace 文件

  6. 在 Xcode 项目中启用密钥链共享。 导航至项目设置> 功能 > 密钥链共享并选择启用密钥链共享

  7. 打开项目设置 > 信息 > URL 类型,并添加 URL 类型。 将以下值放在标识URL 方案文本框中。

    (PRODUCT_BUNDLE_IDENTIFIER)
    

初始化 SDK

  1. 通过将租户标识和区域参数传递到 initialize 方法来初始化客户端 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 后,您几乎已准备好开始对用户进行认证! 接着请尝试执行以下其中一个活动: