# Django Simple SAML
Django app to manage SAML Identity Providers
## Version support
This app support Django 3.2+ and Python 3.8+.
## Background
This library builds on top of `social-auth-app-django` and
`python3-saml`, which together handle the heavy lifting of a SAML
authentication flow. It assumes that you are building a service that
will act as the Service Provider (SP) in the flow, and that you will be
integrating with a number of external Identity Providers (IdP) for user
authentication.
The core change to those libraries that this package adds is a new
`SAMLAuth` backend called `SimpleSAMLAuth` that reads in IdP data from a
model (i.e. the database) rather than using the settings config dict
`SOCIAL_AUTH_SAML_ENABLED_IDPS`.
The reason for this is to make it easy to update / test new IdPs on a
live environment without having to deploy. If you are running a platform
that offers SSO to clients as a feature, having to embed their IdP
details in the settings (which also requires a redeployment) isn't a
practical option.
The IdP data is input via the Django admin site.
## Settings
This package relies on the existing `python-social-auth` settings. See
their documentation for details, or refer to the `demo.settings.base`
module for an example.
## Configuration
Click this button to deploy to Heroku:
[![Deploy](https://www.herokucdn.com/deploy/button.svg)](https://heroku.com/deploy)
You must supply three SAML settings that should be available from your
test IdP provider. If you have a Google Workspace account, that can be
used - see https://admin.google.com/ac/security/ssocert for details.
## Local install & setup
If you are having problems installing `xmlsec` locally, try this:
https://github.com/xmlsec/python-xmlsec/issues/254
## DISCLAIMER
The demo app demonstrate SSO using SAML2.0, which means it's _destined_
(but not designed) to be used in security-conscious enterprise
environments. It is a **demonstration** only - it should NOT BE TRUSTED,
and you do so at YOUR OWN RISK.
**Do not deploy the demo into a secure environment, and do not connect
it to a real IdP.**
Raw data
{
"_id": null,
"home_page": "https://github.com/yunojuno/django-simple-saml",
"name": "django-simple-saml",
"maintainer": "YunoJuno",
"docs_url": null,
"requires_python": ">=3.8,<4.0",
"maintainer_email": "code@yunojuno.com",
"keywords": "",
"author": "YunoJuno",
"author_email": "code@yunojuno.com",
"download_url": "https://files.pythonhosted.org/packages/25/f0/733055dda16c9fe6d85545a1d1e1c64314677325804dafd9521a3d0c0150/django_simple_saml-0.2.0.tar.gz",
"platform": null,
"description": "# Django Simple SAML\n\nDjango app to manage SAML Identity Providers\n\n## Version support\n\nThis app support Django 3.2+ and Python 3.8+.\n\n## Background\n\nThis library builds on top of `social-auth-app-django` and\n`python3-saml`, which together handle the heavy lifting of a SAML\nauthentication flow. It assumes that you are building a service that\nwill act as the Service Provider (SP) in the flow, and that you will be\nintegrating with a number of external Identity Providers (IdP) for user\nauthentication.\n\nThe core change to those libraries that this package adds is a new\n`SAMLAuth` backend called `SimpleSAMLAuth` that reads in IdP data from a\nmodel (i.e. the database) rather than using the settings config dict\n`SOCIAL_AUTH_SAML_ENABLED_IDPS`.\n\nThe reason for this is to make it easy to update / test new IdPs on a\nlive environment without having to deploy. If you are running a platform\nthat offers SSO to clients as a feature, having to embed their IdP\ndetails in the settings (which also requires a redeployment) isn't a\npractical option.\n\nThe IdP data is input via the Django admin site.\n\n## Settings\n\nThis package relies on the existing `python-social-auth` settings. See\ntheir documentation for details, or refer to the `demo.settings.base`\nmodule for an example.\n\n## Configuration\n\nClick this button to deploy to Heroku:\n\n[![Deploy](https://www.herokucdn.com/deploy/button.svg)](https://heroku.com/deploy)\n\nYou must supply three SAML settings that should be available from your\ntest IdP provider. If you have a Google Workspace account, that can be\nused - see https://admin.google.com/ac/security/ssocert for details.\n\n## Local install & setup\n\nIf you are having problems installing `xmlsec` locally, try this:\nhttps://github.com/xmlsec/python-xmlsec/issues/254\n\n## DISCLAIMER\n\nThe demo app demonstrate SSO using SAML2.0, which means it's _destined_\n(but not designed) to be used in security-conscious enterprise\nenvironments. It is a **demonstration** only - it should NOT BE TRUSTED,\nand you do so at YOUR OWN RISK.\n\n**Do not deploy the demo into a secure environment, and do not connect\nit to a real IdP.**\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Django app for managing multiple SAML Identity Providers.",
"version": "0.2.0",
"project_urls": {
"Documentation": "https://github.com/yunojuno/django-simple-saml",
"Homepage": "https://github.com/yunojuno/django-simple-saml",
"Repository": "https://github.com/yunojuno/django-simple-saml"
},
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "588e2eca8379f86e750da3d31509f0136ab885f11e5c72510bbda45af56f987d",
"md5": "76482d112c59868d2bd86b5eccd42cfb",
"sha256": "1d7718267c37101e81b20f544d9689981cbe668cddc24ab8986a3c84c37fc1cc"
},
"downloads": -1,
"filename": "django_simple_saml-0.2.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "76482d112c59868d2bd86b5eccd42cfb",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8,<4.0",
"size": 10096,
"upload_time": "2023-11-13T10:36:26",
"upload_time_iso_8601": "2023-11-13T10:36:26.596538Z",
"url": "https://files.pythonhosted.org/packages/58/8e/2eca8379f86e750da3d31509f0136ab885f11e5c72510bbda45af56f987d/django_simple_saml-0.2.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "25f0733055dda16c9fe6d85545a1d1e1c64314677325804dafd9521a3d0c0150",
"md5": "7d1ecc7fe0cd3f0ba15210a8f1205836",
"sha256": "0c6498404169756c91604c7520c4c482bcadca692ec3897fe8de5ff5847fa96b"
},
"downloads": -1,
"filename": "django_simple_saml-0.2.0.tar.gz",
"has_sig": false,
"md5_digest": "7d1ecc7fe0cd3f0ba15210a8f1205836",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8,<4.0",
"size": 8332,
"upload_time": "2023-11-13T10:36:28",
"upload_time_iso_8601": "2023-11-13T10:36:28.367389Z",
"url": "https://files.pythonhosted.org/packages/25/f0/733055dda16c9fe6d85545a1d1e1c64314677325804dafd9521a3d0c0150/django_simple_saml-0.2.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-11-13 10:36:28",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "yunojuno",
"github_project": "django-simple-saml",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"requirements": [
{
"name": "asgiref",
"specs": [
[
"==",
"3.7.2"
]
]
},
{
"name": "backports-zoneinfo",
"specs": [
[
"==",
"0.2.1"
]
]
},
{
"name": "certifi",
"specs": [
[
"==",
"2023.7.22"
]
]
},
{
"name": "cffi",
"specs": [
[
"==",
"1.16.0"
]
]
},
{
"name": "charset-normalizer",
"specs": [
[
"==",
"3.3.2"
]
]
},
{
"name": "cryptography",
"specs": [
[
"==",
"41.0.5"
]
]
},
{
"name": "defusedxml",
"specs": [
[
"==",
"0.7.1"
]
]
},
{
"name": "dj-database-url",
"specs": [
[
"==",
"2.1.0"
]
]
},
{
"name": "django",
"specs": [
[
"==",
"4.2.7"
]
]
},
{
"name": "gunicorn",
"specs": [
[
"==",
"21.2.0"
]
]
},
{
"name": "idna",
"specs": [
[
"==",
"3.4"
]
]
},
{
"name": "isodate",
"specs": [
[
"==",
"0.6.1"
]
]
},
{
"name": "lxml",
"specs": [
[
"==",
"4.9.3"
]
]
},
{
"name": "oauthlib",
"specs": [
[
"==",
"3.2.2"
]
]
},
{
"name": "packaging",
"specs": [
[
"==",
"23.2"
]
]
},
{
"name": "psycopg2-binary",
"specs": [
[
"==",
"2.9.9"
]
]
},
{
"name": "pycparser",
"specs": [
[
"==",
"2.21"
]
]
},
{
"name": "pyjwt",
"specs": [
[
"==",
"2.8.0"
]
]
},
{
"name": "python3-openid",
"specs": [
[
"==",
"3.2.0"
]
]
},
{
"name": "python3-saml",
"specs": [
[
"==",
"1.16.0"
]
]
},
{
"name": "requests-oauthlib",
"specs": [
[
"==",
"1.3.1"
]
]
},
{
"name": "requests",
"specs": [
[
"==",
"2.31.0"
]
]
},
{
"name": "six",
"specs": [
[
"==",
"1.16.0"
]
]
},
{
"name": "social-auth-app-django",
"specs": [
[
"==",
"5.4.0"
]
]
},
{
"name": "social-auth-core",
"specs": [
[
"==",
"4.5.0"
]
]
},
{
"name": "sqlparse",
"specs": [
[
"==",
"0.4.4"
]
]
},
{
"name": "typing-extensions",
"specs": [
[
"==",
"4.8.0"
]
]
},
{
"name": "tzdata",
"specs": [
[
"==",
"2023.3"
]
]
},
{
"name": "urllib3",
"specs": [
[
"==",
"2.0.7"
]
]
},
{
"name": "whitenoise",
"specs": [
[
"==",
"6.6.0"
]
]
},
{
"name": "xmlsec",
"specs": [
[
"==",
"1.3.13"
]
]
}
],
"tox": true,
"lcname": "django-simple-saml"
}