网安 SSO 客户端
示例见 sample.py
需要实现以下功能
- 提供通信接口
- 会校验请求头(加密传输)
- 接收用户的绑定/解绑
- 接收用户的登录校验
- 提供登录接口
- 不校验请求头
- 存储登录的 session、cookie
- 定期检查当前用户的登录状态
- token 是否仍然存活
- 退出时向SSO发通知
实现描述
此节点会描述:当系统需要接入时,功能实现的细节。
应用内需要提供以下内个地址:
- 通信接口地址 用于处理应用与SSO间数据交换的地址
- 登录接口地址 用于处理应用登录状态(一般用于将登录信息写入 session/cookie),完成后应当转到 主页地址
- 主页地址 登录接口地址 处理完成后,需要跳转到的地址
- 登录地址 登录请求失败或接口处理失败后的跳转地址
提供通信接口
from wangankeji_sso.client import AbstractSsoRequestHandler, SsoToken, SsoErrorCodes
from typing import Optional, List
class MySsoRequestHandler(AbstractSsoRequestHandler):
def get_user(self, user_id: str) -> Optional[dict]:
"""
可选实现
"""
pass
def get_all_users(self) -> List[dict]:
"""
若应用内存在用户体系
并且:
1. 需要进行用户绑定(校验用户名密码)
2. 需要通过此系统校验登录(校验用户是否可用)
那么必须实现此接口
"""
# 数据结构:
# [{
# 'uid': 用户ID,
# 'uname': 用户名,
# 'user_rid': 用户角色ID列表,多个ID使用逗号分隔,
# 'ext': []
# }]
pass
def get_role(self, role_id: str) -> Optional[dict]:
"""
可选实现
"""
pass
def get_all_roles(self) -> List[dict]:
"""
若应用内存在用户体系
并且:
1. 需要进行用户绑定(校验用户名密码)
2. 需要通过此系统校验登录(校验用户是否可用)
那么必须实现此接口
"""
# 数据结构:
# [{
# 'rid': 角色ID,
# 'rname': 角色名,
# 'ext': []
# }]
pass
def do_login(self, token: SsoToken) -> SsoErrorCodes:
"""
进行用户校验(主要是用户状态的校验,比如:用户已经被删除,用户被禁用等)
"""
return SsoErrorCodes.NONE
def do_logout(self, token: SsoToken):
"""
可选实现
"""
pass
def do_bind(self, sso_uid: str, app_uid: str, app_uname: str, password: str) -> SsoErrorCodes:
"""
进行用户校验
1. 用户密码是否正确
2. 用户状态的校验,比如:用户已经被删除,用户被禁用等
"""
return SsoErrorCodes.NONE
def do_unbind(self, sso_uid: str, app_uid: str, app_uname: str) -> SsoErrorCodes:
"""
可选实现
"""
return SsoErrorCodes.NONE
实例化客户端
from wangankeji_sso.client import Sso, SsoOption
option = SsoOption()
# 应用的 APPID
# option.app_id = SSO_APP_ID
# SSO 的通信地址
# option.sso_url = SSO_URL
# SSO RSA 公钥(注意:此公钥仅可用于单一应用,多个应用无法通用)
# option.sso_public_key = SSO_PUB_KEY
# 应用RSA私钥
# option.app_private_key = APP_PRIV_KEY
sso = Sso(option, MySsoRequestHandler())
登录接口
示例如下:
from wangankeji_sso.client import SsoToken
from wangankeji_sso.client.utils import Rsa
def post(request, token: str, main_url: str, login_url: str):
"""
:param request: 请求对象
:param token: 使用SSO公钥加密的TOKEN
:param main_url: 主页地址
:param login_url: 登录页地址
:return:
"""
try:
# 解密出明文的 token
clear_token = SsoToken.parse(Rsa.decrypt(token, options.APP_PRIV_KEY))
if not clear_token:
raise Exception('TOKEN 数据无效')
except Exception as ex:
return HttpResponse('无法解码 TOKEN')
# 使用 token,设置当前的登录状态
try:
# 应用内的登录流程
# 添加一个登录方式的标记
session['login-by-wa-sso'] = 1
session['wa-sso-token'] = str(clear_token)
redirect_url = main_url
except Exception as ex:
redirect_url = login_url
return Redirect(redirect_url)
检查登录状态
建议在应用的中间件上,添加登录状态的的检查。(为了减轻资源消耗,建议缓存检查结果)
if session.get('login-by-wa-sso') == 1:
# 是从 sso 登录的
token = session.get('wa-sso-token')
# sso 来自客户端实例
if not sso.client.check_login(token):
session.remove('login-by-wa-sso')
session.remove('wa-sso-token')
return HttpResponse('登录已经超时')
Metadata
Release files for wangankeji-sso 1.5.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| wangankeji_sso-1.5.1.tar.gz | 16.3 kB | Without provenance | Details for wangankeji_sso-1.5.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| wangankeji_sso-1.5.1-py3-none-any.whl | Python 3 | none | any | Details for wangankeji_sso-1.5.1-py3-none-any.whl |
Total release size: 34.3 kB
Release files / wangankeji_sso-1.5.1.tar.gz
| Download URL | wangankeji_sso-1.5.1.tar.gz |
|---|---|
| Size | 16.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
08619e61f62da5158936336e2dd3261cfb6d4dceaa42d39f25bceb56ce4d89eb
|
|
BLAKE2b-256 checksum How to use checksums |
41d19a5bb54fb7ddfd3b57ecdd1f8e2ea4f295549e93463947db072a75e329a0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/1.15.0 pkginfo/1.8.2 requests/2.27.1 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.63.0 CPython/3.7.4
|
Release files / wangankeji_sso-1.5.1-py3-none-any.whl
| Download URL | wangankeji_sso-1.5.1-py3-none-any.whl |
|---|---|
| Size | 18.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
52d9c8a63803dc50d7058805064e10474274b5a6ca9097d242668d6ea9ba89e4
|
|
BLAKE2b-256 checksum How to use checksums |
1850e6b3bf110970e02e558a2c5f36818f39b7001a09dcbcc02dd0b1dc1e5a39
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/1.15.0 pkginfo/1.8.2 requests/2.27.1 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.63.0 CPython/3.7.4
|
Security for wangankeji-sso 1.5.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.