Skip to main content

A Python SDK for CHU Central Authentication Service

Project description

CHUAuthSDK

CHU统一身份认证 Python SDK

废弃说明:根据相关限制,验证码自动识别功能已废弃。本SDK不再依赖 ddddocr,亦不会自动识别或完成验证码。

基于个资安全以及易触发安全验证之顾虑,不建议使用账密方式登录。

安装

从 PyPI 安装

pip install CHUAuthSDK

本地开发安装

pip install -r requirements.txt

快速开始

from CHUAuthSDK import CHUAuth, CaptchaRequiredError, UnboundAccountError

# 创建认证客户端
auth = CHUAuth(cookie_dir="cookies")

try:
    def save_qr(qr_image: bytes) -> None:
        with open("qr_login.png", "wb") as f:
            f.write(qr_image)
        print("请使用微信扫描 qr_login.png")

    # 推荐:微信扫码登录
    session = auth.login_qr(
        service_url="xxx",
        qr_callback=save_qr
    )
    
    # 获取用户信息
    user_info = auth.get_user_info()
    print(f"欢迎, {user_info['cn']}!")
    
    # 使用 session 访问需要认证的资源
    resp = session.get("xxx")
    print(resp.json())
    
except CaptchaRequiredError:
    # 当前验证码形式不再提供图片数据,SDK 仅抛出需要验证码的错误
    print("需要验证码,请使用支持验证码的新登录流程或稍后重试")

except UnboundAccountError:
    print("当前微信未绑定账号,请先完成账号绑定")
    
except Exception as e:
    print(f"登录失败: {e}")

API 文档

CHUAuth

初始化参数

参数 类型 默认值 说明
cas_url str xxx 统一身份认证服务器地址
cookie_dir Optional[str] None Cookie 存储目录,None 则不持久化。传入目录路径启用持久化,cookie 文件统一存放在该目录下,自动命名为 "cookies_{username}.json"。例如传入 "cookies" 会生成 "cookies/cookies_2021001.json"

登录方法

SDK 提供四种登录方式。由于相关限制,不再建议使用账密登录,推荐优先使用微信扫码登录。

1. login_qr(username=None, service_url=None, force_relogin=False, qr_timeout=120, qr_callback=None)

微信扫码登录。SDK 会从 CAS 登录页中的二维码 iframe 获取微信二维码图片数据,并通过 qr_callback(bytes) 传给调用方;保存、显示二维码由调用方完成。

参数:

  • username: 可选账号标识。传入后会优先读取 cookies_{username}.json
  • service_url: 可选业务系统回跳地址
  • force_relogin: 强制重新扫码登录
  • qr_timeout: 等待扫码确认的超时时间(秒)
  • qr_callback: 接收二维码图片 bytes 的回调函数

返回: requests.Session - 已认证的会话对象

示例:

auth = CHUAuth(cookie_dir="cookies", verbose=True)

def save_qr(qr_image: bytes) -> None:
    with open("qr_login.png", "wb") as f:
        f.write(qr_image)
    print("请使用微信扫描 qr_login.png")

session = auth.login_qr(
    service_url="xxx",
    qr_timeout=120,
    qr_callback=save_qr
)

如果微信尚未绑定账号,扫码确认后会抛出 UnboundAccountError

2. login(username, password, captcha=None, force_relogin=False)

直接传入账号密码登录。由于相关限制,不再建议使用该方式;保留该接口仅用于兼容旧流程。

参数:

  • username: 用户名(学工号/手机号)
  • password: 密码
  • captcha: 验证码(可选)
  • force_relogin: 强制重新登录

返回: requests.Session - 已认证的会话对象

示例:

auth = CHUAuth(cookie_dir="cookies")
session = auth.login("2021001", "password")
3. login_interactive()

CLI 交互式登录,SDK 自动提示用户输入账号密码。由于相关限制,不再建议使用该方式;推荐使用 login_qr()

返回: requests.Session - 已认证的会话对象

示例:

auth = CHUAuth(cookie_dir="cookies")
session = auth.login_interactive()  # 提示输入账号密码
4. login_batch(accounts_json)

批量登录多个账号。该方法仍基于账密登录;由于相关限制,不再建议使用。

参数:

  • accounts_json: JSON 字符串或 JSON 文件路径
    [
      {"username": "2021001", "password": "password1"},
      {"username": "2021002", "password": "password2"}
    ]
    

返回: Dict[str, Any] - 登录结果字典

{
    "2021001": {"success": True, "session": <Session>, "error": None},
    "2021002": {"success": False, "session": None, "error": "密码错误"}
}

示例:

auth = CHUAuth(cookie_dir="cookies")

# 传入 JSON 字符串
results = auth.login_batch('[{"username": "2021001", "password": "pwd"}]')

# 或传入 JSON 文件路径
results = auth.login_batch("accounts.json")

其他方法

get_user_info()

获取当前用户信息。

返回: Dict[str, Any] - 用户信息字典

get_cookies_dict()

获取 cookies 字典。

返回: Dict[str, str]

get_session_id()

获取 session ID。

返回: Optional[str]

logout()

登出并清除会话。

异常

AuthError

认证失败异常基类。

CaptchaRequiredError

需要验证码异常。该异常不携带验证码图片数据。

QRCodeError

二维码登录相关异常。

UnboundAccountError

微信扫码成功但未绑定账号时抛出,继承自 QRCodeError

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

chuauthsdk-1.1.0.tar.gz (11.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

chuauthsdk-1.1.0-py3-none-any.whl (12.2 kB view details)

Uploaded Python 3

File details

Details for the file chuauthsdk-1.1.0.tar.gz.

File metadata

  • Download URL: chuauthsdk-1.1.0.tar.gz
  • Upload date:
  • Size: 11.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.8.23

File hashes

Hashes for chuauthsdk-1.1.0.tar.gz
Algorithm Hash digest
SHA256 8332d93f39a96ffe0b0c63bb57d0ee6da42a7dd8248d365f6b0ea6feaf619088
MD5 ffe9efd8ffab44e22ad848e60544ad90
BLAKE2b-256 9c57c6b35f12d2f3614e288f56c685d5c9367dbf7e67403ffa498540ded319ac

See more details on using hashes here.

File details

Details for the file chuauthsdk-1.1.0-py3-none-any.whl.

File metadata

  • Download URL: chuauthsdk-1.1.0-py3-none-any.whl
  • Upload date:
  • Size: 12.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.8.23

File hashes

Hashes for chuauthsdk-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f2b847682d7893f2bed97d04dde4be7172eed53cbd2e9b37b8771e385c418e44
MD5 46862375349070de000a0527a09b7422
BLAKE2b-256 5b2ed0175a36b29adcbb62a78f51ea81a32959d71371819d27b711b2b53aedcf

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page