Skip to main content

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).

PyPI version

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 your INSTALLED_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

django-webauthin-0.0.2.tar.gz (11.3 kB view details)

Uploaded Source

Built Distributions

django_webauthin-0.0.2-py3.7.egg (26.9 kB view details)

Uploaded Source

django_webauthin-0.0.2-py2.py3-none-any.whl (17.4 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file django-webauthin-0.0.2.tar.gz.

File metadata

  • Download URL: django-webauthin-0.0.2.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

Hashes for django-webauthin-0.0.2.tar.gz
Algorithm Hash digest
SHA256 8fdf79a258afe715079a5d9929f74cfca289638c7bd655e2305a46a949ad4cef
MD5 6cd9d516ad856028c27e06ef1287887e
BLAKE2b-256 6a060a1641e6d7643c0f14d0d79c9da6dc2147398ae1aedb8663b061a13a60b8

See more details on using hashes here.

File details

Details for the file django_webauthin-0.0.2-py3.7.egg.

File metadata

  • Download URL: django_webauthin-0.0.2-py3.7.egg
  • Upload date:
  • Size: 26.9 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

Hashes for django_webauthin-0.0.2-py3.7.egg
Algorithm Hash digest
SHA256 e38ca7081cb2fe26b87d42fa0b1b3ff1721009dad2dcb7ab7bc71e322a694abc
MD5 006c570727b53c14ffef2a6832738d6a
BLAKE2b-256 5d0f28a097e0f5e6112f3a763ae5dfdf08354a2e0901a02e7a7db46a2a70d20f

See more details on using hashes here.

File details

Details for the file django_webauthin-0.0.2-py2.py3-none-any.whl.

File metadata

  • Download URL: django_webauthin-0.0.2-py2.py3-none-any.whl
  • Upload date:
  • Size: 17.4 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

Hashes for django_webauthin-0.0.2-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 ccc9182beec2559431bc06b51aca07ec15fecef6f8c019e2d16c1640015b72ea
MD5 90cbf068829f153230e3864d6ce58d33
BLAKE2b-256 d576534d6c22795374a8ff161a667ceb149b02a321c1e2731b7d092f50d2a6ed

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page