Getting Started

Getting started with the IBM Verify SDK

Share this post:

The IBM Verify SDK is a library available for Android and iOS and provide classes to create rich native client mobile applications that interact with IBM Cloud Identity and IBM Security Access Manager, so that enterprises can easily integrate flexible and intelligent multi-factor authentication into their applications.

Multi-factor authentiation (MFA) verifies an indiviual’s identity by the possession of a mobile device as a first factor and an unique biometric identifier, which is verified on that device, as the second factor. Using mobile devices and biometric characteristics enable users to authenticate with minimal reliance on passwords and reduce the threat of unauthorized access to sensitive resources. The IBM Verify SDK supports the following authentication methods (or combinations thereof):

  • Face ID (iOS only)
  • Fingerprint / Touch ID
  • Time-based OTP
  • User Presence

This tutorial walks you through the creation of an application project for Android and iOS and how to add the IBM Verify SDK to it.


Android

Prerequisites

  • download the IBM Verify SDK (Android)  bundle from IBM AppExchange (you need to obtain an IBMid if you do not have one yet and select the “Software Development Kit” check-box in the category bar on the left to narrow down the search) and extract the contents to a folder that is easily located.
  • install Android Studio.

Setup you project

  1. Start Android Studio and create a new project by accepting the default settings and support minimum Android 6.0 (API 23).
  2. Go to File -> Project Structure... and add a new module by click on the + symbol in the upper left corner:
  3. Select Import .JAR/.AAR package and click Next:
  4. Click on the Browse button for the File name and select the VerifySdk.aar. Click Finish:
  5. The VerifySDK will appear in the list of Modules on the left sidebar. Select the app and in the tab view, click on theDependencies tab:
  6. Add the VerifySdk as a dependency by clicking on the + symbol at the bottom. Select Module dependency.
  7. Select the VerifySdk module in the dialog:
  8. Close all dialogs by clicking on Ok.
  9. Sync your project with Gradle (that should happen automatically – if not, click on File -> Sync Project with Gradle Files.

Configure your project

build.gradle

Add these lines to support Java 8 language features:

android {
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

ProGuard

Please note: this step is only required if you want to obfuscate your code when you publish an app.

The SDK does not provide an embedded ProGuard configuration file. The reason for that is, that you won’t be able to override those settings if you have to. If you want to use ProGuard in your app, add this to your build.gradle:

android {
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

Create a proguard-rules.pro file in the app folder of your project and add this configuration that we use in our IBM Verify app:

###--------------- Begin: proguard configuration for Verify SDK ----------
-keep class com.ibm.security.verifysdk.OnPremiseMetadata$*Metadata* { *; }
-keepclasseswithmembers class com.ibm.security.verifysdk.**Parser** { *; }
-keepclasseswithmembers class com.ibm.security.verifysdk.OnPremiseTransactionResult** { *; }
-keepclasseswithmembers class com.ibm.security.verifysdk.**Info { *; }

-keepclasseswithmembernames class * implements com.ibm.security.verifysdk.IMfaAuthenticator {
    public static final android.os.Parcelable$Creator CREATOR;
}

-keepclasseswithmembernames class * implements com.ibm.security.verifysdk.IAuthenticator {
    public static final android.os.Parcelable$Creator CREATOR;
}

-keep, includedescriptorclasses class * implements com.ibm.security.verifysdk.IMfaAuthenticator {
    !private *;
    !protected *;
    public *;
}

-keep, includedescriptorclasses class * implements com.ibm.security.verifysdk.IAuthenticator {
    !private *;
    !protected *;
    public *;
}

-keep, includedescriptorclasses public abstract class com.ibm.security.verifysdk.OtpGeneratorContext {
    !private *;
    !protected *;
    public *;
}

-keep, includedescriptorclasses public abstract class com.ibm.security.verifysdk.AuthenticationMethod {
    !private *;
    !protected *;
    public *;
}

-keepclasseswithmembernames,includedescriptorclasses class * {
    native ;
}

-keepnames class * implements java.io.Serializable
-keepclassmembers class * implements java.io.Serializable {
    static final long serialVersionUID;
    private static final java.io.ObjectStreamField[] serialPersistentFields;
    !static !transient ;
    private void writeObject(java.io.ObjectOutputStream);
    private void readObject(java.io.ObjectInputStream);
    java.lang.Object writeReplace();
    java.lang.Object readResolve();
}
###--------------- End: proguard configuration for Verify SDK ----------

If you use ProGuard, you will also have to add settings for other libraries, used by the SDK as mentioned below. See the ProGuard manual for further details.

Libraries

The SDK uses the following open source libraries:

  • RxJava2
  • Retrofit2 (okhttp3)
  • Jackson
  • Gson
  • RootBeer

These libraries are not bundled with the SDK and you need to add those libraries as dependencies in your build.gradle file for your app:

dependencies {
    implementation 'com.google.android.gms:play-services-vision:15.0.2'
    implementation 'com.google.android.gms:play-services-gcm:15.0.1'

    implementation 'com.scottyab:rootbeer-lib:0.0.7'
    implementation 'com.google.code.gson:gson:2.8.2'
    implementation 'com.fasterxml.jackson.core:jackson-databind:2.9.4'
    implementation 'com.fasterxml.jackson.core:jackson-core:2.9.4'
    implementation 'com.fasterxml.jackson.core:jackson-annotations:2.9.2'
    implementation 'io.reactivex.rxjava2:rxjava:2.1.12'
    implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'
    implementation 'com.squareup.retrofit2:retrofit:2.4.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.4.0'
    implementation 'com.squareup.retrofit2:converter-jackson:2.4.0'
    implementation 'com.squareup.retrofit2:adapter-rxjava2:2.4.0'
    implementation 'com.squareup.okhttp3:logging-interceptor:3.5.0'
}

The first two lines with Google Play Services are required for the QR code scan activity that comes with the SDK (see also next section).

AndroidManifest.xml

The SDK contains an activity UIQRScanView that provides QR code scan capabilities. Add these lines to the application tag in the AndroidManifest.xml:

<meta-data android:name="com.google.android.gms.vision.DEPENDENCIES"
           android:value="barcode" />
<activity android:name="com.ibm.security.verifysdk.UIQRScanView" />

As the app needs to invoke the camera, it must have the following line in the manifest tag:

<uses-permission android:name="android.permission.CAMERA" />

Sample code

As an example, we leverage the OTP calculation capability of the SDK. Add this code to the onCreate method in MainActivity.java:

HotpGeneratorContext hotpGeneratorContext = new HotpGeneratorContext("AB4C", 6, HmacAlgorithm.SHA1, 0);
Log.i("SDK Demo", "HOTP: " + hotpGeneratorContext.create());

It initiates a HOTP object with a secret, the number of digits, the algorithm used and a counter. Once the app compiles and run, you will see this line in the logcat:

SDK Demo: HOTP: 630496

Android has the concept of Context, that provides services and access to resources. To give the SDK access to the context of your application, add this line as early as possible to your application:

ContextHelper.sharedInstance().setContext(getApplicationContext());

You can extend the logging for network request and responses with:

NetworkHandler.sharedInstance().setLoggingInterceptor(new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY));

iOS

Prerequisites

  • download the IBM Verify SDK (iOS) bundle from IBM AppExchange (you need to obtain an IBMid if you do not have one yet and select the “Software Development Kit” check-box in the category bar on the left to narrow down the search) and extract the contents to a folder that is easily located.
  • install XCode

Setup you project

  1. Start XCode and create a new Swift project:
  2. Open the folder where the SDK was extracted. Copy the Framework folder to the folder where you created the Xcode project in the previous step:
  3. In the General settings, scroll down to the Embedded Binaries section and click on the + symbol:
  4. Click on Add Other... in the next dialog:
  5. Navigate to the Framework folder that was copied to your project folder in step 2. Select the IBMVerifyKit.framework, then click Open:
  6. Click on Finish in the next dialog:

Sample code

Add the following line to the header section of your ViewController.swift class:

import IBMVerifyKit

To do the same OTP example as for Android, add these lines to the viewDidLoad() method:

var generator = HOTPGenerator(secret: "AB4C", digits: 6, algorithm: HmacAlgorithm(.sha1), counter: 0)
print("OTP: \(String(describing: generator?.create()))")

And this is the output you should see than:

OTP: Optional("630496")

Next steps

In this article, you have seen how to add the IBM Verify SDK to your project. The sample code demonstrated how to invoke the SDK for generating a HOTP. There are more complex examples available on GitHub, which also demonstrate UI based interactions and how to leverage MMFA capabilities on server side. You can find them here for Android and iOS.

The documentation of the SDK is part of the bundle, available on IBM AppExchange. I recommend to read it and learn how you can interact with it.

If you have questions or feedback, please post it here for Android and iOS.

Click here to rate this article

Rate this article :

More Getting Started stories
By Martin Schmidt on July 11, 2019

Modernizing your B2C Portal Security – LDAP Proxy Deep Dive

In this part of our series we are taking a deeper look on how the LDAP reverse proxy works and what is needed to be done to make it work. Enable CI In this part we look at what needs to be done on the CI side and what information needs to be collected. We […]

Continue reading

By Craig Pearson on May 16, 2019

IBM Verify : MMFA Mapping Rules to Determine Device Registration

This article demonstrates how to configure a pre-token mapping rule for MMFA in ISAM which can prevent authenticator registration when certain undesirable conditions are detected.  For example: Unsupported app or OS version The device is jailbroken Enforce users to register with a customer authenticator app Below are the registration attributes included in the request payload […]

Continue reading

By ADAM CASE on May 10, 2019

Getting started with IBM Verify

Getting started with IBM Verify With an IBM Cloud Identity Verify you have the ability to apply multi-factor authentication anywhere, using one authenticator. From Linux shell access to Windows remote desktop, even custom development with IBM Cloud Identity Verify APIs, you can take full advantage of no infrastructure costs, third party subscriptions for email and […]

Continue reading