登录 | 第三方登录 | 设计文档

3155 字
16 分钟
登录 | 第三方登录 | 设计文档

登录 | 第三方登录 | 设计文档#

本文档记录 GitHub、微信、QQ 三种第三方登录的完整流程、代码结构及多环境配置清单。


一、通用 OAuth2 授权码流程#

1.1 流程图#

sequenceDiagram participant User as 用户浏览器 participant Frontend as 前端 participant Gateway as Gateway(8080) participant Auth as Auth服务(10010) participant Redis as Redis participant System as System服务 participant OAuth as 第三方OAuth平台 Note over User, OAuth: 第一步:获取授权 URL Frontend->>Gateway: GET /api/auth/third-party/url?loginType=github Gateway->>Auth: 路由转发 (StripPrefix=1) Auth->>Auth: 生成随机 state (UUID) Auth->>Redis: 存储 state (third_party:state:{state} → loginType, TTL=10min) Auth-->>Auth: 拼接授权 URL Auth-->>Frontend: 返回授权 URL Frontend->>Frontend: 浏览器跳转到授权 URL Note over User, OAuth: 第二步:用户授权 User->>OAuth: 扫码 / 点击授权 OAuth->>OAuth: 用户确认授权 Note over User, Auth: 第三步:回调登录 OAuth-->>User: 302 重定向到 redirect_uri User->>Gateway: GET /api/auth/{platform}/callback?code=xxx&state=xxx Gateway->>Auth: 路由转发 (白名单放行) Auth->>Redis: 校验 state (防 CSRF) Auth->>Redis: 删除 state (防重放) Auth->>OAuth: POST tokenUri (用 code 换 access_token) OAuth-->>Auth: 返回 access_token Auth->>OAuth: GET userInfoUri (用 token 获取用户信息) OAuth-->>Auth: 返回用户信息 (id/nickname/avatar) Auth->>Auth: 转换为 SysUserApi (userName = "{platform}_{thirdPartyId}") Auth->>System: 查询是否已绑定 (getUserByThirdPartyId) alt 已绑定 System-->>Auth: 返回已有用户 else 未绑定 (首次登录) Auth->>System: 自动注册 (createUser) System-->>Auth: 注册成功 end Auth->>Auth: 生成 JWT Token Auth->>Auth: 写入 Cookie (access_token) Auth-->>User: 302 重定向到前端首页 User->>Frontend: 携带 Cookie 访问 Frontend->>Frontend: 读取 Cookie 中的 token,跳转首页

1.2 核心代码结构#

