Strivacity SDK for iOS

Strivacity SDK for iOS provides simple client for communicating with Strivacity Authentication APIs

Download

Strivacity SDK for iOS is available through the CocoaPods. To install it, simply add the following line to your Podfile:

pod 'Strivacity'

Demo App

A demo app is contained within this repository. For instructions on how to build and configure this app, see its ReadMe file.

Overview

Note: The internal implementation of the Strivacity SDK for iOS relies on the open source AppAuth Library. Strivacity SDK incapsulates logic of communication with Strivacity Authentication APIs in the AuthClient class and its members. AuthProvider class creates AuthClient and sets it up with specified parameters. For a convenient representation of the authorization state with the ability to serialization to json uses class AuthState from AppAuth Library. To store the authentication state securely, use the class SecureStorage, which saves auth state to the default iOS Keychain.

Initialize AuthProvider

First, must be specified AuthProvider class to create AuthClient instance. For example:

let authProvider = AuthProvider()
authProvider.withClientId(Bundle.main.object(forInfoDictionaryKey: clientIdKey) as? String ?? "") // specifies app client id
authProvider.withClientSecret(Bundle.main.object(forInfoDictionaryKey: clientSecretKey) as? String ?? "") // specifies app client secret
authProvider.withDomain(Bundle.main.object(forInfoDictionaryKey: domainKey) as? String ?? "") // specifies authentication server domain
authProvider.withRedirectUri(Bundle.main.object(forInfoDictionaryKey: redirectUriKey) as? String ?? "") // specifies authorized redirect uri
authProvider.withAuthState(authState) // specifies default auth state
authProvider.setUseSecureStorage(true) // specifies using SecureStorage for saving auth state between app launches
authProvider.setUseBiometric(EBiometricType.any) // specifies biometric usage

Features of initialization:

  • In order to initialize AuthClient object with particular AuthState, it can be passed to AuthProvider object.

    authProvider.withAuthState(authState) // specifies default auth state
    

    In other case do not call this command.

  • Also the default iOS Keychain usage by AuthClient can be specified:

    authProvider.setUseSecureStorage(true) // specifies SecureStorage usage for saving auth state between app launches
    

    In order to avoid storing auth state in Keychain, please pass false to this method.

  • Biometric verification for access data in SecureStorage also can be specified:

    authProvider.setUseBiometric(EBiometricType.any) // specifies biometric usage
    

    In order to disable biometric authentication, please pass EBiometricType.none to this method.

Provide AuthClient

To obtain the AuthClient instance, you need to call authProvider.provide() method and pass into it an object which has implemented the IProviderCallback interface methods.

public protocol IProviderCallback {
    /**
     * Invoked after successful [AuthClient] creation.
     */
    func onSuccess(authClient: AuthClient)

    /**
     * Invoked after completion with error of the [AuthClient] creation.
     */
    func onError(error: NSError)
}

Examples of performing Strivacity Authentication APIs via AuthClient:

  • Begin an OIDC Authorization Code Flow:

    authClient.authorizeAuthCodeFlow(viewController: self, completion: { result in
    // result has type Result<AnyObject, Error> and can have AuthState object with auth code on success or Error on failure
    })
    
  • Obtain an ID Token from an Authorization Code which has been previously obtained via the Authorization Code Flow:

    authClient.requestIdToken(viewController: self, completion: { result in
    // result has type Result<AnyObject, Error> and can have AuthState object with auth code, access token and id token on success or Error on failure
    })
    
  • Begin an OIDC Hybrid Flow:

    authClient.authorizeHybridFlow(viewController: self, completion: { result in
    // result has type Result<AnyObject, Error> and can have AuthState object with auth code, access token and id token on success or Error on failure
    })
    
  • Begin an OIDC RP Initiated Logout:

    authClient.logout(viewController: self, completion: logoutCompletion(_:))
    //  logoutCompletion function has the argument of type Result<Bool, Error> and can have Boolean value on success or Error on failure
    
  • Obtain an Access Token via Client Credentials:

    authClient.requestAccessToken(viewController: self, completion: { result in
    // result has type Result<AnyObject, Error> and can have AuthState object with access token on success or Error on failure
    })
    

Author

Strivacity opensource@strivacity.com

License

Strivacity is available under the Apache License, Version 2.0. See the LICENSE file for more info.