Goals
The goal of invisible captcha is to protect your application from automated abuse while maintaining a smooth user experience for legitimate users. This means our approach is to:- Identify and block automated requests transparently
- Allow legitimate users to proceed without interruption
- Prompt for additional verification only when necessary
High level flow
To implement invisible captcha with Stytch Device Fingerprinting, you will first get the fingerprint and verdict:- The frontend client will call
GetTelemetryID()and send the result to the backend for processing. - The backend server will call the Fingerprint Lookup API to fetch the results from Stytch.
- In the Lookup response, Stytch will recommend a verdict action of
ALLOW,BLOCK, orCHALLENGE.
- If the verdict is
ALLOW, you can let the user proceed. - If the verdict is
BLOCKorCHALLENGE, you can serve an interactive challenge or reject the client entirely.
Getting a fingerprint and verdict
To get a fingerprint and Stytch’s recommended verdict, you’ll callGetTelemetryID() on the frontend and Fingerprint Lookup on the backend.
For a step-by-step tutorial, see Use the Device Fingerprinting API.
Once you look up the fingerprint, you will be able to take action.
Act on the recommended verdict action
ALLOW response
The Fingerprint Lookup response may return an ALLOW verdict, like this:verdict.action of ALLOW indicates that this device looks like a normal user on a normal device. You can immediately allow the user to carry out the protected action without any additional friction. In pseudocode:
BLOCK response
The Fingerprint Lookup response may return an BLOCK verdict, like this:verdict.action of BLOCK indicates that this device looks automated or malicious. Usually this is due to known automation warning flags detected by Stytch, or due to banned device signatures from known past abuse across Stytch’s network.
You should prevent the user from completing the action.
CHALLENGE response
The Fingerprint Lookup response may return an CHALLENGE verdict, like this:verdict.action of CHALLENGE indicates that this request is unusual in a way that may or may not be malicious. For example, virtual machines are often used in automated attacks, but they can also be used in legitimate enterprise browser environments.
Depending on how sensitive your action is, you have several options:
- Treat CHALLENGE like ALLOW, which is more permissive
- Treat CHALLENGE like BLOCK, which is more strict
- On CHALLENGE, prompt the user for additional verification. For example:
- Complete a traditional captcha-style interactive task
- Answer a simple question about your service
- Step-up with multi-factor authentication (MFA)
Modifying decisioning logic
Fraud and abuse prevention is an adversarial problem, so you may find instances where the recommended action is not correct. In traditional captcha systems, you might have trouble tuning a risk threshold with an acceptable false positive and false negative rate. Since Stytch provides rich contextual data, you can modify the decisioning logic precisely based on many dimensions.- You can set Rules to allow or block specific fingerprints or IP geolocation features.
- You can override verdict reasons if the default action is not ideal for your typical users.
- You can write custom code using any of the attributes of the Fingerprint Lookup response or your own application context
What’s next?
Learn how to get started with Device Fingerprinting in just a few minutes. Then, check out the go-live checklist for production readiness. Access to Device Fingerprinting is gated to help protect our users from reverse engineering. If you are interested in invisible captcha use cases, please contact us to request access.Want to try Stytch Device Fingerprinting?
Find out why Stytch’s device intelligence is trusted by Calendly, Replit, and many more.