Web authenticationBaseline · Widely available
The web authentication API allows you to create public key-based credentials and use them for authentication, such as when signing in. Also known as WebAuthn.
Supported in all major browsers for at least 30 months — safe to use without fallbacks. Baseline since Sep 7, 2021. Widely available since Mar 7, 2024.
Browser support
DesktopChrome
1–66Not supported
67+Supportedsince May 29, 2018
Current: 155Edge
12–17Not supported
18+Supportedsince Oct 2, 2018
Current: 154Firefox
1–59Not supported
60+Supportedsince May 9, 2018
Current: 157Safari
1–12.1Not supported
13+Supportedsince Sep 19, 2019
Current: 27MobileChrome Android
18–69Not supported
70+Supportedsince Oct 17, 2018
Current: 155Firefox Android
4–91Not supported
92+Supportedsince Sep 7, 2021
Current: 157Safari iOS
1–12.2Not supported
13+Supportedsince Sep 19, 2019
Current: 27How to use
This feature is Baseline widely available — use it freely, no fallback needed.
Example
Full syntax and examples are on MDN: AuthenticatorAssertionResponse.
Feature detection
JS · check before using
if ("AuthenticatorAssertionResponse" in globalThis) {
// AuthenticatorAssertionResponse is available
} else {
// load a polyfill or use a fallback
}Sub-features
Support for each part of the feature (42). The overall table above shows when the whole feature works.
Show 22 more
| Sub-feature | Chrome | Edge | Firefox | Safari | Chrome Android | Firefox Android | Safari iOS |
|---|---|---|---|---|---|---|---|
| CredentialsContainer.create.publicKey_option.extensions.minPinLength | 98 | 98 | 120 | ✕ | 98 | 120 | ✕ |
| CredentialsContainer.create.publicKey_option.requireResidentKey | 89 | 89 | ✕ | ✕ | 108 | ✕ | ✕ |
| CredentialsContainer.create.publicKey_option.residentKey | 89 | 89 | 114 | ✕ | 108 | 128 | ✕ |
| CredentialsContainer.get.publicKey_option | 67 | 18 | 60 | 13 | 70 | 60 | 13 |
| CredentialsContainer.get.publicKey_option.extensions | 67 | 18 | 60 | 13 | 70 | 60 | 13 |
| CredentialsContainer.get.publicKey_option.extensions.appid | 67 | 18 | 60 | 13 | 70 | 60 | 13 |
| CredentialsContainer.get.publicKey_option.extensions.largeBlob | 113 | 113 | 139 | ✕ | 113 | 139 | ✕ |
| PublicKeyCredential | 67 | 18 | 60 | 13 | 70 | 92 | 13 |
| PublicKeyCredential.authenticatorAttachment | 98 | 98 | 120 | 15.5 | 98 | 120 | 15.5 |
| PublicKeyCredential.getClientCapabilities_static | 133 | 133 | 135 | 17.4 | 133 | 135 | 17.4 |
| PublicKeyCredential.getClientExtensionResults | 67 | 18 | 60 | 13 | 70 | 92 | 13 |
| PublicKeyCredential.isConditionalMediationAvailable_static | 108 | 108 | 119 | 16 | 108 | 119 | 16 |
| PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable_static | 67 | 18 | 60 | 13 | 70 | 92 | 13 |
| PublicKeyCredential.parseCreationOptionsFromJSON_static | 129 | 129 | 119 | 18.4 | 129 | 119 | 18.4 |
| PublicKeyCredential.parseRequestOptionsFromJSON_static | 129 | 129 | 119 | 18.4 | 129 | 119 | 18.4 |
| PublicKeyCredential.rawId | 67 | 18 | 60 | 13 | 70 | 92 | 13 |
| PublicKeyCredential.response | 67 | 18 | 60 | 13 | 70 | 92 | 13 |
| PublicKeyCredential.toJSON | 129 | 129 | 119 | 18.4 | 129 | 119 | 18.4 |
| iframe.allow.publickey-credentials-create | ✕ | ✕ | 123 | ✕ | ✕ | 123 | ✕ |
| iframe.allow.publickey-credentials-get | 84 | 84 | 118 | ✕ | 84 | 118 | ✕ |
| http.headers.Permissions-Policy.publickey-credentials-create | 88 | 88 | ✕ | ✕ | 88 | ✕ | ✕ |
| http.headers.Permissions-Policy.publickey-credentials-get | 88 | 88 | ✕ | ✕ | 88 | ✕ | ✕ |