summaryrefslogtreecommitdiffhomepage
path: root/packages/server/src
diff options
context:
space:
mode:
authorMatthew Miller <matthew@millerti.me>2020-05-26 23:23:24 -0700
committerMatthew Miller <matthew@millerti.me>2020-05-26 23:23:24 -0700
commit6e9857ac5032a7795a3b460d623f136cae08e12b (patch)
treeb99319e94df84a9badd6e3ba7636dc2edfdf04fb /packages/server/src
parente7bd6abdd0879ee1ccd287c11305d4c811f389f6 (diff)
Add support for userVerification in assertion
Diffstat (limited to 'packages/server/src')
-rw-r--r--packages/server/src/assertion/generateAssertionOptions.test.ts38
-rw-r--r--packages/server/src/assertion/generateAssertionOptions.ts5
2 files changed, 32 insertions, 11 deletions
diff --git a/packages/server/src/assertion/generateAssertionOptions.test.ts b/packages/server/src/assertion/generateAssertionOptions.test.ts
index aa345af..fe4feb7 100644
--- a/packages/server/src/assertion/generateAssertionOptions.test.ts
+++ b/packages/server/src/assertion/generateAssertionOptions.test.ts
@@ -4,12 +4,9 @@ test('should generate credential request options suitable for sending via JSON',
const challenge = 'totallyrandomvalue';
const options = generateAssertionOptions({
- challenge,
+ ...goodOpts1,
timeout: 1,
- allowedBase64CredentialIDs: [
- Buffer.from('1234', 'ascii').toString('base64'),
- Buffer.from('5678', 'ascii').toString('base64'),
- ],
+ challenge,
});
expect(options).toEqual({
@@ -31,13 +28,32 @@ test('should generate credential request options suitable for sending via JSON',
});
test('defaults to 60 seconds if no timeout is specified', () => {
+ const options = generateAssertionOptions(goodOpts1);
+
+ expect(options.timeout).toEqual(60000);
+});
+
+test('should not set userVerification if not specified', () => {
const options = generateAssertionOptions({
- challenge: 'totallyrandomvalue',
- allowedBase64CredentialIDs: [
- Buffer.from('1234', 'ascii').toString('base64'),
- Buffer.from('5678', 'ascii').toString('base64'),
- ],
+ ...goodOpts1,
});
- expect(options.timeout).toEqual(60000);
+ expect(options.userVerification).toEqual(undefined);
});
+
+test('should set userVerification if specified', () => {
+ const options = generateAssertionOptions({
+ ...goodOpts1,
+ userVerification: 'required',
+ });
+
+ expect(options.userVerification).toEqual('required');
+});
+
+const goodOpts1 = {
+ challenge: 'totallyrandomvalue',
+ allowedBase64CredentialIDs: [
+ Buffer.from('1234', 'ascii').toString('base64'),
+ Buffer.from('5678', 'ascii').toString('base64'),
+ ],
+};
diff --git a/packages/server/src/assertion/generateAssertionOptions.ts b/packages/server/src/assertion/generateAssertionOptions.ts
index b31a34f..1e6a4e6 100644
--- a/packages/server/src/assertion/generateAssertionOptions.ts
+++ b/packages/server/src/assertion/generateAssertionOptions.ts
@@ -7,6 +7,7 @@ type Options = {
allowedBase64CredentialIDs: string[],
suggestedTransports?: AuthenticatorTransport[],
timeout?: number,
+ userVerification?: UserVerificationRequirement,
};
/**
@@ -17,6 +18,8 @@ type Options = {
* user for assertion
* @param timeout How long (in ms) the user can take to complete assertion
* @param suggestedTransports Suggested types of authenticators for assertion
+ * @param userVerification Set to `'discouraged'` when asserting as part of a 2FA flow, otherwise
+ * set to `'preferred'` or `'required'` as desired.
*/
export default function generateAssertionOptions(
options: Options,
@@ -26,6 +29,7 @@ export default function generateAssertionOptions(
allowedBase64CredentialIDs,
suggestedTransports = ['usb', 'ble', 'nfc', 'internal'],
timeout = 60000,
+ userVerification,
} = options;
return {
@@ -36,5 +40,6 @@ export default function generateAssertionOptions(
transports: suggestedTransports,
})),
timeout,
+ userVerification,
};
}