为Django提供的简单SSO
项目描述
文档
在setup.py文件中的REQUIREMENTS
查看额外的依赖项
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:由“请求令牌请求”返回的请求令牌。
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_SECRET 和 SIMPLE_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
项目详情
下载文件
下载您平台上的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。