Check your website's Passkey and WebAuthn configuration. Validate related origins, mobile app associations, and Passkey endpoints.
Slow or unreachable servers time out after a few seconds per request.
These results describe the browser you are using right now on helpers.work. They do not show whether passkeys work on the website you scanned. Detection uses passive feature queries only — no passkey is created and no biometric prompt is shown.
Detecting browser capabilities…
login.example.com.A passkey is a sign-in credential based on public-key cryptography. When a user registers, their device or password manager creates a key pair for your site: the private key never leaves the authenticator, and your server stores only the public key. To sign in, the authenticator signs a fresh challenge from your server after the user unlocks it with a fingerprint, face scan or device PIN.
Passkeys are built on the W3C WebAuthn standard and the FIDO2 protocols. Because every passkey is bound to one domain — the Relying Party ID — it cannot be phished on a look-alike site, and there is no shared secret that can leak from your database.
The checker makes read-only HTTPS requests to public endpoints and validates what it finds:
Passkeys only work in secure contexts. The checker opens a TLS connection with standard certificate verification, follows up to three HTTPS redirects and reports DNS, certificate, timeout and connection problems. For a full certificate breakdown use the SSL Certificate Checker.
WebAuthn requires the RP ID to equal the page's hostname or be a registrable parent of it.
example.com
is valid on
login.example.com;
co.uk
(a public suffix) and
another-domain.com
are not — unless Related Origins authorize the website.
/.well-known/webauthn
Lets one RP ID work across different domains. The file must be served as
application/json
with HTTP 200 and contain an
origins
array. The checker applies the WebAuthn Level 3 matching rules, including the five-label minimum browsers must support.
/.well-known/passkey-endpoints
An optional W3C draft that advertises
enroll,
manage
and
prfUsageDetails
URLs. Redirects are not allowed. Advertised URLs are validated but never visited.
apple-app-site-association
needs a
webcredentials.apps
list, and
assetlinks.json
needs a statement with
delegate_permission/common.get_login_creds
plus the app's package name and full SHA-256 signing-certificate fingerprint. Both are read from the RP ID domain — the domain your apps associate with — and must be served without redirects.
A separate panel queries the browser you are using with
PublicKeyCredential.getClientCapabilities()
and related methods. That describes your device, not the scanned site.
There is no overall score: a clean report means the public configuration is consistent, not that your sign-in flow is secure.
Registering passkeys with
rp.id = "www.example.com"
locks them to that host, so they will not work on
app.example.com. Use the registrable domain (
example.com
) if subdomains must share passkeys — and never change the RP ID after launch, because existing passkeys stay bound to the old one.
The file must live on the RP ID host, not on the related site. Typical errors are a
text/html
content type from a catch-all route, listing hostnames instead of origins (example.co.uk
instead of
https://example.co.uk), or more than five distinct brand labels.
If an iOS or Android app should use the same passkeys, the website must vouch for the app. A missing
webcredentials
section or a missing
get_login_creds
relation is a common reason passkeys created on the web don't appear in the app.
.well-known JSON filesTrailing commas, comments, a byte-order mark or a wrong content type make strict parsers reject the file. Validate the document with the JSON Formatter before deploying it.
A redirect from
example.com
to
www.example.com
breaks files that must not be redirected; CDNs may cache an old version; and a valid file on the web does not prove the app's entitlement or manifest is configured. Also check DNS with the
DNS Lookup
tool and domain ownership with
WHOIS Lookup.
{
"origins": [
"https://example.com",
"https://example.co.uk",
"https://login.example.net"
]
}
{
"enroll": "https://example.com/settings/passkeys/create",
"manage": "https://example.com/settings/passkeys",
"prfUsageDetails": "https://example.com/help/passkeys"
}
{
"webcredentials": {
"apps": ["TEAMID1234.com.example.app"]
}
}
[
{
"relation": ["delegate_permission/common.get_login_creds"],
"target": {
"namespace": "android_app",
"package_name": "com.example.app",
"sha256_cert_fingerprints": ["14:6D:E9:83:…:A5"]
}
}
]
The fingerprint above is shortened for readability; a real SHA-256 fingerprint has 32 colon-separated bytes. WebAuthn payloads use base64url — decode them with the Base64 decoder, and inspect ID tokens from your identity provider with the JWT Decoder.
rp.id, origin verification or attestation settings.WebAuthn (Web Authentication) is the W3C browser API behind passkeys. A website calls navigator.credentials.create() to register a key pair and navigator.credentials.get() to sign in. The private key stays on the user’s device or password manager; the server stores only the public key.
The Relying Party ID is the domain a passkey is bound to, set as rp.id during registration. It must equal the page’s hostname or be a parent domain of it, for example example.com for login.example.com. A passkey created for one RP ID cannot be used on unrelated domains unless Related Origin Requests are configured.
Only if the same passkeys must work on domains that are not subdomains of the RP ID, such as example.com and example.co.uk. Sites that use their own domain (or a parent domain) as the RP ID do not need the file.
No. /.well-known/passkey-endpoints is an optional W3C draft that lets password managers link users directly to your passkey creation and management pages. Passkey registration and sign-in work without it.
No. It checks publicly reachable configuration: HTTPS, RP ID rules and the .well-known files. It does not register or use a passkey, inspect your server-side WebAuthn verification, or audit your authentication flow.
Yes. Subdomains share passkeys automatically when the RP ID is the parent domain. Different registrable domains can share one RP ID through Related Origin Requests: list them in https://{rpId}/.well-known/webauthn. Browsers must support at least five distinct domain labels, and browser support for the feature still varies.