Client-Side Web SDK
Learn how to integrate the client-side web SDK into your web application
Supported Languages
Prove provides client web SDKs in the following languages: TypeScript and JavaScript.
Installation
The Prove Platform Web SDK has an unpacked size of 171 kB, and a single dependency: @prove-identity/mobile-auth
. Install the client-side SDK of your choice by running a command in your terminal, or by using a dependency management tool specific to your project.
Determine the Type of Flow: Mobile or Desktop
You can determine if the customer is on a mobile or desktop browser using this example. If the isMobile
is true, pass mobile
to the Start()
function on the server, otherwise you can pass desktop
:
In a mobile flow, Mobile Auth executes first and if that fails, performs one-time password (OTP) validation on the mobile phone. In a desktop flow, Instant Link sends a text message to the mobile phone for verification.
In the mobile flow, once either Mobile Auth or the OTP validation completes, the AuthFinishStep
function finishes.
In order for Mobile Auth to succeed:
- Disable VPN.
- Disable Private Relay on iOS.
When testing, you can ignore any Chrome error messages that mention ERR_TUNNEL_CONNECTION_FAILED
- this is due to the VPN, but the SDK fallbacks to OTP.
In the desktop flow, a WebSocket opens for two minutes on the desktop browser while waiting for the customer to select on the link in the text message. Once clicked, the WebSocket closes and the AuthFinishStep
function finishes.
If you’re using Content Security Policy headers, ensure you allow wss: device.uat.prove-auth.proveapis.com
and wss: device.prove-auth.proveapis.com
.
Authenticate()
The SDK requires an authToken
as a parameter for the Authenticate()
function. This token returns from the Start()
call of the server-side SDK. The token is session specific, limiting it to a single flow. It also expires after 15 minutes.
Retrieve authToken
You need to send a request to your back end server with the phone number, flow type, and an optional challenge to start the flow. This can either be the date of birth or last four digits of the social security number.
Setup Authenticator
Once you have the authToken
, build the authenticator for both the mobile and desktop flows.
Validate the Mobile Phone
In the AuthFinishStep
, you’ll specify a function to call once the possession checks complete on the mobile phone. This endpoint on your back end server calls the Validate()
function to validate the phone number. If it was successful, the server returns the results from the Challenge()
function including customer information. Refer to the following example fields that return and then prefill on a form for the customer to verify. The AuthFinishStep
then completes. In the event of cancellation, the server makes a call to the Validate()
function and returns success=false
.
OTP Configuration
There are two functions to implement for the OTP handling - a start and a finish step.
To set the OTP handler, implement withOtpFallback(startStep: OtpStartStep | OtpStartStepFn, finishStep: OtpFinishStep | OtpFinishStepFn)
, OtpStartStep
and OtpFinishStep
. The JavaScript snippet has a simplified example while the TypeScript snippet explains various situations. Ensure you return an object with the field phoneNumber
to the resolve()
function.
Retry functionality is unavailable using OTP.
Call the resolve(input: OtpStartInput)
method to return the collected phone number to the SDK.
If you passed the phone number in the Start()
call, call resolve(null)
to communicate to the SDK you have the customer’s agreement to deliver the SMS OTP message. Ensure you return an object to resolve()
function.
Call the reject("some error message")
method to communicate to the SDK any issues while trying to obtain the phone number. Report an error if the customer cancels the SMS OTP transaction or presses the back button to leave the SMS OTP start step screen.
Call the resolve(result: OtpFinishResult)
method to return the collected OTP value in which result
variable has OnSuccess
value for OtpFinishResultType
and the OTP value wrapped in OtpFinishInput
.
Call the reject("some error message")
method to communicate to the SDK any issues while trying to obtain the OTP value. Report an error if the customer cancels the SMS OTP transaction or presses the back button to exit out of the SMS OTP finish step screen.
Also call the resolve(result: OtpFinishResult)
method to request a SMS OTP message in which the result
variable has OnResendOtp
as value for OtpFinishResultType
. The SDK initiates a OtpStartStep.execute()
call to allow the mobile app to restart the phone number collection logic. You can send up to three OTPs during the same authentication session.
Instant Link Configuration
There is one function to configure for Instant Link.
To set the Instant Link handler, withInstantLinkFallback(startStep: InstantLinkStartStep | InstantLinkStartStepFn)
requires implementing the InstantLinkStartStep
interface. The JavaScript snippet has a simplified example while the TypeScript snippet explains various situations. Ensure you return an object with the field phoneNumber
to the resolve()
function.
Call the resolve(input: InstantStartInput)
method to return the collected phone number to the SDK.
If you passed the phone number in the Start()
call, call resolve(null)
to communicate to the SDK you have the customer’s agreement to deliver the SMS OTP message. Ensure you return an object to resolve()
function.
Call the reject("some error message")
method to communicate to the SDK any issues while trying to obtain the phone number. Report an error if the customer cancels the Instant Link transaction or presses the back button to leave the Instant Link start step dialog.
Verify the Customer Information
Once the customer has made any edits to their prefill information, submit that information to the back end server so the Complete()
call can then verify the customer information.
Function Reference
Start the flow with Authenticator.authenticate()
, while creating an instance of Authenticator using AuthenticatorBuilder.build()
.
Use the following methods to configure Authenticator
before instantiating. All methods return the same instance of AuthenticatorBuilder
to allow chaining of the configuration methods.
withAuthFinishStep(step: AuthFinishStep | AuthFinishStepFn): AuthenticatorBuilder
This step customizes the handling of the authentication finish call. The implementation calls the customer’s back end to retrieve authentication results. The customer defines the format of the response to suit the application needs.
withRole(role: DeviceRole): AuthenticatorBuilder
Sets the authentication role for this device. It can be either Primary
or Secondary
. The Primary
value sets when the customer is on a mobile device web browser that registers with the Prove system and later authenticated by verifying this registration. On other hand, the Secondary
value sets when the customer is on a desktop web browser, which authenticates after receiving customer feedback on their Primary
device.
withMobileAuthImplementation(implementation: MobileAuthImplementation): AuthenticatorBuilder
Sets the implementation type for Mobile Auth authenticator. Possible values are Fetch
or Pixel
with Fetch
set by default.
withDeviceIpAddress(deviceIp: string | (() => string | null) | null): AuthenticatorBuilder
Sets the public IP address for this device to report during device registration. If you neglect to call this method, or the IP address value is null
, the system attempts to autodetect the IP address using an external service. If the service is inaccessible, the system uses the client’s IP address of the HTTP connection. Successful Mobile Auth authentication requires the client’s public IP address.
withOtpFallback(startStep: OtpStartStep | OtpStartStepFn, finishStep: OtpFinishStep | OtpFinishStepFn): AuthenticatorBuilder
Configure start and finish handlers for SMS OTP authenticator. Collecting customer input requires using these handlers to enter the phone number for delivery of OTP codes, and to enter received OTP codes.
withInstantLinkFallback(startStep: OtpStartStep | OtpStartStepFn): AuthenticatorBuilder
Configure handler for Instant Link authenticator. This handler collects customer input to enter the phone number for Instant Link.
build(): Authenticator
Finalizes the configuration and returns an instance of the Authenticator
.