Overview
Grantex supports FIDO2/WebAuthn passkeys as a human presence verification mechanism during the consent flow. When enabled, end-users authenticate with a biometric, security key, or platform authenticator before a grant is issued. This raises the assurance level from “user clicked approve” to “user was cryptographically verified by their device.” FIDO is opt-in per developer. WhenfidoRequired is set to true, all authorization requests for that developer require a WebAuthn assertion before the grant is approved.
Why FIDO for Agents?
Standard consent flows rely on a button click in a browser. This is vulnerable to session hijacking, UI redressing, and automated approval. A FIDO assertion proves that:- The specific device registered by the user is present
- The user completed a biometric or physical authentication
- The assertion is bound to the specific challenge issued by Grantex
Developer Setup
Enable FIDO for your account using the SDK or REST API:When
true, all authorization requests for this developer require a WebAuthn assertion before the grant is approved.The Relying Party name displayed in the browser’s passkey prompt. Typically your application name.
Registration Ceremony
Before a user can authenticate with FIDO, they must register a passkey. This is a one-time process per user per device.Step 1: Get Registration Options
Step 2: Create Credential in Browser
Pass the options to the browser’s WebAuthn API:Step 3: Verify and Store
Send the credential response back to your server and forward it to Grantex:Assertion Ceremony (Consent Flow)
When FIDO is enabled, the consent flow includes a WebAuthn assertion challenge. This happens automatically in the hosted consent UI, but you can also drive it programmatically.Programmatic Assertion
If you build a custom consent UI, use the assertion endpoints directly:Managing Credentials
Users can have multiple passkeys registered (e.g., laptop fingerprint + phone + YubiKey). Use the credentials endpoints to list and delete them.FIDO Evidence in Grants
When a grant is approved via FIDO assertion, the grant record includes FIDO evidence metadata:credentialFormat: "vc-jwt" is used during token exchange. See Verifiable Credentials for details.
API Reference
| Method | Endpoint | Description |
|---|---|---|
POST | /v1/webauthn/register/options | Generate passkey registration options |
POST | /v1/webauthn/register/verify | Verify registration and store credential |
GET | /v1/webauthn/credentials | List WebAuthn credentials for a principal |
DELETE | /v1/webauthn/credentials/:id | Delete a credential |
POST | /v1/webauthn/assert/options | Generate assertion options for consent |
POST | /v1/webauthn/assert/verify | Verify assertion during consent |
PATCH | /v1/me | Update developer settings (FIDO config) |
Security Considerations
- User verification required: All FIDO operations set
userVerification: "required", ensuring the authenticator performs biometric or PIN verification."discouraged"or"preferred"are not accepted. - Challenge expiry: Registration and assertion challenges expire after 5 minutes. Replaying an expired challenge returns a 400 error.
- Credential binding: Each credential is bound to a specific principal and developer. A credential registered for one developer’s consent flow cannot be used for another.
- Attestation: Grantex accepts
"none","indirect", and"direct"attestation conveyance. Attestation statements are stored but not currently used for trust decisions. - Fallback behavior: If FIDO is enabled but the user has no registered credentials, the consent flow prompts them to register a passkey before proceeding.
Next Steps
- Verifiable Credentials — FIDO evidence embedded in W3C VCs
- DID Infrastructure — how verifiers resolve Grantex’s signing keys
- End-User Permissions — user-facing permission dashboard