跳转到主要内容

为Django提供的简单SSO

项目描述

pypi build coverage

文档

setup.py文件中的REQUIREMENTS查看额外的依赖项

python django

Django Simple SSO规范(草案)

术语

服务器

服务器是一个包含所有用户信息和验证用户的Django网站。

客户端

客户端是一个通过使用服务器提供SSO登录的Django网站。它不保存任何用户信息。

密钥

一个唯一密钥,用于标识一个客户端。这个密钥可以是公开的。

密钥

服务器和单个客户端之间共享的密钥。此密钥绝不应与服务器和客户端之外的人共享,且必须加密传输。

工作流程

  • 用户通过点击“登录”按钮来登录客户端。初始请求的URL可以使用“next” GET参数传递。

  • 客户端的Python代码向服务器发送HTTP请求以请求认证令牌,这被称为“请求令牌请求”。

  • 服务器返回一个“请求令牌”。

  • 客户端使用“请求令牌”将用户重定向到服务器上的一个视图,这是“授权请求”。

  • 如果用户未登录到服务器,则会提示其登录。

  • 用户被重定向到客户端,包括“请求令牌”和“认证令牌”,这是“认证请求”。

  • 客户端的Python代码向服务器发送HTTP请求以验证“认证令牌”,这被称为“认证令牌验证请求”。

  • 如果“认证令牌”有效,服务器返回一个序列化的Django用户对象。

  • 客户端使用从服务器收到的Django用户登录用户。

请求

通用

所有请求都有一个“签名”和“密钥”参数,请参阅“安全”部分。

请求令牌请求

  • 客户端:Python

  • 目标:服务器

  • 方法:GET

  • 额外参数:无

  • 响应

    • 200:一切正常,响应体是一个URL编码的查询字符串,其中包含“request_token”键,包含请求令牌以及签名。

    • 400:无效请求(缺少GET参数)

    • 403:禁止(无效签名)

授权请求

  • 客户端:浏览器(用户)

  • 目标:服务器

  • 方法:GET

  • 额外参数

    • request_token

  • 响应

    • 200:一切正常,提示用户登录或继续。

    • 400:无效请求(缺少GET参数)

    • 403:禁止(无效请求令牌)

认证请求

  • 客户端:浏览器(用户)

  • 目标:客户端

  • 方法:GET

  • 额外参数

    • request_token:由“请求令牌请求”返回的请求令牌。

    • auth_token:由“授权请求”生成的认证令牌。

  • 响应

    • 200:一切正常,用户现在已登录。

    • 400:无效请求(缺少GET参数)

    • 403:禁止(无效请求令牌)

认证令牌验证请求

  • 客户端:Python

  • 目标:服务器

  • 方法:GET

  • 额外参数

    • auth_token:由“认证请求”获得的认证令牌。

  • 响应

    • 200:一切正常,响应体是一个URL编码的查询字符串,其中包含“user”键,它是要创建的Django用户的JSON序列化表示以及签名。

安全

每个请求都使用 HMAC-SHA256 进行签名。签名在 signature 参数中。签名消息是经过 URL 编码且按字母顺序排序的查询字符串。签名密钥是 客户端密钥。为了验证签名,key 参数(包含 客户端密钥)也随每个从 客户端服务器 的请求一起发送。

示例

带有 GET 参数 key=bundle123 和私钥 secret key 的 GET 请求:fbf6396d0fc40d563e2be3c861f7eb5a1b821b76c2ac943d40a7a63b288619a9

用户对象

成功执行 身份验证令牌验证请求 返回的用户对象不包含 Django 用户的所有信息,特别是它不包含密码。

用户对象必须至少包含以下数据

  • username:该用户的唯一用户名。

  • email:该用户的电子邮件。

  • first_name:该用户的第一个名字,此字段是必需的,但可能为空。

  • last_name:该用户的姓氏,此字段是必需的,但可能为空。

  • is_staff:此用户能否访问 客户端 上的 Django 管理员?

  • is_superuser:此用户是否具有对 客户端 的超级用户访问权限?

  • is_active:用户是否活跃?

实现

在服务器上

  • simple_sso.sso_server 添加到 INSTALLED_APPS

  • 创建 simple_sso.sso_server.server.Server 的一个实例(可能是子类的实例),并将该实例的 get_urls 方法的返回值包含到您的 URL 模式。

在客户端

  • 服务器 上创建 simple_sso.sso_server.models.Consumer 的新实例。

  • 添加 SIMPLE_SSO_SECRETSIMPLE_SSO_KEY 设置,这些设置由 服务器simple_sso.sso_server.models.Client 模型提供。

  • 添加 SIMPLE_SSO_SERVER 设置,该设置是指向 服务器simple_sso.sso_server.urls 的绝对 URL,其中包含在 服务器 上的 include。

  • 在客户端的某个位置添加 simple_sso.sso_client.urls 模式。

运行测试

您可以通过执行以下命令来运行测试:

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

项目详情


下载文件

下载您平台上的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。

源代码发行版

django-simple-sso-1.2.0.tar.gz (14.9 kB 查看哈希值)

上传时间 源代码

构建发行版

django_simple_sso-1.2.0-py3-none-any.whl (17.4 kB 查看哈希值)

上传时间 Python 3

由以下提供支持