Contact salesSign inSign up
AuthsignalAuthsignal
Product
Passwordless / multi-factor authentication (MFA)
Drop-in authentication
Risk-based authentication
Passkeys
Biometric authentication
WhatsApp OTP
Authenticator apps (TOTP)
Push authentication
SMS OTP
Email OTP
Magic links
See all authenticators
See less authenticators
Palm biometrics
Contactless payments & identity verification
Flexible integration modes
Pre-built UI
Low code
UI components
Customizable
Custom UI
Flexible
Digital credentials API Beta
Authenticate customers instantly using digital credentials
Session management
Keep users signed in across web and mobile after authentication
Fraud Controls
Rules and policies engine
Step-up authentication
No-code rule creation
Risk alerts
User observability
Audit trails
Dynamic linking
Why Authsignal?
Complete authentication infrastructure from enrollment to step-up auth, modular by design
Solutions
By USE CASE
View All
Account takeovers (ATO)
Go passwordless
Call center
SMS cost optimization
Existing apps
QR code payments
Step-up MFA
Palm biometrics payments
By INDUSTRY
View All
Financial services
Marketplace
e-Commerce
FinTech
Crypto
Healthcare
By Integration (identity provider)
Amazon Cognito
Azure AD B2C
Duende IdentityServer
Keycloak
Auth0
NextAuth.js
Custom identity provider
By ROLe
Engineers
Product
Passwordless / Multi-factor Authentication (MFA)
Flexible Integration Modes
Pre-built UI · Low code
UI Components · Customizable
Custom UI · Flexible
Digital credentials API Beta
Authenticate customers instantly using digital credentials
Session management
Issue JWT access and refresh tokens
Why Authsignal?
Plug in Authsignal to elevate your IDP — effortless integration with any architecture.
Drop-in Authentication
Risk-based authentication
Passkeys
Biometric authentication
WhatsApp OTP
SMS OTP
Email OTP
Magic links
Authenticator apps (TOTP)
Push notifications
Palm Biometrics
Contactless payments & identity verification
Fraud Controls
Rules and Policies Engine
Step-up Authentication
No Code Rule Creation
Risk Alerts
User Observability
Audit Trails
Use Cases
Financial services
Account takeovers (ATO)
Marketplace
Go passwordless
e-Commerce
Solutions
By Use Case
Account takeovers (ATO)
Go passwordless
Call center
SMS cost optimization
Existing apps
QR code payments
Step-up MFA
Palm Biometric Payments
View all Use Cases
By Industry
Financial services
Marketplace
e-Commerce
FinTech
Crypto
Healthcare
View all Industries
By Integration (identity provider)
Amazon Cognito
Azure AD B2C
Duende IdentityServer
Keycloak
Auth0
NextAuth.js
Custom identity provider
By Role
Engineers
PricingAboutDocsBlog
Schedule a call
Try Authsignal
AUS Flag

Authsignal secures millions of passkey transactions out of our hosted Sydney region.

AUS Flag

Authsignal secures millions of passkey transactions out of our hosted Sydney region.

Join us today!
Right icon
Blog
/
Current article
Push authentication
Implementation
Passwordless authentication
React native

How To Add Push Authentication In Your React Native App With Authsignal

Ashutosh Bhadauriya
⬤
May 23, 2025
Share
How to add Push Authentication in your React Native App with Authsignal

Push authentication offers a secure and convenient password-free way to verify user identity with just a tap on their mobile device. Let's see how you can implement this in your React Native application using Authsignal.

What is Push Authentication?

Push authentication enables users to verify login attempts with a simple tap on their mobile device. When someone tries to access an account from a web browser, the account owner receives an authentication request on their phone. They can then approve or deny the login attempt directly from their device.

‍

‍

This approach is based on public key cryptography:

  • A private/public key pair is generated
  • The private key remains securely on the user's mobile device
  • The public key is stored by Authsignal

‍

Authentication Flow

The complete flow is as follows:

  1. Track Action: The sequence starts with your server API tracking an authentication action
  2. Challenge Initiation: The system creates a challenge and sends it to your user's device
  3. Push Notification: The user receives a notification on their mobile device
  4. User Response: Using the Authsignal SDK, the user approves or rejects the request
  5. Verification: The system verifies the user's response using cryptographic signatures
  6. Result: After polling for the result, the server validates the challenge
  7. Access Granted: Upon successful validation, the authenticated transaction proceeds

