- From: Matthew Miller via GitHub <sysbot+gh@w3.org>
- Date: Tue, 11 Jan 2022 17:16:30 +0000
- To: public-webauthn@w3.org
@nicksteele and I put together a document thinking about this from the WACG side of things and what a dev-friendly API would look like for serializing and deserializing WebAuthn options and responses with **zero external dependencies**:
https://docs.google.com/document/d/e/2PACX-1vTEyAjhn6a3Rqz2KLKcPg7NwoCGO31Lz7E_2zYt8J6Kzey8UUYycv5iukUos5waD4gsml-aEOEs1it0/pub
Below are our current ideas for additions to `PublicKeyCredential` that would enable developers to send/receive **JSON** between the front end and back end, and use **Base64URL** encoding/decoding for values that are `ArrayBuffers` as per the spec (and thus not transmissible as JSON):
## Registration
**Options**
```js
const createOpts = PublicKeyCredential.optionsFromJSON({
method: 'create',
options: {
'challenge': 'N1B3...0Fmw',
'rp': {
'name': 'Example RP',
'id': 'localhost',
},
'user': {
'id': 'internalUserId',
'name': 'user@localhost',
'displayName': 'user@localhost',
},
'excludeCredentials': [
{
'id': 'ASdG...om6A',
'type': 'public-key',
'transports': ['internal']
},
],
// ...
},
});
const resp = await navigator.credentials.create(createOpts);
```
**Response**
```js
const resp = await navigator.credentials.create(createOpts);
const respJSON = PublicKeyCredential.responseToJSON({
method: 'create',
response: resp,
});
// {
// "id": "XU9x...47qQ",
// "rawId": "XU9x...47qQ",
// "response": {
// "attestationObject": "o2Nm...MjeQ",
// "clientDataJSON": "eyJ0...zZX0"
// },
// "type": "public-key",
// "clientExtensionResults": {},
// "transports": ["usb"]
// }
```
## Authentication
**Options**
```js
const getOpts = PublicKeyCredential.optionsFromJSON({
method: 'get',
options: {
'rpId': 'localhost',
'challenge': 'Ecue...5ZDE',
'allowCredentials': [
{
'id': 'ASdG...om6A',
'type': 'public-key',
'transports': ['internal'],
}
],
},
});
const resp = await navigator.credentials.get(getOpts);
```
**Response**
```js
const resp = await navigator.credentials.get(getOpts);
const respJSON = PublicKeyCredential.responseToJSON({
method: 'get',
response: resp,
});
// {
// "id": "XU9x...47qQ",
// "rawId": "XU9x...47qQ",
// "response": {
// "authenticatorData": "SZYN...AACA",
// "clientDataJSON": "eyJ0...zZX0",
// "signature": "MEUC...TzT8"
// },
// "type": "public-key",
// "clientExtensionResults": {}
// }
```
--
GitHub Notification of comment by MasterKale
Please view or discuss this issue at https://github.com/w3c/webauthn/issues/1683#issuecomment-1010184085 using your GitHub account
--
Sent via github-notify-ml as configured in https://github.com/w3c/github-notify-ml-config
Received on Tuesday, 11 January 2022 17:16:31 UTC