文件职责
OAuth2ClientConfig.javaOAuth2 客户端注册(配置各平台端点 URL)
ThirdPartyAuthServiceImpl.java第三方认证核心逻辑(state 校验、换 token、换用户信息、注册/登录)
OAuth2UserInfoStrategy.java策略接口(定义各平台统一行为)
GithubUserInfoStrategy.javaGitHub 策略实现
WeChatUserInfoStrategy.java微信策略实现
QQUserInfoStrategy.javaQQ 策略实现
AuthController.java回调入口(/{platform}/callback

1.3 关键技术点#

1. State 防 CSRF:每次生成授权 URL 时随机生成 state,存入 Redis,回调时校验,验证后删除(防重放)
2. 用户名前缀:github_123、wechat_oABC...、qq_xxx,防止不同平台 ID 冲突
3. 自动注册:首次登录的用户自动创建账号,无需手动注册
4. Cookie 传 Token:回调成功后将 access_token 写入 Cookie,302 重定向到前端
5. Gateway 白名单:回调路由必须免鉴权,否则 JWT 验证会拦截

二、GitHub 登录#

2.1 平台特性#

配置项
授权 URLhttps://github.com/login/oauth/authorize
Token URLhttps://github.com/login/oauth/access_token
用户信息 URLhttps://api.github.com/user
认证方式CLIENT_SECRET_BASIC (Basic Auth)
Scoperead:user
支持 localhost
内网穿透不需要

2.2 回调处理流程#

用户授权 → GitHub 302 重定向到 http://localhost:8080/api/auth/github/callback?code=xxx&state=xxx
→ AuthController.githubCallback() 接收
→ AuthService.login() 处理
→ ThirdPartyAuthServiceImpl.getUserByAuthCode()
1. validateState() 校验 state
2. getTokenResponse() 用 code 换 access_token
POST https://github.com/login/oauth/access_token
Header: Authorization: Basic base64(clientId:clientSecret)
Body: grant_type=authorization_code&code=xxx&redirect_uri=xxx
3. GithubUserInfoStrategy.getUserInfo() 获取用户信息
GET https://api.github.com/user
Header: Authorization: Bearer {access_token}
返回: { id: 883782250, login: "WuuMing", avatar_url: "..." }
4. processLoginOrRegister() 登录或注册
提取 thirdPartyId = "883782250"
查询 sys_user 表 where third_party_type='github' and third_party_id='883782250'
不存在则自动注册,userName = "github_883782250"
5. 生成 JWT Token,写入 Cookie,302 重定向到前端

2.3 GitHub 后台配置#

地址https://github.com/settings/developers → OAuth Apps → New OAuth App / 编辑已有应用

配置项开发环境生产环境
Application namezsk-testZSK Cloud
Homepage URLhttp://localhost:8080https://your-domain.com
Authorization callback URLhttp://localhost:8080/api/auth/github/callbackhttps://your-domain.com/api/auth/github/callback

2.4 Nacos 配置#

# zsk-auth-dev.yml (开发环境)
auth:
github:
client-id: Ov23liNgSavJA5vHz36r
client-secret: your-client-secret
redirect-uri: http://localhost:8080/api/auth/github/callback
# zsk-auth-prod.yml (生产环境)
auth:
github:
client-id: your-prod-client-id
client-secret: your-prod-client-secret
redirect-uri: https://your-domain.com/api/auth/github/callback
# zsk-gateway-dev.yml (Gateway 白名单 - 生产同理)
security:
ignore:
whites:
- /api/auth/github/callback

2.5 注意事项#

1. GitHub 支持 localhost 回调,开发环境无需内网穿透
2. client-secret 需要保密,不要提交到 Git
3. 生产环境必须使用 HTTPS 回调地址
4. Token URL 使用 Basic Auth 认证,client_id:client_secret 用 Base64 编码

三、微信登录(网站应用)#

3.1 平台特性#

配置项
授权 URLhttps://open.weixin.qq.com/connect/qrconnect
Token URLhttps://api.weixin.qq.com/sns/oauth2/access_token
用户信息 URLhttps://api.weixin.qq.com/sns/userinfo
认证方式CLIENT_SECRET_POST
Scopesnsapi_login
支持 localhost授权回调域需填域名,不支持 localhost
内网穿透开发环境需要(hosts 映射或 frp)

3.2 回调处理流程#

用户扫码 → 微信 302 重定向到 http://your-domain.com/api/auth/wechat/callback?code=xxx&state=xxx
→ AuthController.wechatCallback() 接收
→ AuthService.login() 处理
→ ThirdPartyAuthServiceImpl.getUserByAuthCode()
1. validateState() 校验 state
2. getTokenResponse() 用 code 换 access_token
GET https://api.weixin.qq.com/sns/oauth2/access_token
?appid=xxx&secret=xxx&code=xxx&grant_type=authorization_code
返回: { access_token: "xxx", openid: "xxx", ... }
3. WeChatUserInfoStrategy.getUserInfo() 获取用户信息
GET https://api.weixin.qq.com/sns/userinfo
?access_token=xxx&openid=xxx&lang=zh_CN
返回: { openid: "xxx", nickname: "微信昵称", headimgurl: "..." }
4. processLoginOrRegister() 登录或注册
userName = "wechat_{openid}"
5. 生成 JWT Token,写入 Cookie,302 重定向到前端

3.3 微信开放平台配置#

地址https://open.weixin.qq.com/ → 管理中心 → 网站应用 → 创建/编辑应用

配置项开发环境生产环境
应用名称zsk-devZSK Cloud
授权回调域dev.your-domain.comyour-domain.com
AppIDwx1234567890abcdef生产 AppID
AppSecret开发 Secret生产 Secret

3.4 Nacos 配置#

# zsk-auth-dev.yml (开发环境)
auth:
wechat:
app-id: wx1234567890abcdef
app-secret: your-app-secret
redirect-uri: http://dev.your-domain.com:8080/api/auth/wechat/callback
third-party:
redirect-url: http://dev.your-domain.com:3000
# zsk-auth-prod.yml (生产环境)
auth:
wechat:
app-id: your-prod-app-id
app-secret: your-prod-app-secret
redirect-uri: https://your-domain.com/api/auth/wechat/callback
third-party:
redirect-url: https://your-domain.com
# zsk-gateway-dev.yml (Gateway 白名单 - 生产同理)
security:
ignore:
whites:
- /api/auth/wechat/callback

3.5 开发环境绕过方案(无域名时)#

方案 A:hosts 映射(推荐)
1. 在 C:\Windows\System32\drivers\etc\hosts 添加:
127.0.0.1 dev.your-domain.com
2. 微信开放平台授权回调域填: dev.your-domain.com
3. Nacos redirect-uri 改为: http://dev.your-domain.com:8080/api/auth/wechat/callback
方案 B:内网穿透(frp/ngrok)
1. 启动 frp 将本地 8080 映射到公网域名
2. 微信开放平台授权回调域填: your-frp-domain.com
3. Nacos redirect-uri 改为: http://your-frp-domain.com/api/auth/wechat/callback
注意:微信网站应用不支持 localhost 作为授权回调域,必须使用域名

3.6 注意事项#

1. 微信开放平台需要企业认证才能创建网站应用
2. 授权回调域只需填域名,不需要端口和路径
3. 微信 access_token 有效期 2 小时,userinfo 接口需实时请求
4. 开发环境必须使用域名(hosts 或内网穿透),不能用 localhost

四、QQ 登录#

4.1 平台特性#

配置项
授权 URLhttps://graph.qq.com/oauth2.0/authorize
Token URLhttps://graph.qq.com/oauth2.0/token?fmt=json
用户信息 URLhttps://graph.qq.com/user/get_user_info
认证方式CLIENT_SECRET_POST
特殊处理需要单独调用 me 接口获取 OpenID
支持 localhost
内网穿透不需要

4.2 回调处理流程#

用户授权 → QQ 302 重定向到 http://localhost:8080/api/auth/qq/callback?code=xxx&state=xxx
→ AuthController.qqCallback() 接收
→ AuthService.login() 处理
→ ThirdPartyAuthServiceImpl.getUserByAuthCode()
1. validateState() 校验 state
2. getTokenResponse() 用 code 换 access_token
POST https://graph.qq.com/oauth2.0/token?fmt=json
?grant_type=authorization_code&code=xxx&client_id=xxx&client_secret=xxx&redirect_uri=xxx
返回: { access_token: "xxx", ... }
3. QQUserInfoStrategy.getUserInfo() 获取用户信息(两步)
步骤 1: 调用 me 接口获取 OpenID
GET https://graph.qq.com/oauth2.0/me?access_token=xxx
返回: callback( {"client_id":"xxx","openid":"xxx"} );
解析 JSONP 格式提取 openid
步骤 2: 调用 get_user_info 接口获取用户详情
GET https://graph.qq.com/user/get_user_info
?access_token=xxx&oauth_consumer_key=xxx&openid=xxx&fmt=json
返回: { ret: 0, nickname: "QQ昵称", figureurl_qq_2: "头像URL", ... }
4. processLoginOrRegister() 登录或注册
userName = "qq_{openid}"
nickName = attributes.get("nickname")
avatar = attributes.get("figureurl_qq_2") (100x100 高清)
5. 生成 JWT Token,写入 Cookie,302 重定向到前端

4.3 QQ 互联平台配置#

地址https://connect.qq.com/ → 应用管理 → 创建/编辑网站应用

配置项开发环境生产环境
应用名称zsk-devZSK Cloud
网站地址http://localhost:8080https://your-domain.com
网站回调域http://localhost:8080/api/auth/qq/callbackhttps://your-domain.com/api/auth/qq/callback
AppID100000000生产 AppID
AppKey开发 Key生产 Key

4.4 Nacos 配置#

# zsk-auth-dev.yml (开发环境)
auth:
qq:
app-id: 100000000
app-secret: your-app-secret
redirect-uri: http://localhost:8080/api/auth/qq/callback
# zsk-auth-prod.yml (生产环境)
auth:
qq:
app-id: your-prod-app-id
app-secret: your-prod-app-secret
redirect-uri: https://your-domain.com/api/auth/qq/callback
# zsk-gateway-dev.yml (Gateway 白名单 - 生产同理)
security:
ignore:
whites:
- /api/auth/qq/callback

4.5 注意事项#

1. QQ 互联支持 localhost 回调
2. QQ 响应格式不标准(text/plain/text/html),需自定义 MediaType 支持
3. QQ 需要先调 me 接口获取 OpenID(JSONP 格式),再调 get_user_info 获取详情
4. OpenID 是针对每个应用唯一的,同一用户在不同应用的 OpenID 不同

五、多环境配置清单#

5.1 需要配置的地方(完整清单)#

每个第三方平台在切换环境时,需要修改 4 个地方

序号配置位置文件/页面开发环境示例生产环境示例
1第三方平台后台GitHub/QQ/微信开发者中心localhost 地址生产域名地址
2Nacos 配置zsk-auth-dev.yml / zsk-auth-prod.ymllocalhost redirect-uri生产域名 redirect-uri
3Gateway 白名单zsk-gateway-dev.yml / zsk-gateway-prod.ymllocalhost 回调路径生产域名回调路径
4前端跳转地址Nacos third-party.redirect-urlhttp://localhost:3000https://your-domain.com

5.2 各平台配置对比表#

GitHub#

配置项开发环境生产环境
GitHub 后台 Callback URLhttp://localhost:8080/api/auth/github/callbackhttps://your-domain.com/api/auth/github/callback
Nacos redirect-urihttp://localhost:8080/api/auth/github/callbackhttps://your-domain.com/api/auth/github/callback
Nacos client-idOv23liNgSavJA5vHz36r生产 Client ID
Nacos client-secret开发 Secret生产 Secret
Nacos third-party.redirect-urlhttp://localhost:3000https://your-domain.com
Gateway 白名单/api/auth/github/callback/api/auth/github/callback

微信(网站应用)#

配置项开发环境生产环境
微信开放平台授权回调域dev.your-domain.comyour-domain.com
Nacos redirect-urihttp://dev.your-domain.com:8080/api/auth/wechat/callbackhttps://your-domain.com/api/auth/wechat/callback
Nacos app-idwx1234567890abcdef生产 AppID
Nacos app-secret开发 Secret生产 Secret
Nacos third-party.redirect-urlhttp://dev.your-domain.com:3000https://your-domain.com
Gateway 白名单/api/auth/wechat/callback/api/auth/wechat/callback

QQ#

配置项开发环境生产环境
QQ 互联网站回调域http://localhost:8080/api/auth/qq/callbackhttps://your-domain.com/api/auth/qq/callback
Nacos redirect-urihttp://localhost:8080/api/auth/qq/callbackhttps://your-domain.com/api/auth/qq/callback
Nacos app-id100000000生产 AppID
Nacos app-secret开发 Secret生产 Secret
Nacos third-party.redirect-urlhttp://localhost:3000https://your-domain.com
Gateway 白名单/api/auth/qq/callback/api/auth/qq/callback

5.3 完整 Nacos 配置模板#

# ============ 开发环境:zsk-auth-dev.yml ============
auth:
github:
client-id: Ov23liNgSavJA5vHz36r
client-secret: dev-github-secret
redirect-uri: http://localhost:8080/api/auth/github/callback
wechat:
app-id: wx1234567890abcdef
app-secret: dev-wechat-secret
redirect-uri: http://dev.your-domain.com:8080/api/auth/wechat/callback
qq:
app-id: 100000000
app-secret: dev-qq-secret
redirect-uri: http://localhost:8080/api/auth/qq/callback
third-party:
redirect-url: http://localhost:3000
# ============ 生产环境:zsk-auth-prod.yml ============
auth:
github:
client-id: prod-github-client-id
client-secret: ${GITHUB_CLIENT_SECRET}
redirect-uri: https://your-domain.com/api/auth/github/callback
wechat:
app-id: prod-wechat-app-id
app-secret: ${WECHAT_APP_SECRET}
redirect-uri: https://your-domain.com/api/auth/wechat/callback
qq:
app-id: prod-qq-app-id
app-secret: ${QQ_APP_SECRET}
redirect-uri: https://your-domain.com/api/auth/qq/callback
third-party:
redirect-url: https://your-domain.com

5.4 完整 Gateway 白名单模板#

# ============ zsk-gateway-dev.yml 或 zsk-gateway-prod.yml ============
security:
ignore:
whites:
# 第三方登录回调(免鉴权)
- /api/auth/github/callback
- /api/auth/wechat/callback
- /api/auth/qq/callback
- /api/auth/third-party/**
# 其他白名单
- /api/auth/login
- /api/auth/register
- /api/auth/captcha
- /api/auth/captcha/check
- /api/auth/public-key
- /api/auth/email/code/**
- /api/auth/magic-link/**

5.5 生产环境部署检查清单#

□ GitHub
□ 在 GitHub Settings → Developer settings → OAuth Apps 中配置生产回调地址
□ 使用生产环境的 Client ID 和 Client Secret
□ Nacos prod 配置中的 redirect-uri 改为 HTTPS 域名地址
□ 微信
□ 在微信开放平台配置生产授权回调域(只需域名)
□ 使用生产环境的 AppID 和 AppSecret
□ Nacos prod 配置中的 redirect-uri 改为 HTTPS 域名地址
□ 确认域名已完成 ICP 备案
□ QQ
□ 在 QQ 互联配置生产网站回调域
□ 使用生产环境的 AppID 和 AppKey
□ Nacos prod 配置中的 redirect-uri 改为 HTTPS 域名地址
□ Gateway
□ 确认 zsk-gateway-prod.yml 中回调路由在白名单中
□ 确认 Nginx 已配置 HTTPS 证书
□ 安全
□ 生产环境 Secret 使用环境变量/密钥管理服务,不写死在配置中
□ 生产环境全部使用 HTTPS
□ 确认 Cookie 的 Secure 标志已设置(代码中已设置 cookie.setSecure(true))
□ 前端
□ 确认 third-party.redirect-url 配置为生产环境前端地址
□ 前端已处理 Cookie 中的 token,能正确跳转

六、常见问题#

6.1 redirect_uri is not associated with this application#

原因:第三方平台后台配置的回调地址与实际请求地址不一致。

解决

  1. 确认 GitHub/QQ/微信开发者后台配置的 Callback URL 正确
  2. 确认 Nacos 配置中的 redirect-uri 与后台配置完全一致(包括协议、域名、路径)
  3. 重启 auth 服务使 Nacos 配置生效
  4. 确认 Gateway 路由转发正确(StripPrefix=1 后路径匹配)

6.2 微信开发环境无法使用 localhost#

原因:微信开放平台网站应用不支持 localhost 作为授权回调域。

解决

  • 方案 A:hosts 映射 127.0.0.1 dev.your-domain.com,回调域填 dev.your-domain.com
  • 方案 B:使用 frp/ngrok 内网穿透,映射到公网域名

6.3 回调后没有跳转到前端#

原因:回调方法返回 JSON 而非重定向。

解决:确认回调方法返回 ResponseEntity<Void> 并使用 302 重定向(代码中 handleThirdPartyCallback 已实现)。

6.4 生产环境是否需要内网穿透#

答案:不需要。
OAuth 回调是用户浏览器自己在跳转,不是第三方服务器访问你的服务。
- GitHub:支持 localhost,不需要穿透
- QQ:支持 localhost,不需要穿透
- 微信:需要域名(可用 hosts 映射),开发不需要穿透,生产用正式域名

6.5 不同平台用户的用户名会冲突吗#

答案:不会。
每个平台的用户名都带有平台前缀:
- GitHub 用户:github_883782250
- 微信用户:wechat_oABC123...
- QQ 用户:qq_xxx123...
即使同一人在不同平台授权,也会生成不同的账号。
如需绑定同一账号,需在用户中心实现"绑定第三方账号"功能。

七、前端对接说明#

7.1 前端发起登录#

// 1. 获取授权 URL
const response = await fetch('/api/auth/third-party/url?loginType=github')
const { data: authUrl } = await response.json()
// 2. 跳转到授权页面
window.location.href = authUrl

7.2 前端接收回调#

// 用户授权后,第三方平台 302 重定向到后端回调地址
// 后端处理完成后,302 重定向到前端首页,并设置 Cookie
// 前端页面加载时检查 Cookie
function getTokenFromCookie() {
const match = document.cookie.match(/access_token=([^;]+)/)
return match ? match[1] : null
}
const token = getTokenFromCookie()
if (token) {
// 存入 localStorage
localStorage.setItem('accessToken', token)
// 跳转首页
router.push('/dashboard')
}

7.3 后续请求携带 Token#

// 方式 1:从 localStorage 读取
const token = localStorage.getItem('accessToken')
fetch('/api/system/user/info', {
headers: { 'Authorization': `Bearer ${token}` }
})
// 方式 2:Cookie 自动携带(HttpOnly=false 时 JS 可读取)
// Cookie 设置了 path=/,同域请求自动携带

八、数据库相关#

8.1 用户表第三方登录字段#

用户表 sys_user 需要以下字段支持第三方登录:

字段类型说明
third_party_typeVARCHAR(20)第三方平台类型:github/wechat/qq
third_party_idVARCHAR(100)第三方平台用户唯一标识

8.2 查询逻辑#

-- 按第三方 ID 查询用户
SELECT * FROM sys_user
WHERE third_party_type = 'github'
AND third_party_id = '883782250';

九、代码文件清单#

文件路径说明
zsk-auth/.../AuthController.java回调入口(/{platform}/callback
zsk-auth/.../config/OAuth2ClientConfig.javaOAuth2 客户端注册配置
zsk-auth/.../service/impl/ThirdPartyAuthServiceImpl.java第三方认证核心服务
zsk-auth/.../service/impl/AuthServiceImpl.java登录分发逻辑(thirdPartyLogin)
zsk-auth/.../strategy/OAuth2UserInfoStrategy.java策略接口
zsk-auth/.../strategy/impl/GithubUserInfoStrategy.javaGitHub 策略
zsk-auth/.../strategy/impl/WeChatUserInfoStrategy.java微信策略
zsk-auth/.../strategy/impl/QQUserInfoStrategy.javaQQ 策略
init/nacos/dev/zsk-auth-dev.yml开发环境 Nacos 配置
init/nacos/dev/zsk-gateway-dev.yml开发环境 Gateway 配置(白名单)
init/nacos/prod/zsk-auth-prod.yml生产环境 Nacos 配置

文档版本:1.0 | 最后更新:2026-05-02

登录 | 第三方登录 | 设计文档
https://tblog.mmzhiku.xyz/posts/projects/projects-oauth2-third-party-login/
作者
MmzMing
发布于
2026-05-03
许可协议
CC BY-NC-SA 4.0

评论区

看板娘
公告
友链 互换友链

正在招募技术类博客友链,要求原创、稳定更新。点击了解更多。

查看详情
维护 服务器升级

本周日凌晨 2:00-4:00 进行服务器维护,期间站点可能短暂无法访问。

欢迎 关于我的介绍

欢迎来到我的博客,我是深耕java、python和react技术开发。热爱技术、持续学习,欢迎同好交流探讨,也欢迎大佬互换友链。

查看详情
音乐
封面

音乐

暂未播放

0:00
0:00
暂无歌词
标签
# AI 6 # 认证 5 # 安全 4 # 登录 3 # Skill 2 # Redis 2 # Bitmap 2 # 部署 2 # Java 2 # 并发编程 2 # 性能优化 2 # 前端 1 # 博客 1 # Prompt 1 # 工作流 1 # RAG 1 # Cloudflare 1 # 缓存设计 1 # 高性能 1 # Bot 1 # Umami 1 # Vercel 1 # 线程池 1 # 虚拟线程 1 # 分布式 1 # JWT 1 # OAuth2 1 # MinIO 1 # 文件存储 1 # 扫码登录 1 # WebSocket 1 # Agent 1 # Oracle 1 # 数据库 1
目录

隐私政策

更新日期: 2026/5/19
生效日期: 2026/5/19

导言#

MmzMing的知识库 是一款由 MmzMing(以下简称“我们”)提供的产品。您在使用我们的服务时,我们可能会收集和使用您的相关信息。我们希望通过本《隐私政策》向您说明,在使用我们的服务时,我们如何收集、使用、储存和分享这些信息,以及我们为您提供的访问、更新、控制和保护这些信息的方式。

本《隐私政策》与您所使用的 MmzMing的知识库 服务息息相关,希望您仔细阅读,在需要时,按照本《隐私政策》的指引,作出您认为适当的选择。本《隐私政策》中涉及的相关技术词汇,我们尽量以简明扼要的表述,并提供进一步说明的链接,以便您的理解。

您使用或继续使用我们的服务,即意味着同意我们按照本《隐私政策》收集、使用、储存和分享您的相关信息。

如对本《隐私政策》或相关事宜有任何问题,请通过 784774835@qq.com 与我们联系。

1. 我们收集的信息#

我们或我们的第三方合作伙伴提供服务时,可能会收集、储存和使用下列与您有关的信息。如果您不提供相关信息,可能无法注册成为我们的用户或无法享受我们提供的某些服务,或者无法达到相关服务拟达到的效果。

  • 个人信息:您在注册账户或使用我们的服务时,向我们提供的相关个人信息,例如电话号码、电子邮件等。
  • 日志信息:指您使用我们的服务时,系统可能通过 cookies、标识符及相关技术收集的信息,包括您的 设备信息浏览信息点击信息,并将该等信息储存为日志信息,为您提供个性化的用户体验、保障服务安全。您可以通过浏览器设置拒绝或管理 cookie、标识符或相关技术的使用。
  • 位置信息:指您开启设备定位功能并使用我们基于位置提供的相关服务时,收集的有关您位置的信息,包括:
    • 您通过具有定位功能的移动设备使用我们的服务时,通过 GPS 或 WiFi 等方式收集的您的地理位置信息;
    • 您可以通过关闭定位功能,停止对您的地理位置信息的收集。

2. 信息的存储#

2.1 信息存储的方式和期限#

我们会通过安全的方式存储您的信息,包括本地存储(例如利用 APP 进行数据缓存)、数据库和服务器日志。

一般情况下,我们只会在为实现服务目的所必需的时间内或法律法规规定的条件下存储您的个人信息。

2.2 信息存储的地域#

我们会按照法律法规规定,将境内收集的用户个人信息存储于中国境内。

目前我们不会跨境传输或存储您的个人信息。将来如需跨境传输或存储的,我们会向您告知信息出境的目的、接收方、安全保证措施和安全风险,并征得您的同意。

2.3 产品或服务停止运营时的通知#

当我们的产品或服务发生停止运营的情况时,我们将以推送通知、公告等形式通知您,并在合理期限内删除您的个人信息或进行匿名化处理,法律法规另有规定的除外。

3. 信息安全#

我们使用各种安全技术和程序,以防信息的丢失、不当使用、未经授权阅览或披露。例如,在某些服务中,我们将利用加密技术(例如 SSL)来保护您提供的个人信息。但请您理解,由于技术的限制以及可能存在的各种恶意手段,在互联网行业,即便竭尽所能加强安全措施,也不可能始终保证信息百分之百的安全。您需要了解,您接入我们的服务所用的系统和通讯网络,有可能因我们可控范围外的因素而出现问题。

4. 我们如何使用信息#

我们可能将在向您提供服务的过程之中所收集的信息用作下列用途:

  • 向您提供服务;
  • 在我们提供服务时,用于身份验证、客户服务、安全防范、诈骗监测、存档和备份用途,确保我们向您提供的产品和服务的安全性;
  • 帮助我们设计新服务,改善我们现有服务;
  • 使我们更加了解您如何接入和使用我们的服务,从而针对性地回应您的个性化需求,例如语言设定、位置设定、个性化的帮助服务和指示,或对您和其他用户作出其他方面的回应;
  • 向您提供与您更加相关的广告以替代普遍投放的广告;
  • 评估我们服务中的广告和其他促销及推广活动的效果,并加以改善;
  • 软件认证或管理软件升级;
  • 让您参与有关我们产品和服务的调查。

5. 信息共享#

目前,我们不会主动共享或转让您的个人信息至第三方,如存在其他共享或转让您的个人信息或您需要我们将您的个人信息共享或转让至第三方情形时,我们会直接或确认第三方征得您对上述行为的明示同意。

为了投放广告,评估、优化广告投放效果等目的,我们需要向广告主及其代理商等第三方合作伙伴共享您的部分数据,要求其严格遵守我们关于数据隐私保护的措施与要求,包括但不限于根据数据保护协议、承诺书及相关数据处理政策进行处理,避免识别出个人身份,保障隐私安全。

我们不会向合作伙伴分享可用于识别您个人身份的信息(例如您的姓名或电子邮件地址),除非您明确授权。

我们不会对外公开披露所收集的个人信息,如必须公开披露时,我们会向您告知此次公开披露的目的、披露信息的类型及可能涉及的敏感信息,并征得您的明示同意。

随着我们业务的持续发展,我们有可能进行合并、收购、资产转让等交易,我们将告知您相关情形,按照法律法规及不低于本《隐私政策》所要求的标准继续保护或要求新的控制者继续保护您的个人信息。

另外,根据相关法律法规及国家标准,以下情形中,我们可能会共享、转让、公开披露个人信息无需事先征得您的授权同意:

  • 与国家安全、国防安全直接相关的;
  • 与公共安全、公共卫生、重大公共利益直接相关的;
  • 犯罪侦查、起诉、审判和判决执行等直接相关的;
  • 出于维护个人信息主体或其他个人的生命、财产等重大合法权益但又很难得到本人同意的;
  • 个人信息主体自行向社会公众公开个人信息的;
  • 从合法公开披露的信息中收集个人信息的,如合法的新闻报道、政府信息公开等渠道。

6. 您的权利#

在您使用我们的服务期间,我们可能会视产品具体情况为您提供相应的操作设置,以便您可以查询、删除、更正或撤回您的相关个人信息,您可参考相应的具体指引进行操作。此外,我们还设置了投诉举报渠道,您的意见将会得到及时的处理。如果您无法通过上述途径和方式行使您的个人信息主体权利,您可以通过本《隐私政策》中提供的联系方式提出您的请求,我们会按照法律法规的规定予以反馈。

当您决定不再使用我们的产品或服务时,可以申请注销账户。注销账户后,除法律法规另有规定外,我们将删除或匿名化处理您的个人信息。

7. 变更#

我们可能适时修订本《隐私政策》的条款。当变更发生时,我们会在版本更新时向您提示新的《隐私政策》,并向您说明生效日期。请您仔细阅读变更后的《隐私政策》内容,若您继续使用我们的服务,即表示您同意我们按照更新后的《隐私政策》处理您的个人信息。

8. 未成年人保护#

我们鼓励父母或监护人指导未满十八岁的未成年人使用我们的服务。我们建议未成年人鼓励他们的父母或监护人阅读本《隐私政策》,并建议未成年人在提交的个人信息之前寻求父母或监护人的同意和指导。