django-pci-auth

Django 1.4+ only

This library integrates the current Django "best of" PCI auth libraries into a single application, then fills in the gaps. Filling gaps may involve making additional decisions for you, as suggested by Django Documentation e.g.:

Or in some cases additional functionality may be provided by this library e.g.:

Features

  • Stronger password hashing that allows for selection of hashing algorithm scrypt, bcrypt, PBKDF2, etc. via settings.py. [1]
  • Checking for strong passwords with a default length setting overrideable in settings.py. [2]
  • Integrate strong passwords into Django Admin.
  • Lock out account for n minutes after x failed log-in attempts. [3]
  • Set inactivity timeouts.
  • Generate event/email when lock-out occurs.
  • Set flags disallowing certain accounts to be locked out.
  • Log every log-on and explicit log-out (not necessary to log timed out log-ins).
  • Track last four passwords and do not allow re-use.
  • Force password reset after X amount of time.

XXX Below not done

  • Provide JavaScript to check for strong passwords inline.
    • Javascript code should check the Django settings via AJAX re: password length min/max, etc.

Settings

Stronger password hashing

This is a built-in feature in Django 1.4+. Documented here for convenience:

PASSWORD_HASHERS = (
    # From https://docs.djangoproject.com/en/1.4/topics/auth/:
    # "[redacted] This means that Django will use the first hash in the list
    # to store all passwords, but will support checking passwords stored with
    # the rest of the hashes in the list. If you remove a hash from the list
    # it will no longer be supported.
    'django.contrib.auth.hashers.PBKDF2PasswordHasher',
    'django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher',
    'django.contrib.auth.hashers.BCryptPasswordHasher',
    'django.contrib.auth.hashers.SHA1PasswordHasher',
    'django.contrib.auth.hashers.MD5PasswordHasher',
    'django.contrib.auth.hashers.CryptPasswordHasher',
)

Password Reuse

How many old passwords will you store? This feature will prevent users from using the same passwords over and over again; it will keep the last OLD_PASSWORD_STORAGE_NUM number of passwords around and remove anything older. E.g.:

OLD_PASSWORD_STORAGE_NUM = 4

Screenshots

Overview of features

https://raw.github.com/aclark4life/django-pci-auth/master/screenshot-index.png

Password length enforcement

https://raw.github.com/aclark4life/django-pci-auth/master/screenshot.png

Failed login attempts log

https://raw.github.com/aclark4life/django-pci-auth/master/screenshot-axes.png

License

This software is licensed under the same BSD license that Django is licensed under. See: LICENSE.

Notes

[1]This feature is included with Django 1.4+
[2]This feature is provided by django-passwords
[3]This feature is provided by django-axes

Changes

0.0.4 (2012-11-28)

  • Pre-release, includes most features promised. [aclark4life]