Passwordless authentication using WebAuthn.
Project description
WebAuthin'
WARNING: This library is still somewhat of an alpha version, though it should mostly work.
About
WebAuthin' is a Django library for secure, passwordless logins using WebAuthn/FIDO2.
It allows users to associate secure keys (from USB keys like Yubikeys, Titan keys, etc to platform authenticators like OS X's TouchID) with your website and log in just by plugging the key in. This means they don't need to remember a username/password, there are no credentials to steal, and they don't need a second factor.
WebAuthin' requires user verification, which means that the user will need to enter a PIN, fingerprint, or some other method of verification locally, to prevent theft of the physical key from allowing logins.
WebAuthn is currently only supported on a few browsers (Chrome on the desktop, somewhat on Firefox on Android, possibly Safari on iOS).
Installing django-webauthin
-
First of all, make sure that your site uses the
Sites
framework properly, as that is what WebAuthin' currently uses to get your site name and domain. In the future, settings will be added so you won't need to do this. -
Install django-webauthin using pip:
pip install django-webauthin
-
Add
webauthin
to yourINSTALLED_APPS
:
# settings.py
INSTALLED_APPS = [... "webauthin", ...]
- Add webauthin to your authentication backends:
AUTHENTICATION_BACKENDS = (
"webauthin.auth_backends.WebAuthinBackend",
"django.contrib.auth.backends.ModelBackend",
)
- Add the webauthin URL to your
urls.py
:
# urls.py
urlpatterns += path("auth/", include("webauthin.urls", namespace="webauthin"))
- You now need two buttons, one for registration and one for login. The registration
button should have an ID of
webauthin-register
. You also need to include a template that will insert the JS code somewhere:
{% include "webauthin_register.html" %}
<button id="webauthin-register">Register new key</button>
Pressing this button will trigger the key registration flow.
- Add the login button to your login form, as above, this time with an ID of
webauthin-login
:
{% include "webauthin_login.html" %}
<button id="webauthin-login">Log in using hardware key</button>
- You can also add a table to allow the user to see and delete their registered keys, though this process is currently somewhat manual:
def account_view(request):
return render(request, "account.html", {"keys": request.user.authdata_set.all()}
{% for key in keys %}
<p>
Created on {{ key.created_on }} and last used on {{ key.last_used_on }}.
</p>
{% endfor %}
Do note that you need to have the Django messages framework installed so the library can show the user error/success messages.
Settings
Here are the settings you can change in your settings.py
:
WEBAUTHIN_LOGIN_REDIRECT_URL
(default: LOGIN_REDIRECT_URL): Where to redirect after a successful login.WEBAUTHIN_LOGIN_ERROR_URL
(default: LOGIN_URL): Where to redirect after a login error.WEBAUTHIN_REGISTRATION_REDIRECT_URL
(default: LOGIN_REDIRECT_URL): Where to redirect after a successful key registration.WEBAUTHIN_REGISTRATION_ERROR_URL
(default: LOGIN_REDIRECT_URL): Where to redirect after a key registration error.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file django-webauthin-0.0.3.tar.gz
.
File metadata
- Download URL: django-webauthin-0.0.3.tar.gz
- Upload date:
- Size: 11.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.14.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.35.0 CPython/3.7.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1d38d0c96f569a6cb3ad2fa23a80e4e9f3fd3d5762c4214ba783c9b7a637e5be |
|
MD5 | 225d29c8f8a4035b2f5ee1d3bbbeb602 |
|
BLAKE2b-256 | c0751dd7bff474bdaa00bc66721615d8c64167543d0b49df0eeaf78c3662c11c |
File details
Details for the file django_webauthin-0.0.3-py2.py3-none-any.whl
.
File metadata
- Download URL: django_webauthin-0.0.3-py2.py3-none-any.whl
- Upload date:
- Size: 17.5 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.14.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.35.0 CPython/3.7.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | e19b29a091e039514f8bf90cb9f4ae5cc6abbcc2bbce832db0a6e6469fbf33b0 |
|
MD5 | 89f1b21c5fa17146ed547865f189c401 |
|
BLAKE2b-256 | 4f2c2f1f9ac2d3d1194ddee8e04c6f255517b10201542c4b7f69eacee8fb36de |