58 lines
1.1 KiB
Markdown
58 lines
1.1 KiB
Markdown
```
|
|
npx http-server .
|
|
```
|
|
|
|
```js
|
|
const challenge = Uint8Array.from("myserverchallenge", c => c.charCodeAt(0))
|
|
|
|
const userId = Uint8Array.from("myuserid", c => c.charCodeAt(0))
|
|
|
|
const options = {
|
|
challenge,
|
|
rp: {
|
|
name: "localhost",
|
|
id: "localhost",
|
|
},
|
|
user: {
|
|
id: userId,
|
|
name: "myuser",
|
|
displayName: "John Doe",
|
|
},
|
|
pubKeyCredParams: [{alg: -7, type: "public-key"}],
|
|
authenticatorSelection: {
|
|
authenticatorAttachment: "cross-platform",
|
|
},
|
|
timeout: 60000,
|
|
attestation: "direct"
|
|
};
|
|
|
|
const credential = await navigator.credentials.create({
|
|
publicKey: options
|
|
});
|
|
|
|
|
|
var decoder = new TextDecoder()
|
|
decoder.decode(credential.response.clientDataJSON)
|
|
|
|
CBOR.decode(credential.response.attestationObject)
|
|
```
|
|
|
|
|
|
```js
|
|
const newChallenge = Uint8Array.from("myservernewchallenge", c => c.charCodeAt(0))
|
|
|
|
const assertionOptions = {
|
|
challenge: newChallenge,
|
|
allowCredentials: [
|
|
{
|
|
id: credential.rawId,
|
|
type: 'public-key'
|
|
}
|
|
],
|
|
timeout: 60000
|
|
}
|
|
|
|
navigator.credentials
|
|
.get({ publicKey: assertionOptions })
|
|
|
|
``` |