‍

Sequence Diagram

Below is a sequence diagram illustrating the complete push authentication flow:

‍

Prerequisites

Before users can receive push authentication challenges, they must first enroll their device by adding push credentials through the mobile SDK. This one-time setup creates the cryptographic keys needed for secure authentication.

Important: Push challenges can only be initiated for users who have already enrolled at least one push authenticator. Without this enrollment, attempts to initiate push authentication will fail.

‍

Let’s Start With Implementation

The complete source code is available in our GitHub repository. This guide's code samples are taken directly from this implementation.

Setting Up the SDK

First, initialize the Authsignal SDK in your React Native app:

// from src/config.ts

import {Authsignal} from 'react-native-authsignal';

const authsignalArgs = {
  tenantID: 'your-tenant-id',
  baseURL: 'https://api.authsignal.com/v1',
};

export const authsignal = new Authsignal(authsignalArgs);

‍

To get your Tenant ID and Base URL, head to Authsignal Portal.

Registering the Device

When a user first opens your app, you'll need to register their device:

// from src/HomeScreen.tsx

useEffect(() => {
  (async () => {
    
    // Check if device is already registered
    const credentialId = await AsyncStorage.getItem('@credential_id');
    
    if (credentialId) {
      // Device is already registered
      // Check for any pending authentication challenges
      const {data, error} = await authsignal.push.getChallenge();
      
      if (data?.challengeId) {
        navigation.navigate('PushChallenge', {challengeId: data.challengeId});
      }
      return;
    }
    
    // Register new device
    const {error} = await authsignal.push.addCredential();
    
    if (!error) {
      // Get and store the credential ID
      const {data: credential} = await authsignal.push.getCredential();
      
      if (credential) {
        await AsyncStorage.setItem('@credential_id', credential.credentialId);
      }
    }
  })();
}, [navigation]);

‍

This code handles two critical operations:

  1. Registering a new device (generating the key pair)
  2. Checking for any pending authentication challenges

Creating the Challenge Response UI

Next, implement a screen where users can approve or deny authentication requests:

// from src/PushChallengeScreen.tsx

export function PushChallengeScreen({route, navigation}) {
  const {challengeId} = route.params;
  
  return (
    <View>
      <View style={styles.container}>
        <View style={styles.header}>
          <Text style={styles.headerTitle}>Approval required</Text>
        </View>
        <Text style={styles.description}>
          Your approval is required to authorize a login request.
        </Text>
        <Button
          theme={'secondary'}
          onPress={async () => {
            await authsignal.push.updateChallenge({
              challengeId, 
              approved: true
            });
            navigation.goBack();
          }}>
          Approve
        </Button>
        <Button
          theme={'secondary'}
          onPress={async () => {
            await authsignal.push.updateChallenge({
              challengeId, 
              approved: false
            });
            navigation.goBack();
          }}>
          Deny
        </Button>
      </View>
    </View>
  );
}

‍

Configuring Navigation

Add the challenge screen to your navigation stack:

// from src/App.tsx

<Stack.Screen
  name="PushChallenge"
  component={PushChallengeScreen}
  options={{presentation: 'transparentModal'}}
/>

‍

Cleanup on Logout

When a user logs out, clean up their push authentication registration:

// from src/App.tsx

const onSignOutPressed = async () => {
  // Remove credential ID from storage
  await AsyncStorage.removeItem('@credential_id');
  
  // Remove push credential from server
  const {error} = await authsignal.push.removeCredential();
  
  if (error) {
    console.error('Error removing push credential', error);
  }
  
  // Complete sign out
  await signOut();
  setIsSignedIn(false);
};

‍

How It Works: The Complete Flow

  1. Device Enrollment: The user's device must first be enrolled for push authentication using addCredential()
  2. Login Attempt: The user attempts to log in from a web browser on another device
  3. Challenge Creation: The server creates an authentication challenge through Authsignal
  4. Challenge Detection: When the user opens your app, it checks for pending challenges
  5. User Response: The app displays the challenge details, and the user can approve or deny the login
  6. Authentication Completion: Based on the user's decision, the login in the web browser either succeeds or fails

‍

Key API Methods

