Snippet: Voice Two Factor Authentication
This snippet will show you how to implement basic two factor authentication via a voice call, creating an authentication request from your application, and presenting a challenge via voice phone call that can be verified by a Web API call.
You will need a machine with Python installed, the SignalWire SDK, a provisioned SignalWire phone number, and optionaly Docker if you decide to run it in a container.
For this demo we will be using Python, but more languages may become available.
- SignalWire SDK
- SignalWire Phone Number
- Docker (Optional)
Methods and Endpoints
Endpoint: /request-auth Methods: GET OR POST Request a challenge session, GET or POST 'number' to create a voice challenge session.
Endpoint: /validate-auth Methods: GET OR POST Validate a voice challenge session, GET or POST 'number' and 'auth_code' to vaidate. Will return 200 (OK) or 403 (Forbidden)
Setup Your Environment File
- Copy from example.env and fill in your values
- Save new file called .env
Your file should look something like this:
## This is the full name of your SignalWire Space. e.g.: example.signalwire.com SIGNALWIRE_SPACE= # Your Project ID - you can find it on the `API` page in your Dashboard. SIGNALWIRE_PROJECT= # Your API token - you can generate one on the `API` page in your Dashboard SIGNALWIRE_TOKEN= # The phone number you'll be using for this Snippet. Must include the `+1` , e.g.: +15551234567 SIGNALWIRE_NUMBER= # Hostname HOSTNAME=
Build and Run on Docker
Let's get started!
- Use our pre-built image from Docker Hub:
For Python: docker pull signalwire/snippets-voice-two-factor-auth:python
- Or build your own image:
docker build -t snippets-voice-two-factor-auth .
- Run your image:
docker run --publish 5000:5000 --env-file .env snippets-voice-two-factor-auth
- The application will run on port 5000
Build and Run Natively
1. Replace environment variables 2. From command line run, python3 app.py
You can find more documentation on LaML, Relay, and all SignalWire APIs at:
If you have any issues or want to engage further about this snippet, please open an issue on this repo or join our fantastic Slack community and chat with others in the SignalWire community!
If you need assistance or support with your SignalWire services please file a support ticket from your Dashboard.