Giter Site home page Giter Site logo

doytsujin / webauthn Goto Github PK

View Code? Open in Web Editor NEW

This project forked from tweag/webauthn

0.0 1.0 0.0 2.9 MB

A library for parsing and validating webauthn/fido2 credentials

License: Apache License 2.0

Haskell 96.75% Nix 2.34% HTML 0.21% JavaScript 0.49% Shell 0.18% CSS 0.03%

webauthn's Introduction

Haskell WebAuthn Library

Hackage

This library implements the server-side Web Authentication Relying Party specification Level 2. The goal of Web Authentication (WebAuthn) is to bring passwordless login/second factor authentication to the web, logging in using a FIDO U2F Security Key, finger print scanner and some other authenticator.

This project was originally developed in 2020 as a Zurihac project by @arianvp and @duijf. Starting September 2021 a team at Tweag was sponsored by Mercury to create a production-ready open-source implementation of this standard, which was done by @infinisil and @ErinvanderVeen.

Setting up the environment

We assume Nix is used for the development of this library. If not using Nix, take a look at default.nix for the dependencies and GHC version. All instructions below assume the use of Nix.

Nix Caches

Tweag provides a Cachix cache for the library itself and all non-Haskell dependencies, setting up the tweag-haskell-fido2 cache can be done using the instructions provided by Cachix.

Nix Shell

The Nix shell provides all libraries and tools required to build the library, tests, and example server. Simply call nix-shell to enter a shell. If the binary caches have been configured properly, this should take little time. If they have not been properly configured, entering the Nix shell will take multiple hours.

All further instructions in this README assume that you are in a Nix shell.

Developing the Library

The Haskell Language Server (hls) and Ormolu are highly recommended for the development of this library. The hls documentation describes how to configure your editor to use it. We also recommend enabling auto-format using Ormolu for your editor. We do, however, also provide a bash script in bin/autoformat.sh that uses Ormolu to format all Haskell source files in the repository.

Code not formatted using Ormolu will be rejected in CI.

Running the tests

Tests are provided in the tests directory. Running these tests is done via cabal:

cabal run test-suite:tests

Running the demo

The library comes with an example implementation for a server that makes use of it, which can be found in the server directory. All dependencies required to build the example server are included in the Nix shell.

cd server
./run.sh

Changes to the server's source files automatically trigger a rebuild of the server.

Testing with an Authenticator

The easiest way to test the server, or your own application, is to use the Chrome WebAuthn development tool. Simply open the Chrome DevTools, click on the three dots in the top right, select "More tools -> WebAuthn", and then enable the virtual environment.

Testing with a physical authenticator is easiest using an Android or iOS phone supporting it, or a dedicated token like a YubiKey or the open-source SoloKey. Testing with a phone requires setting up a certificate for the domain of the relying party as WebAuthn only works via https, with an exception being made for localhost.

Acknowledgements

The test files in tests/responses/ were not created by Tweag, but were instead copied from existing WebAuthn libraries. Notably the .NET and python libraries by the .NET foundation and Duo Labs respectively.

LICENSES

Copyright
  2020 - 2021 Arian van Putten
  2021 -      Tweag I/O

Licensed under the Apache License, Version 2.0 (the "License"); you may not use
this file except in compliance with the License. You may obtain a copy of the
License at

  http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed
under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
CONDITIONS OF ANY KIND, either express or implied. See the License for the
specific language governing permissions and limitations under the License.

webauthn's People

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.