Blog-Post-Header-ImageWebAuthn Know-How

WebAuthn Server Options: Overview of Early Adopters

Explore the WebAuthn server options overview of early adopters to see configurations for passkey / WebAuthn creation and authentication ceremonies.

Blog-Post-Author

Vincent

Created: July 9, 2024

Updated: July 9, 2024


Our mission is to make the Internet a safer place, and the new login standard passkeys provides a superior solution to achieve that. That's why we want to help you understand passkeys and its characteristics better.

Overview#

1. Introduction: WebAuthn Server Options#

More and more organizations recognize the benefits of passkeys, so the implementation of WebAuthn servers has become a critical component of their authentication strategies.

This article explores the WebAuthn server options, particularly focusing on PublicKeyCredentialCreationOptions and PublicKeyCredentialRequestOptions. By understanding how large tech companies like Google, Binance or Revolut have implemented WebAuthn server, developers and product managers can better learn from these best practices for their own passkey integrations.

2. Understanding WebAuthn Server Options#

To effectively implement passkeys, it’s essential to grasp the core WebAuthn server options:

  • PublicKeyCredentialCreationOptions: These options are crucial for credential creation during the setup of passkeys (read more).
  • PublicKeyCredentialRequestOptions: These options come into play during the authentication process, defining the parameters for assertion generation (read more).
Substack Icon

Subscribe to our Passkeys Substack for the latest news, insights and strategies.

Subscribe

3. Overview of Public Key Credential Creation Options#

In the following table, you find an overview of best practices of large tech companies on how they have defined their PublicKeyCredentialCreationOptions.

