Skip to main content

USTB Single Sign-On Authentication Library

Project description

USTB-SSO (Py)

USTB Single Sign-On Authentication Library (Python)
北京科技大学单点登录(SSO)身份认证实现库(Python)

This module is the Python implementation of USTB-SSO.
此模块是 USTB-SSO 项目的 Python 实现。

This project only supports Chinese docs. If you are an English user, feel free to contact us.

介绍 Intro

特点: 简单易用;自文档化;依赖最少原则;良好的类型注解;全面的错误反馈。

实现的功能

  • 发起认证:
    支持向北科大 SSO 服务器发起针对指定应用的身份认证请求;
  • 进行认证:
    支持使用微信二维码来完成身份认证;
  • 完成认证:
    支持在认证成功后,获取已被认证的客户端实例或 Cookie 实例。

使用方法 Usage

安装

要求 Python >= 3.8,且安装有 httpx 库(一个类似于 requests 的库)。使用 pip 安装:

pip install httpx ustb_sso

前置知识

要想实现通过 SSO 来北科大的某个指定的应用,需要先准备 3 个参数:

  1. 该应用的实体编号(entity_id);
  2. 该应用的认证终点 URL(redirect_uri);
  3. 该应用的内部状态名(state)。

我们已经在 ustb_sso.prefabs 中以常量的形式存储了部分已知应用的参数。如果您需要接入其他应用,请自行在网页中抓取 https://sso.ustb.edu.cn/idp/authCenter/authenticate 这个请求的请求参数来获得。

示例代码

以下代码演示了如何获取北科大 AI 助手(2025 年版)的令牌 Cookie。

from ustb_sso import HttpxAuthSession, prefabs

auth = HttpxAuthSession(**prefabs.CHAT_USTB_EDU_CN)  # ※

print("Starting authentication...")
auth.open_auth().use_wechat_auth().use_qr_code()

with open(f"qr.png", "wb") as f:
    f.write(auth.get_qr_image())  # ▲

print("Waiting for confirmation... Please scan the QR code")
pass_code = auth.wait_for_pass_code()

print("Validating...")
rsp = auth.complete_auth(pass_code)

print("Response status:", rsp.status_code)

cookie_name = "cookie_vjuid_login"
print("Cookie:", cookie_name, "=", auth.client.cookies[cookie_name])

当代码运行到 位置时,您需要使用微信来扫描文件夹中生成的 qr.png 图片中的二维码,并在微信上确认登录。

输出样例

Starting authentication...
Waiting for confirmation... Please scan the QR code
Validating...
Response status: 200
Cookie: cookie_vjuid_login = xxxxxxxx...

补充解释

代码的 位置使用了字典解包(**)操作符。它等价于:

auth = HttpxAuthSession(
    entity_id=prefabs.CHAT_USTB_EDU_CN["entity_id"],
    redirect_uri=prefabs.CHAT_USTB_EDU_CN["redirect_uri"],
    state=prefabs.CHAT_USTB_EDU_CN["state"]
)

这里的 prefabs.CHAT_USTB_EDU_CN 就是我们预设的应用参数。

auth.client 是一个 httpx.Client 实例(类似于 request.Session),用于存储 Cookie 等客户端数据。后续如果需要使用 Cookie 令牌去做其他的 API 请求,可以直接调用 auth.client 的相关方法。

开发指南 Dev Guide

如果您想对 USTB-SSO (Py) 进行开发,以下指引可能有所帮助。

开始开发

  1. 安装 Python;
  2. 安装依赖管理工具 Poetry 1.8;
  3. 克隆仓库到本地;
  4. 使用 Poetry 创建虚拟环境,并安装所有依赖项:
    poetry env use python
    poetry install -E httpx
    

测试

  1. 激活虚拟环境:
    • 在 VS Code 中选择虚拟环境中的 Python 解释器(推荐);
    • 或者,使用 poetry shell 命令进入虚拟环境。
  2. 运行测试代码:
    • 在 VS Code 中运行任务 Python: Test USTB-SSO(推荐);
    • 或者,使用 python <文件名> 命令来手动运行代码。
  3. 构建可发行文件:
    poetry build
    

许可证 Licensing

本项目基于 MIT 开源许可证,详情参见 License 页面。

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

ustb_sso-1.0.0.tar.gz (6.7 kB view details)

Uploaded Source

Built Distribution

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

ustb_sso-1.0.0-py3-none-any.whl (7.2 kB view details)

Uploaded Python 3

File details

Details for the file ustb_sso-1.0.0.tar.gz.

File metadata

  • Download URL: ustb_sso-1.0.0.tar.gz
  • Upload date:
  • Size: 6.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.5 CPython/3.8.10 Windows/10

File hashes

Hashes for ustb_sso-1.0.0.tar.gz
Algorithm Hash digest
SHA256 669f0916fe1b48e82a3942e21b23e39078be42a7bdf73b762d1ede6a714180d9
MD5 bd750e81256f3da551bcd2a45a3c8100
BLAKE2b-256 af3dfd7145afc49fb9ca62142c9a5a8fe3aad890e09826f41ef58e67639a4660

See more details on using hashes here.

File details

Details for the file ustb_sso-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: ustb_sso-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 7.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.5 CPython/3.8.10 Windows/10

File hashes

Hashes for ustb_sso-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c3665764a7754d4080502394b498a706191a48d673532bf821ec8ac56c5fe71d
MD5 170e71d15d1badbeec5ecaa9faeb5f73
BLAKE2b-256 29af9f5f9b24b0cf7384c69c4b04083ff734ebaa72218df9163d909973e12cc1

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