Skip to content

Simple2FA is a simple and fast library to easily add two-factor authentication to your app. Bindings in Rust, Python, and Node.

License

Notifications You must be signed in to change notification settings

kurtbuilds/simple2fa

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

38 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

GitHub Contributors Stars Build Status Downloads Crates.io

Simple2FA

Simple2FA is a library to easily add two-factor authentication to your app.

use simple2fa;
use simple2fa::create_url_encoded_qrcode;

// This represnts a user in your database.
struct User {
    pub otp_secret: String,
    pub name: String,
}

fn main() {
    // Save this to your database.
    let user = User {
        name: "Marie Curie".to_string(),
        otp_secret: simple2fa::generate_secret()
    };


    // Use this function or `create_png_qrcode` to generate a png file.
    let qrcode_data_url = create_urlencoded_qrcode("My web app", user.name, user.otp_secret);

    // The QR code is a data url, so you can render it inline on a web page.
    println!(r#"<!-- index.html -->
    <img src="{}"/>
    "#, qrcode_data_url);

    // Ask the user to scan the QR code with an authenticator app, 
    // and request a code to confirm they have setup 2FA.
    if simple2fa.check_2fa_code(user.otp_secret, "<otp_code>") {
        // 2FA is setup!
    } else {
        // Something went wrong setting up 2FA. Have the user submit a code again.
    }

    // When the user logs in, validate their password, then respond with 
    // a form requesting a 2FA code, putting the user_id in JWT or similar server-signed
    // wrapper.
    if simple2fa.check_2fa_code(user.otp_secret, "<otp_code>") {
        // Log in successful
    } else {
        // Log in failed. Ask user re-enter an otp code or reject their login attempt.
    }
}

Installation

Add simple2fa to your Cargo.toml:

[dependencies]
simple2fa = "0.1.0"

If you have cargo-edit, you can use the command line:

cargo add simple2fa

Simple2FA is also available in other languages:

Development

Development commands are described in the Justfile.

Appreciation

Thank you to:

  • @fosskers for the Rust totp-lite library, which this library depends on. totp-lite beat similar Rust libraries in benchmarking.
  • The neon project, which makes creating Node libraries painless.
  • The pyo3 project, which makes creating Python libraries painless.

About

Simple2FA is a simple and fast library to easily add two-factor authentication to your app. Bindings in Rust, Python, and Node.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published