rpuserchallengepubKeyCredParamstimeoutexcludeCredentialsauthenticatorSelectionattestationextensions
KAYAKid: www.kayak.den
name: KAYAK
displayName: user@corbado.com
id: UjRD...NTOD0
name: user@corbado.com
✔️alg: -7, type: public-key
alg: -257, type: public-key
n/an/aresidentKey: required
userVerification: preferred
nonen/a
eBayid: ebay.de
name: ebay.de
displayName: user@corbado.com
id: dm9y...NxY2U
name: user@corbado.com
✔️alg: -7, type: public-key
alg: -35, type: public-key alg: -36, type: public-key
alg: -257, type: public-key
alg: -258, type: public-key alg: -259, type: public-key
alg: -37, type: public-key
alg: -38, type: public-key
alg: -39, type: public-key
alg: -1, type: public-key
n/an/aresidentKey: discouraged
userVerification: required
directn/a
Shopifyid: accounts.shopify.com
name: Shopify
displayName: user@corbado.com
id: Mzc3...jYzcw
name: user@corbado.com
✔️alg: -7, type: public-key
alg: -37, type: public-key
alg: -257, type: public-key
n/an/aresidentKey: required
userVerification: preferred
nonen/a
GitHubid: github.com
name: GitHub
displayName: user
id: ooqg...OWeyA
name: user
✔️alg: -7, type: public-key
alg: -257, type: public-key
n/aid: ✔️
transports: internal
type: public-key
residentKey: required
userVerification:
preferred
noneappIdExclude: https://github.com/u2f/trusted_facets
credProps: true
Adobeid: adobe.com
name: adobe.com
displayName: user@corbado.com
id: amFu...LmRl
name:user@corbado.com
✔️alg: -7, type: public-key
alg: -35, type: public-key
alg: -36, type: public-key
alg: -257, type: public-key
n/an/aresidentKey: preferred
userVerification: preferred
directcredProps: true
Googleid: google.com
name: Google
displayName: user@corbado.com
id: R09P...3Mjc2
name: user@corbado.com
✔️alg: -7, type: public-key
alg: -257, type: public-key
n/aid: ✔️
transports: usb, nfc, ble, hybrid, internal
type: public-key
authenticatorAttachment: platform
residentKey: preferred
userVerification: preferred
directappIdExclude: https://www.gstatic.com/securitykey/origins.json
Vercelid: vercel.com
name: Vercel
displayName: user-corbadocom
id: MVVv...Q293
name: user-corbadocom
✔️alg: -7, type: public-key
alg: -257, type: public-key
n/an/aresidentKey: required
userVerification: preferred
nonecredProps: true
Amazonid: amazon.com
name: Amazon
displayName: user
id: OTI5...M2OA
name: user@corbado.com
✔️alg: -7, type: public-keyn/an/aresidentKey: required
userVerification: preferred
directn/a
Binanceid: binance.com
name: Binance
displayName: Chrome V125.0.0.0 (Mac OS)
id: OTA2...ODIz
name: user@corbado.com
✔️alg: -65535, type: public-key
alg: -257, type: public-key
alg: -258, type: public-key
alg: -259, type: public-key
alg: -37, type: public-key
alg: -38, type: public-key
alg: -39, type: public-key
alg: -7, type: public-key
alg: -35, type: public-key
alg: -36, type: public-key
alg: -8, type: public-key
alg: -43, type: public-key
n/an/aresidentKey: discouraged
userVerification: preferred
directcredProps: true
Best Buyid: bestbuy.com
name: Best Buy
displayName: user
id: MTE4...NDA1
name: user@corbado.com
✔️alg: -7, type: public-key
alg: -257, type: public-key
n/an/aauthenticatorAttachment: platform
residentKey: required
userVerification: required
nonen/a
Coinbaseid: coinbase.com
name: Coinbase
displayName: user
id: MDVm...ZDg4
name: user@corbado.com
✔️alg: -7, type: public-key
alg: -257, type: public-key
alg: -65535, type: public-key
n/an/aresidentKey: preferred
userVerification: preferred
directcredProps: true
Finomid: app.finom.co
name: app.finom.co
displayName: user
id: amFu...LmRl
name: user@corbado.com
✔️alg: -7, type: public-key
alg: -257, type: public-key
alg: -37, type: public-key
alg: -35, type: public-key
alg: -258, type: public-key
alg: -38, type: public-key
alg: -36, type: public-key
alg: -259, type: public-key
alg: -39, type: public-key
alg: -8, type: public-key
n/an/aresidentKey: discouraged
userVerification: required
directn/a
Microsoftid: login.microsoft.com
name: Microsoft
displayName: user
id: TUY6...k61Y
name: user@corbado.com
✔️alg: -7, type: public-key
alg: -257, type: public-key
n/an/aresidentKey: required
userVerification: required
directcredentialProtectionPolicy: userVerificationOptional
enforceCredentialProtectionPolicy: false
hmacCreateSecret: true
Nintendoid: accounts.nintendo.com
name: Nintendo Account
displayName: user
id: OTE4...ExNg
name: user@corbado.com
✔️alg: -7, type: public-key
alg: -35, type: public-key
alg: -36, type: public-key
alg: -8, type: public-key
n/an/aauthenticatorAttachment: platform
residentKey: required
userVerification: required
nonen/a
PlayStationid: my.account.sony.com
name: Sony
displayName: user@corbado.com
id: dUZM...omeM
name: user@corbado.com
✔️alg: -7, type: public-key
alg: -37, type: public-key
alg: -257, type: public-key
n/an/aresidentKey: preferred
userVerification: preferred
nonen/a
Stripeid: stripe.com
name: Stripe Dashboard
displayName: user@corbado.com
id: dXNy...VGVm
name: user@corbado.com
✔️alg: -7, type: public-key
alg: -37, type: public-key
alg: -257, type: public-key
n/an/aresidentKey: required
userVerification: required
nonen/a
Uberid: uber.com
name: Uber Inc.
displayName: 0176 xxxxxxxx
id: 02c2...b4af
name: 0176 xxxxxxxx
✔️alg: -7, type: public-key
alg: -35, type: public-key
alg: -36, type: public-key
alg: -257, type: public-key
alg: -258, type: public-key
alg: -259, type: public-key
alg: -37, type: public-key
alg: -38, type: public-key
alg: -39, type: public-key
alg: -8, type: public-key
n/an/aauthenticatorAttachment: platform
residentKey: preferred
userVerification: required
nonen/a