The Authsignal React Native SDK provides several methods for push authentication:

Adding a Credential

await authsignal.push.addCredential({ token: "eyJhbGciOiJ..." });

‍

Getting a Challenge

const {data, error} = await authsignal.push.getChallenge();

if (error) {
    // The credential stored on the device is invalid
} else if (data) {
    // A pending challenge request is available
    // Present the user with a prompt to approve or deny the request
    const challengeId = data.challengeId;
} else {
    // No pending challenge request
}

This checks for any pending authentication requests.

‍

Updating a Challenge

await authsignal.push.updateChallenge({
  challengeId,
  approved: true,
});

This sends the user's response (approve or deny) back to the system.

‍

Removing a Credential

await authsignal.push.removeCredential();

‍

Benefits of Push Authentication

  • Enhanced Security: Eliminates password vulnerabilities
  • User Convenience: Simple tap instead of typing passwords
  • Reduced Friction: Faster authentication process
  • Device-Based Security: Authentication tied to a physical device
  • Cryptographic Verification: Uses public key cryptography for strong security

Conclusion

Push authentication offers a significant improvement over traditional methods, combining security with user convenience. By implementing it in your React Native app, you provide users with a modern, secure authentication experience that feels effortless.

Authsignal offers dedicated SDKs for iOS, Android, React Native, and Flutter, so you can implement push authentication regardless of your platform choice.

Question icon
Have a question?
Talk to an expert
NewsletterDemo PasskeysView docs
Push authentication
Implementation
Passwordless authentication
React native

You might also like

How to add push authentication to your app with Authsignal and React Native
Push authentication
React native
Node.js
Multi-factor authentication
Guides

How to add push authentication to your app with Authsignal and React Native

March 27, 2026
BSP Circular 1213: Philippine banks must replace SMS OTPs by June 2026
BSP Circular 1213
Philippine banking
SMS OTP
Risk based authentication

BSP Circular 1213: Philippine banks must replace SMS OTPs by June 2026

March 18, 2026
How to add adaptive MFA and passkeys to any web app with Authsignal and Lambda@Edge
AWS
Authentication
Security

How to add adaptive MFA and passkeys to any web app with Authsignal and Lambda@Edge

March 10, 2026

Secure your customers’ accounts today with Authsignal

Passkey demoCreate free account

Authsignal delivers passwordless and multi-factor authentication as a service. Focused on powering mid-market and enterprise businesses to rapidly deploy optimized good customer flows that enable a flexible and risk-based approach to authentication.

AICPA SOCFido Certified
LinkedInTwitter
Passwordless / multi-factor authentication (MFA)
Pre-built UI (low code)UI components (customizable)Custom UI (flexible)
Why Authsignal?
Drop-in authentication
Risk-based authentication PasskeysBiometric authenticationWhatsApp OTPSMS OTPEmail OTPMagic linksAuthenticator apps (TOTP)Push authenticationPalm biometricsDigital Credential Verification API
Rules and policies engine
User observability
Industries
Financial services
Marketplace
e-Commerce
FinTech
Crypto
View all industries
Teams
Engineers
Use cases
Account takeovers (ATO)
Go passwordless
Call center
SMS cost optimization
Existing apps
View all use cases
Identity providers (IDPs)
Amazon Cognito
Auth0
Azure AD B2C
Custom identity provider
Duende IdentityServer
Keycloak
NextAuth.js
Integrations
ASP.NET
C#
Java
Node.js
Open ID Connect (OIDC)
PHP
Python
React
Ruby
Ruby on Rails
Compare
Twilio Verify vs AuthsignalAuth0 vs AuthsignalAWS Cognito vs Authsignal + AWS Cognito
Resources
BlogDeveloper docsFree Figma mobile passkeys templateFree Figma desktop passkeys templateFree Figma webapp passkeys template
Company
About usWhy AuthsignalCareersPress releasesPartnersContact us
What is
SMS OTP
Risk Based Authentication
IP Spoofing
Passwordless authentication
Multi-Factor Authentication (MFA)
United States
+1 214 974-4877
Ireland
+353 12 676529
Australia
+61 387 715 810
New Zealand
+64 275 491 983
© 2026 Authsignal - All Rights Reserved
Terms of servicePrivacy policySecuritySystem statusCookies