Skip to content

Latest commit

 

History

History
109 lines (71 loc) · 2.92 KB

File metadata and controls

109 lines (71 loc) · 2.92 KB

OAuth认证指南

概述

MGit应用使用OAuth 2.0协议实现GitHub和Gitee的账号授权。本文档详细介绍了OAuth认证的使用方法、技术实现以及可能遇到的问题与解决方案。

授权流程

GitHub授权流程

  1. 在应用中点击"登录GitHub"按钮
  2. 选择使用内置浏览器或系统浏览器进行授权
  3. 登录GitHub账号(如果尚未登录)
  4. 授权应用访问您的GitHub仓库
  5. 授权成功后自动返回应用

Gitee授权流程

  1. 在应用中点击"登录Gitee"按钮
  2. 选择使用内置浏览器或系统浏览器进行授权
  3. 登录Gitee账号(如果尚未登录)
  4. 授权应用访问您的Gitee仓库
  5. 授权成功后自动返回应用

技术实现

内置浏览器

MGit使用PyQt5的WebEngine组件实现内置浏览器,主要特点包括:

  • 基于Chromium的渲染引擎
  • 完全整合到应用界面中
  • 资源自动清理,避免内存泄漏
  • 证书错误自动处理

OAuth回调服务器

应用在本地启动一个临时HTTP服务器用于接收OAuth回调:

  • 自动选择可用端口(8000, 8080, 9000, 9090等)
  • 支持HTTP协议(避免自签名证书问题)
  • 接收授权码并安全传递给应用

资源管理优化

为确保长时间运行不会出现资源泄漏,应用实现了以下优化:

  • WebEngine资源完全清理机制
  • 信号连接的安全断开处理
  • 授权完成后的定时自动关闭
  • 强制垃圾回收触发

安全考虑

授权范围

  • GitHub: 仅请求repo权限,用于访问仓库内容
  • Gitee: 仅请求projects, pull_requests, issues权限

令牌安全

  • 授权令牌使用Fernet对称加密算法本地加密存储
  • 加密密钥受操作系统用户账户保护
  • 应用不会将您的令牌发送到除GitHub/Gitee之外的任何服务器

常见问题与解决方案

授权窗口无法加载

可能原因:网络连接问题或WebEngine组件加载失败

解决方案

  1. 检查网络连接
  2. 尝试使用系统浏览器进行授权
  3. 确保正确安装了PyQtWebEngine

授权成功但应用无响应

可能原因:回调服务器端口被占用或防火墙阻止

解决方案

  1. 重启应用,它会自动选择其他可用端口
  2. 临时禁用防火墙或创建相应的例外规则

内置浏览器闪退

可能原因:WebEngine资源冲突或内存不足

解决方案

  1. 使用系统浏览器替代内置浏览器
  2. 重启应用后再次尝试
  3. 关闭其他占用大量内存的应用

高级配置

环境变量配置

可以通过环境变量预先配置OAuth客户端ID和密钥:

GITHUB_CLIENT_ID="your_github_client_id"
GITHUB_CLIENT_SECRET="your_github_client_secret"
GITEE_CLIENT_ID="your_gitee_client_id"
GITEE_CLIENT_SECRET="your_gitee_client_secret"

自定义授权服务器

如果需要使用自定义的Git服务(如企业版GitHub),可以通过应用设置进行配置。