{ "info": { "author": "Joris Beckers", "author_email": "joris.beckers@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Web Environment", "Framework :: Django :: 1.11", "Framework :: Django :: 2.0", "Framework :: Django :: 2.1", "Framework :: Django :: 2.2", "Intended Audience :: Developers", "Intended Audience :: End Users/Desktop", "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Internet :: WWW/HTTP", "Topic :: Internet :: WWW/HTTP :: Dynamic Content", "Topic :: Internet :: WWW/HTTP :: WSGI", "Topic :: Software Development :: Libraries :: Application Frameworks", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "ADFS Authentication for Django\n==============================\n\n.. image:: https://readthedocs.org/projects/django-auth-adfs/badge/?version=latest\n :target: http://django-auth-adfs.readthedocs.io/en/latest/?badge=latest\n :alt: Documentation Status\n.. image:: https://img.shields.io/pypi/v/django-auth-adfs.svg\n :target: https://pypi.python.org/pypi/django-auth-adfs\n.. image:: https://img.shields.io/pypi/pyversions/django-auth-adfs.svg\n :target: https://pypi.python.org/pypi/django-auth-adfs#downloads\n.. image:: https://img.shields.io/pypi/djversions/django-auth-adfs.svg\n :target: https://pypi.python.org/pypi/django-auth-adfs\n.. image:: https://travis-ci.org/jobec/django-auth-adfs.svg?branch=master\n :target: https://travis-ci.org/jobec/django-auth-adfs\n.. image:: https://codecov.io/github/jobec/django-auth-adfs/coverage.svg?branch=master\n :target: https://codecov.io/github/jobec/django-auth-adfs?branch=master\n\nA Django authentication backend for Microsoft ADFS and Azure AD\n\n* Free software: BSD License\n* Homepage: https://github.com/jobec/django-auth-adfs\n* Documentation: http://django-auth-adfs.readthedocs.io/\n\nFeatures\n--------\n\n* Integrates Django with Active Directory on Windows 2012 R2, 2016 or Azure AD in the cloud.\n* Provides seamless single sign on (SSO) for your Django project on intranet environments.\n* Auto creates users and adds them to Django groups based on info received from ADFS.\n* Django Rest Framework (DRF) integration: Authenticate against your API with an ADFS access token.\n\nInstallation\n------------\n\nPython package::\n\n pip install django-auth-adfs\n\nIn your project's ``settings.py`` add these settings.\n\n.. code-block:: python\n\n AUTHENTICATION_BACKENDS = (\n ...\n 'django_auth_adfs.backend.AdfsAuthCodeBackend',\n ...\n )\n\n INSTALLED_APPS = (\n ...\n # Needed for the ADFS redirect URI to function\n 'django_auth_adfs',\n ...\n\n # checkout the documentation for more settings\n AUTH_ADFS = {\n \"SERVER\": \"adfs.yourcompany.com\",\n \"CLIENT_ID\": \"your-configured-client-id\",\n \"RELYING_PARTY_ID\": \"your-adfs-RPT-name\",\n # Make sure to read the documentation about the AUDIENCE setting\n # when you configured the identifier as a URL!\n \"AUDIENCE\": \"microsoft:identityserver:your-RelyingPartyTrust-identifier\",\n \"CA_BUNDLE\": \"/path/to/ca-bundle.pem\",\n \"CLAIM_MAPPING\": {\"first_name\": \"given_name\",\n \"last_name\": \"family_name\",\n \"email\": \"email\"},\n }\n\n # Configure django to redirect users to the right URL for login\n LOGIN_URL = \"django_auth_adfs:login\"\n LOGIN_REDIRECT_URL = \"/\"\n\n ########################\n # OPTIONAL SETTINGS\n ########################\n\n MIDDLEWARE = (\n ...\n # With this you can force a user to login without using\n # the LoginRequiredMixin on every view class\n #\n # You can specify URLs for which login is not enforced by\n # specifying them in the LOGIN_EXEMPT_URLS setting.\n 'django_auth_adfs.middleware.LoginRequiredMiddleware',\n )\n\nIn your project's ``urls.py`` add these paths:\n\n.. code-block:: python\n\n urlpatterns = [\n ...\n path('oauth2/', include('django_auth_adfs.urls')),\n ]\n\nThis will add these paths to Django:\n\n* ``/oauth2/login`` where users are redirected to, to initiate the login with ADFS.\n* ``/oauth2/login_no_sso`` where users are redirected to, to initiate the login with ADFS but forcing a login screen.\n* ``/oauth2/callback`` where ADFS redirects back to after login. So make sure you set the redirect URI on ADFS to this.\n* ``/oauth2/logout`` which logs out the user from both Django and ADFS.\n\nYou can use them like this in your django templates:\n\n.. code-block:: html\n\n Logout\n Login\n Login (no SSO)\n\nContributing\n------------\nContributions to the code are more then welcome.\nFor more details have a look at the ``CONTRIBUTING.rst`` file.\n\n\nChangelog\n=========\n\n`1.3.0`_ - 2019-03-??\n---------------------\n\n**Added**\n\n* Added setting ``SETTINGS_CLASS``, defaulting to\n ``django_auth_adfs.config.Settings``. This provides a mechanism to load the\n ``AUTH_ADFS`` config from sources other than Django settings.\n\n`1.2.0`_ - 2019-03-01\n---------------------\n\n**Removed**\n\n* Django 1.8, 1.9 and 1.10 support. They are end of extended support and keeping support for them was becoming too\n complex.\n\n**Fixed**\n\n* The django templates were missing in the wheel\n\n`1.1.2`_ - 2018-12-11\n---------------------\n\n**Added**\n\n* Added views to selectively disable SSO for login links\n\n**Fixed**\n\n* Existing users with an empty password raised an exception\n\n`1.1.1`_ - 2018-12-07\n---------------------\n\n**Added**\n\n* Add a setting to force a login screen and disable SSO on ADFS.\n* Documentation about how to enable SSO for other browsers than IE & Edge.\n\n**Fixed**\n\n* Prevent username field from being overwritten by a claim mapping.\n* Prevent traceback upon logout when ADFS config is not yet loaded.\n* Fix fields in log messages being swapped.\n\n**Security**\n\n* Don't allow the audience claim to be ignored. Preventing access token reuse.\n* Set an unusable password on newly created user instead of leaving it empty.\n\n`1.0.0`_ - 2018-12-05\n---------------------\n\n**This version contains backwards incompatible changes. Make sure to read the entire release notes**\n\n**Added**\n\n* Windows 2016 (a.k.a. ADFS 4.0) Support\n* AzureAD support (check the setting ``TENANT_ID``)\n* Django Rest Framework support.\n* Add a ``RETRIES`` and ``TIMEOUT`` setting for requests towards the ADFS server.\n* Add the ``CLIENT_SECRET`` setting to support client secrets in the OAuth2 Flow.\n* Users are now redirected back to the page that triggered the login instead of the main page.\n* Groups a user belongs to can now be automatically created in Django (check the ``MIRROR_GROUPS`` setting)\n\n**Changed**\n\n* Django 2.1 support\n* All settings that can be determined automatically are now set automatically\n* When a claim mapped to a non-required field in the user model is missing,\n a warning is logged instead of an exception raised\n\n**Incompatible changes**\n\n* Because of the login and logout views that were added, the redirect URI back from ADFS should\n now point to ``/oauth2/callback``. Keeping it at ``/oauth2/login`` would have caused a potential redirect loop.\n\n**Deprecated**\n\n* these settings are now loaded from ADFS metadata automatically and have been deprecated:\n\n * ``AUTHORIZE_PATH``\n * ``LOGIN_REDIRECT_URL``\n * ``ISSUER``\n * ``REDIR_URI``\n * ``SIGNING_CERT``\n * ``TOKEN_PATH``\n\n\n`0.2.1`_ - 2017-10-20\n---------------------\n\n* Django 2.0 support and tests.\n\n`0.2.0`_ - 2017-09-14\n---------------------\n\n* Fixed a bug were authentication failed when the last ADFS signing key was not the one that signed the JWT token.\n* Django 1.11 support and tests.\n* Proper handling the absence of 'code' query parameter after ADFS redirect.\n* Added ADFS configuration guide to docs.\n* Allow boolean user model fields to be set based on claims.\n* The ``namespace`` argument for ``include()`` is not needed anymore on Django >=1.9.\n* Fixed some Django 2.0 deprecation warnings, improving future django support.\n\n`0.1.2`_ - 2017-03-11\n---------------------\n\n* Support for django 1.10 new style middleware using the ``MIDDLEWARE`` setting.\n\n`0.1.1`_ - 2016-12-13\n---------------------\n\n* Numerous typos fixed in code and documentation.\n* Proper handling of class variables to allow inheriting from the class ``AdfsBackend``.\n\n`0.1.0`_ - 2016-12-11\n---------------------\n\n* By default, the ADFS signing certificate is loaded from the ``FederationMetadata.xml`` file every 24 hours.\n Allowing to automatically follow certificate updates when the ADFS settings for ``AutoCertificateRollover``\n is set to ``True`` (the default).\n* Group assignment optimisation. Users are not removed and added to all groups anymore. Instead only the\n groups that need to be removed or added are handled.\n\n**Backwards incompatible changes**\n\n* The redundant ``ADFS_`` prefix was removed from the configuration variables.\n* The ``REQUIRE_LOGIN_EXEMPT_URLS`` variable was renamed to ``LOGIN_EXEMPT_URLS``\n\n`0.0.5`_ - 2016-12-10\n---------------------\n\n* User update code in authentication backend split into separate functions.\n\n`0.0.4`_ - 2016-03-14\n---------------------\n\n* Made the absence of the group claim non-fatal to allow users without a group.\n\n`0.0.3`_ - 2016-02-21\n---------------------\n\n* ADFS_REDIR_URI is now a required setting\n* Now supports Python 2.7, 3.4 and 3.5\n* Now supports Django 1.7, 1.8 and 1.9\n* Added debug logging to aid in troubleshooting\n* Added unit tests\n* Lot's of code cleanup\n\n`0.0.2`_ - 2016-02-11\n---------------------\n\n* Fixed a possible issue with the cryptography package when used with apache + mod_wsgi.\n* Added a optional context processor to make the ADFS authentication URL available as a template variable (ADFS_AUTH_URL).\n* Added a optional middleware class to be able force an anonymous user to authenticate.\n\n0.0.1 - 2016-02-09\n------------------\n\n* Initial release\n\n.. _1.3.0: https://github.com/jobec/django-auth-adfs/compare/1.2.0...1.3.0\n.. _1.2.0: https://github.com/jobec/django-auth-adfs/compare/1.1.2...1.2.0\n.. _1.1.2: https://github.com/jobec/django-auth-adfs/compare/1.1.1...1.1.2\n.. _1.1.1: https://github.com/jobec/django-auth-adfs/compare/1.0.0...1.1.1\n.. _1.0.0: https://github.com/jobec/django-auth-adfs/compare/0.2.1...1.0.0\n.. _0.2.1: https://github.com/jobec/django-auth-adfs/compare/0.2.0...0.2.1\n.. _0.2.0: https://github.com/jobec/django-auth-adfs/compare/0.1.2...0.2.0\n.. _0.1.2: https://github.com/jobec/django-auth-adfs/compare/0.1.1...0.1.2\n.. _0.1.1: https://github.com/jobec/django-auth-adfs/compare/0.1.0...0.1.1\n.. _0.1.0: https://github.com/jobec/django-auth-adfs/compare/0.0.5...0.1.0\n.. _0.0.5: https://github.com/jobec/django-auth-adfs/compare/0.0.4...0.0.5\n.. _0.0.4: https://github.com/jobec/django-auth-adfs/compare/0.0.3...0.0.4\n.. _0.0.3: https://github.com/jobec/django-auth-adfs/compare/0.0.2...0.0.3\n.. _0.0.2: https://github.com/jobec/django-auth-adfs/compare/0.0.1...0.0.2", "description_content_type": "", "docs_url": null, "download_url": "https://pypi.python.org/pypi/django-auth-adfs", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/jobec/django-auth-adfs", "keywords": "django authentication adfs oauth2", "license": "BSD", "maintainer": "", "maintainer_email": "", "name": "cedar-adfs-forked", "package_url": "https://pypi.org/project/cedar-adfs-forked/", "platform": "", "project_url": "https://pypi.org/project/cedar-adfs-forked/", "project_urls": { "Download": "https://pypi.python.org/pypi/django-auth-adfs", "Homepage": "https://github.com/jobec/django-auth-adfs" }, "release_url": "https://pypi.org/project/cedar-adfs-forked/1.2.0/", "requires_dist": null, "requires_python": "", "summary": "A Django authentication backend for Microsoft ADFS and AzureAD", "version": "1.2.0" }, "last_serial": 5535550, "releases": { "1.2.0": [ { "comment_text": "", "digests": { "md5": "c3bc177aea4302f0891448e029ee306d", "sha256": "1fde4d97216d9c287527123871df7baa8babd5e4c52e8fb21fc2d8da170fe647" }, "downloads": -1, "filename": "cedar-adfs-forked-1.2.0.tar.gz", "has_sig": false, "md5_digest": "c3bc177aea4302f0891448e029ee306d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1101783, "upload_time": "2019-07-15T15:32:58", "url": "https://files.pythonhosted.org/packages/32/a8/def535c0d002fd1da95fcad7ddd5fea7151960304b5effbc695466f3af12/cedar-adfs-forked-1.2.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "c3bc177aea4302f0891448e029ee306d", "sha256": "1fde4d97216d9c287527123871df7baa8babd5e4c52e8fb21fc2d8da170fe647" }, "downloads": -1, "filename": "cedar-adfs-forked-1.2.0.tar.gz", "has_sig": false, "md5_digest": "c3bc177aea4302f0891448e029ee306d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1101783, "upload_time": "2019-07-15T15:32:58", "url": "https://files.pythonhosted.org/packages/32/a8/def535c0d002fd1da95fcad7ddd5fea7151960304b5effbc695466f3af12/cedar-adfs-forked-1.2.0.tar.gz" } ] }