divio / django-simple-sso

Other
307 stars 116 forks source link

================= django-simple-sso

|pypi| |build| |coverage|

Documentation

See REQUIREMENTS in the setup.py <https://github.com/divio/django-simple-sso/blob/master/setup.py>_ file for additional dependencies:

|python| |django|

Django Simple SSO Specification (DRAFT)

Terminology


Server

The server is a Django website that holds all the user information and authenticates users.

Client

The client is a Django website that provides login via SSO using the Server. It does not hold any user information.

Key

A unique key identifying a Client. This key can be made public.

Secret

A secret key shared between the Server and a single Client. This secret should never be shared with anyone other than the Server and Client and must not be transferred unencrypted.

Workflow


Requests


General

All requests have a signature and key parameter, see Security.

Request Token Request

Authorization Request

Authentication Request

Auth Token Verification Request

Security


Every request is signed using HMAC-SHA256. The signature is in the signature parameter. The signature message is the urlencoded, alphabetically ordered query string. The signature key is the Secret of the Client. To verify the signature the key paramater holding the key of the Client is also sent with every request from the Client to the Server.

Example

GET Request with the GET parameters key=bundle123 and the private key secret key: fbf6396d0fc40d563e2be3c861f7eb5a1b821b76c2ac943d40a7a63b288619a9

The User object


The User object returned by a successful Auth Token Verification Request does not contain all the information about the Django User, in particular, it does not contain the password.

The user object contains must contain at least the following data:

Implementation


On the server

On the client

Running Tests


You can run tests by executing::

virtualenv env
source env/bin/activate
pip install -r tests/requirements.txt
python setup.py test

.. |pypi| image:: https://badge.fury.io/py/django-simple.sso.svg :target: http://badge.fury.io/py/django-simple.sso .. |build| image:: https://travis-ci.org/divio/django-simple.sso.svg?branch=master :target: https://travis-ci.org/divio/django-simple.sso .. |coverage| image:: https://codecov.io/gh/divio/django-simple.sso/branch/master/graph/badge.svg :target: https://codecov.io/gh/divio/django-simple.sso

.. |python| image:: https://img.shields.io/badge/python-3.5+-blue.svg :target: https://pypi.org/project/django-simple.sso/ .. |django| image:: https://img.shields.io/badge/django-2.2,%203.0,%203.1-blue.svg :target: https://www.djangoproject.com/