webauthn-json
webauthn-json copied to clipboard
Using Capybara and the [webauthn](https://github.com/cedarcode/webauthn-ruby) gem, I was able to get integration tests working in a Rails environment. I thought I'd post it here for a kickstart (which testing-stack are you intending to use, by the way?).
Using Capybara and the webauthn gem, I was able to get integration tests working in a Rails environment. I thought I'd post it here for a kickstart (which testing-stack are you intending to use, by the way?).
To my surprise, recent versions of selenium/webdrivers support this out-of-the-box.
# Setup is only possible *after* an initial request (visit in Capybara) has been made.
visit '/login'
# Ensure same-origin
WebAuthn.configuration.origin = Capybara.current_session.server.base_url
# Enable virtual authenticators in browser
devtools = page.driver.browser.devtools
devtools.send_cmd 'WebAuthn.enable'
# Create an Authenticator
# See https://chromedevtools.github.io/devtools-protocol/tot/WebAuthn/#type-VirtualAuthenticatorOptions
options = {
protocol: :ctap2,
transport: :internal,
hasResidentKey: false, # Chrome should not have to reveal a list of existing virtual authenticator IDs.
# isUserConsenting: true, # Not sure, this option exists in selenium but not in chrome?
hasUserVerification: true,
isUserVerified: true,
}
attributes = record.devtools.send_cmd 'WebAuthn.addVirtualAuthenticator', options: options
id = attributes.dig('result', 'authenticatorId')
# Make sure to tear down after each test because it will interfere with further tests
devtools.send_cmd 'WebAuthn.removeVirtualAuthenticator', authenticatorId: id
devtools.send_cmd 'WebAuthn.disable'
Originally posted by @halo in https://github.com/github/webauthn-json/issues/31#issuecomment-1102406708