Skip to main content

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. When fidoRequired 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:
  1. The specific device registered by the user is present
  2. The user completed a biometric or physical authentication
  3. The assertion is bound to the specific challenge issued by Grantex
For high-value agent operations (payments, data access, contract signing), this level of assurance is required by emerging standards like the Mastercard Verifiable Intent specification.

Developer Setup

Enable FIDO for your account using the SDK or REST API:
boolean
default:"false"
When true, all authorization requests for this developer require a WebAuthn assertion before the grant is approved.
string
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:
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:
This evidence is also embedded in Verifiable Credentials when credentialFormat: "vc-jwt" is used during token exchange. See Verifiable Credentials for details.

API Reference

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

Last modified on March 8, 2026