Skip to main content

网安 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)

Source distribution for wangankeji-sso 1.5.1
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)

Table of built distributions (wheels) for wangankeji-sso 1.5.1
File Interpreter ABI Platform Actions
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.

Release history Release notifications | RSS feed

This release

1.5.1 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page