Alist项目中实现115网盘自定义客户端授权的方法
115网盘作为国内知名的云存储服务,其API授权机制一直是开发者关注的焦点。本文将详细介绍如何在Alist项目中实现使用自定义客户端进行115网盘授权的方法。
115网盘授权机制解析
115网盘采用OAuth 2.0授权框架,与阿里云OpenAPI类似,开发者可以通过注册应用获取AppID和AppKey来进行授权。这种机制允许开发者创建自己的客户端应用,而不是依赖官方提供的固定凭证。
授权流程主要包含以下几个关键步骤:
- 生成code_verifier和code_challenge
- 获取设备码和二维码内容
- 用户扫码确认授权
- 使用code_verifier换取access_token
实现自定义授权的技术方案
核心代码实现
以下是实现115网盘自定义授权的Python代码示例:
import requests
import hashlib
import base64
import secrets
import qrcode
from io import BytesIO
from PIL import Image
# 配置你的APP ID
APP_ID = "your_app_id_here"
# 115网盘API端点
DEVICE_CODE_URL = "https://passportapi.115.com/open/authDeviceCode"
ACCESS_TOKEN_URL = "https://passportapi.115.com/open/deviceCodeToToken"
def generate_code_verifier_and_challenge():
"""生成PKCE所需的code_verifier和code_challenge"""
code_verifier = secrets.token_urlsafe(64)
code_challenge = base64.urlsafe_b64encode(
hashlib.sha256(code_verifier.encode('utf-8')).digest()
).decode('utf-8').rstrip('=')
return code_verifier, code_challenge
def get_device_code(code_verifier, code_challenge):
"""获取设备授权码"""
headers = {'Content-Type': 'application/x-www-form-urlencoded'}
data = {
'client_id': APP_ID,
'code_challenge': code_challenge,
'code_challenge_method': 'sha256'
}
response = requests.post(DEVICE_CODE_URL, headers=headers, data=data)
response.raise_for_status()
return response.json()
授权流程详解
-
初始化阶段:生成PKCE(Proof Key for Code Exchange)所需的code_verifier和code_challenge。这是OAuth 2.0的安全增强机制,防止授权码被截获滥用。
-
获取设备码:向115网盘服务器请求设备授权码,服务器会返回包含二维码内容的数据。
-
用户交互:将二维码展示给用户,用户需要使用115官方客户端扫描并确认授权。
-
令牌交换:使用之前生成的code_verifier换取access_token,完成整个授权流程。
常见问题解决方案
在实现过程中,开发者可能会遇到"code_verifier验证失败"的错误。这通常由以下原因导致:
-
code_verifier不匹配:确保在获取设备码和交换令牌时使用相同的code_verifier。
-
编码问题:code_verifier和code_challenge的生成必须严格按照规范,特别注意URL安全的Base64编码。
-
超时问题:设备码通常有较短的有效期,如果用户未及时确认,需要重新发起流程。
集成到Alist项目的建议
要将此授权机制集成到Alist项目中,可以考虑以下架构:
-
前端界面:添加115自定义授权选项,提供二维码展示区域。
-
后端服务:实现授权码管理,包括存储和验证code_verifier。
-
令牌管理:将获取的access_token安全存储,并实现自动刷新机制。
-
错误处理:完善各种异常情况的处理逻辑,提供友好的用户提示。
通过这种方式,Alist用户可以灵活地使用自己的115客户端凭证,而不必依赖项目维护者提供的统一授权方案,既提高了安全性,也增加了使用的灵活性。
Kimi-K2.5Kimi K2.5 是一款开源的原生多模态智能体模型,它在 Kimi-K2-Base 的基础上,通过对约 15 万亿混合视觉和文本 tokens 进行持续预训练构建而成。该模型将视觉与语言理解、高级智能体能力、即时模式与思考模式,以及对话式与智能体范式无缝融合。Python00
GLM-4.7-FlashGLM-4.7-Flash 是一款 30B-A3B MoE 模型。作为 30B 级别中的佼佼者,GLM-4.7-Flash 为追求性能与效率平衡的轻量化部署提供了全新选择。Jinja00
VLOOKVLOOK™ 是优雅好用的 Typora/Markdown 主题包和增强插件。 VLOOK™ is an elegant and practical THEME PACKAGE × ENHANCEMENT PLUGIN for Typora/Markdown.Less00
PaddleOCR-VL-1.5PaddleOCR-VL-1.5 是 PaddleOCR-VL 的新一代进阶模型,在 OmniDocBench v1.5 上实现了 94.5% 的全新 state-of-the-art 准确率。 为了严格评估模型在真实物理畸变下的鲁棒性——包括扫描伪影、倾斜、扭曲、屏幕拍摄和光照变化——我们提出了 Real5-OmniDocBench 基准测试集。实验结果表明,该增强模型在新构建的基准测试集上达到了 SOTA 性能。此外,我们通过整合印章识别和文本检测识别(text spotting)任务扩展了模型的能力,同时保持 0.9B 的超紧凑 VLM 规模,具备高效率特性。Python00
KuiklyUI基于KMP技术的高性能、全平台开发框架,具备统一代码库、极致易用性和动态灵活性。 Provide a high-performance, full-platform development framework with unified codebase, ultimate ease of use, and dynamic flexibility. 注意:本仓库为Github仓库镜像,PR或Issue请移步至Github发起,感谢支持!Kotlin07
compass-metrics-modelMetrics model project for the OSS CompassPython00