> ## Documentation Index
> Fetch the complete documentation index at: https://docs.rhinestone.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Passkey

> Use WebAuthn credentials to authorize a session key.

Pass a viem `WebAuthnAccount` as the session owner:

Examples on this page use `@rhinestone/sdk`, where `rhinestone` is the `RhinestoneSDK` instance from [Create a session with a custom setup](/wallets/session-keys/custom-setup/create-a-session).

```ts theme={null}
import { base } from "viem/chains";

const session = await rhinestone.createSession({
  chain: base,
  owners: {
    type: "passkey",
    accounts: [sessionOwnerAccount],
  },
});
```

Create the WebAuthn account as described in [Passkey signers](/wallets/custom-signer/account-setup/native-signers/passkeys). The RP ID and user-verification behavior come from that account; session keys do not create or store the credential.

## Require several passkeys

```ts theme={null}
const session = await rhinestone.createSession({
  chain: base,
  owners: {
    type: "passkey",
    accounts: [passkeyA, passkeyB],
    threshold: 2,
  },
});
```

The threshold defaults to `1`. A passkey signature normally requires an interactive WebAuthn ceremony, so use an ECDSA session owner for unattended automation.

<Note>
  Session keys do not support ENS owners. Use ECDSA, passkey, or a supported
  multi-factor owner set.
</Note>