4. Overview of Public Key Credential Request Options#

In the following table, you find an overview of best practices of large tech companies on how they have defined their PublicKeyCredentialRequestOptions.

challengetimeoutrpIdallowCredentialsuserVerificationextensions
PayPaln/apaypal.comid:
transports: usb, nfc, ble, hybrid, internal
type: public-key
requiredn/a
KAYAKn/akayak.deid:
transports: usb, nfc, ble, hybrid, internal
type: public-key
preferredn/a
eBayn/aebay.den/arequiredn/a
Shopifyn/aaccounts.shopify.comn/apreferredn/a
GitHubn/agithub.comn/arequiredn/a
Adoben/aadobe.comn/apreferredn/a
Googlen/agoogle.comid:
transports: hybrid, internal
type: public-key
preferredn/a
Verceln/avercel.comn/apreferredn/a
Amazonn/aamazon.comid:
transports: hybrid, internal
type: public-key
preferredn/a
Binancen/abinance.comid: 50tFgDvoiCy4HsjkiwsEmykmsxE
transports: hybrid, internal
type: public-key
preferredn/a
Applen/aapple.comid: QVbUFRZmiAZxElbC0CKP7zL_RGE
transports: hybrid, internal
type: public-key
preferredlargeBlob: read: true
Best Buyn/abestbuy.comn/arequiredn/a
Coinbasen/acoinbase.comn/apreferredn/a
Finomn/aapp.finom.coid: QOzxfW9xaL3Ozg4u3WBv9wjdW8s
transports: usb, nfc, ble, hybrid, internal
type: public-key
requiredn/a
Microsoftn/alogin.microsoft.comn/arequiredn/a
Nintendon/aaccounts.nintendo.comn/arequiredn/a
PlayStationn/amy.account.sony.comn/arequiredn/a
Stripen/astripe.comn/arequiredn/a
Ubern/auber.comn/arequiredn/a

5. Recommendations for Implementing WebAuthn Server Options#

For those looking to implement WebAuthn servers and use passkeys in the most user-friendly and secure way, we recommend the following WebAuthn server configurations:

PublicKeyCredentialCreationOptions

  • Relying Party

    • Reying Party ID: Use your root domain in order to be able to make the passkey reusable in potential future sub-domains as well (read mode).
    • Relying Party Name: Use the name your product / service is known to your users.
  • User

    • User Display Name: Firstname + Lastname (read more)
    • User ID: Use your internal user ID (read more)
    • User Name: Use the nam how you want to address your users (read more)
    • pubKeyCredParams: Use at least the following two algorithms (read more)
    • ES256 (alg: -7, type: public-key)
    • RS256 (alg: -257, type: public-key)
  • authenticatorSelection (read more):

    • residentKey: required (read more)
    • userVerification: required – Make sure you understand the Flags & check UV flag in case you rely on it (read more)
  • attestation: direct - so that you can get the AAGUID of uses authenticators and improve the UX (read more)

  • Extension: none

PublicKeyCredentialRequestOptions

  • userVerification: required

6. Conclusion#

In summary, leading tech companies like Google, Microsoft, eBay, and GitHub have successfully implemented passkeys. Make use of common patterns regarding the WebAuthn server options to ensure highest security and UX standards. This can significantly optimize your passkey implementation.

Share this article


LinkedInTwitterFacebook

Enjoyed this read?

🤝 Join our Passkeys Community

Share passkeys implementation tips and get support to free the world from passwords.

🚀 Subscribe to Substack

Get the latest news, strategies, and insights about passkeys sent straight to your inbox.


We provide UI components, SDKs and guides to help you add passkeys to your app in <1 hour

Start for free