第三方登录是一种常见的身份验证机制,允许用户使用他们在其他平台(如社交媒体、电子邮件服务或开发平台)的账号来登录你的应用或网站,而不需要创建新的用户名和密码。这种方式不仅简化了用户的登录过程,还提高了用户体验和安全性。

第三方登录的主要特点

简化注册和登录:

用户无需创建新的账户,只需使用已有的第三方账户即可快速登录。

减少了用户忘记密码和管理多个账户的问题。

提高安全性:

用户的密码不会存储在你的系统中,减少了密码泄露的风险。

第三方平台通常有更严格的安全措施来保护用户数据。

增加用户信任:

用户对知名第三方平台的信任度较高,使用这些平台的账号登录可以增加用户对你的应用或网站的信任

第三方登录(Gitee)

  1. 注册应用

    在Gitee开发者平台注册一个应用,获取client_id和client_secret

    配置回调地址(callback url),这是用户授权后将被重定向到的地址

  2. 引导用户到授权页面

    构建一个授权请求url,引导用户到gitee的授权页面

    请求url格式如下

    https://gitee.com/oauth/authorize?client_id={client_id}&redirect_uri={redirect_uri}&response_type=code
    
    #client_id: 你的应用 ID。
    #redirect_uri: 回调地址,必须与应用配置中的回调地址一致。
    #response_type: 响应类型,通常是 code。
    #scope: 请求的权限范围,例如 user_info。
  3. 用户授权

    用户点击链接后会被重定向到gitee的授权页面

    用户选择是否授权你的应用访问其数据

    如果用户同意授权,gitee将会重定向回你配置的回调地址,并附带一个授权码(code)

  4. 获取访问令牌

    使用授权码(code)向gitee发送请求,获取访问令牌(access_token)

    请求url格式如下

    https://gitee.com/oauth/token?grant_type=authorization_code&code={code}&client_id={client_id}&redirect_uri={redirect_uri}&client_secret={client_secret}
  5. 使用访问令牌

    获取到access_token后,你可以使用它来访问gitee api 获取用户信息或其它资源

    例如获取用户信息url

    https://gitee.com/api/v5/user?access_token=7be75844c5439749f367c27cdbb96790

新建应用

gitee oauth

OAuth2 获取 AccessToken 认证步骤

** 授权码模式**

应用通过 浏览器 或 Webview 将用户引导到码云三方认证页面上( GET请求 )

https://gitee.com/oauth/authorize?client_id={client_id}&redirect_uri={redirect_uri}&response_type=code
``
用户对应用进行授权
注意: 如果之前已经授权过的需要跳过授权页面,需要在上面第一步的 URL 加上 scope 参数,且 scope 的值需要和用户上次授权的勾选的一致。如用户在上次授权了user_info、projects以及pull_requests。则步骤A 中 GET 请求应为:
```python
https://gitee.com/oauth/authorize?client_id={client_id}&redirect_uri={redirect_uri}&response_type=code&scope=user_info%20projects%20pull_requests

码云认证服务器通过回调地址{redirect_uri}将 用户授权码 传递给 应用服务器 或者直接在 Webview 中跳转到携带 用户授权码的回调地址上,Webview 直接获取code即可({redirect_uri}?code=abc&state=xyz)

应用服务器 或 Webview 使用 access_token API 向 码云认证服务器发送post请求传入 用户授权码 以及 回调地址( POST请求 )

注:请求过程建议将 client_secret 放在 Body 中传值,以保证数据安全。

https://gitee.com/oauth/token?grant_type=authorization_code&code={code}&client_id={client_id}&redirect_uri={redirect_uri}&client_secret={client_secret}

码云认证服务器返回 access_token

应用通过 access_token 访问 Open API 使用用户数据。

当 access_token 过期后(有效期为一天),你可以通过以下 refresh_token 方式重新获取 access_token( POST请求 )

https://gitee.com/oauth/token?grant_type=refresh_token&refresh_token={refresh_token}

注意:如果获取 access_token 返回 403,可能是没有设置User-Agent的原因。

工具类

third_login = {
'gitee':'Gitee'
}
# 封装工厂类
class SimpleFactory:
@staticmethod
def product(name):
return eval(third_login[name]+"()") class Gitee:
def __init__(self):
self.redirect_uri = 'http://localhost:5000/gitee_back/'
self.client_id = 'db129dabb36711081dc7273f1cb174d051a68eb4f8e041ecda32b7d2dcb60203'
self.client_secret = '7d4d60b0c9b2d89e04ddf802a32a103768976143f4ede832645b7bc442cbf7ed'
# token
self.token_api = 'https://gitee.com/oauth/token' #获取三方登录链接
def get_url(self):
return f"https://gitee.com/oauth/authorize?client_id={self.client_id}&redirect_uri={self.redirect_uri}&response_type=code" # 获取用户信息
def get_info(self, code):
# 换token res = requests.post(
f"https://gitee.com/oauth/token?grant_type=authorization_code&code={code}&client_id={self.client_id}&redirect_uri={self.redirect_uri}&client_secret={self.client_secret}") token = res.json()["access_token"]
# 获取用户信息
res = requests.get(f"https://gitee.com/api/v5/user?access_token={token}")
name = res.json()["name"] avatar_url = res.json()["avatar_url"] return name,avatar_url

视图层


# 回调
class GiteeBack(MethodView):
# 回调接口
def get(self):
code = request.args.get('code', None) gitee = SimpleFactory.product('gitee')
data = gitee.get_info(code) return jsonify({'code':Code.OK,'msg':code_desc[Code.OK],'data':data})
# 返回url
def post(self):
return jsonify({'code':Code.OK,'msg':code_desc[Code.OK],'url':SimpleFactory.product('gitee').get_url()})

Gitee三方登录_Python (超详细)的更多相关文章

  1. pycharm+gitee环境搭建(超详细)

    背景:本地开发代码在没有云托管的时候代码很容易丢掉,如果是小团队,这时候可以使用公司团队注册一个账号共同使用.如果是个人用于代码存储或者用于以后项目经验也推荐gitee.大的团队可以购买 环境:win ...

  2. Linux下实现普通用户免密码登录【超详细】

    现有需求,需要把所有服务器的root和密码登录都禁用,只开放普通用户登录,这时需要给普通用户配置秘钥文件,实现无密码登录 如果普通用户需要root权限,在root用户下执行命令:visudo [roo ...

  3. MVC设计模式实现权限管理登录,超详细

    功能实现:在页面输入给定的用户名之一,可以显示当前用户的权限,也可以在页面更改该用户的权限,更新之后保存.像下面这样. 填写用户名提交: 显示用户AAA的权限: 修改权限(增加article3): 点 ...

  4. 【超详细】MakeDown(Typora)+PicGo+Gitee实现图床

    [超详细]MakeDown(Typora)+PicGo+Gitee实现图床 序言:我们有时在用makedown整理笔记时想把自己的笔记上传到博客园,可是发现在上传过程中makedown中的图片显示不出 ...

  5. SpringCloud微服务实战——搭建企业级开发框架(四十一):扩展JustAuth+SpringSecurity+Vue实现多租户系统微信扫码、钉钉扫码等第三方登录

      前面我们详细介绍了SSO.OAuth2的定义和实现原理,也举例说明了如何在微服务框架中使用spring-security-oauth2实现单点登录授权服务器和单点登录客户端.目前很多平台都提供了单 ...

  6. GitHub超详细图文攻略

    GitHub超详细图文攻略 - Git客户端下载安装 GitHub提交修改源码工作流程 Git 分类: 转载2014-03-25 21:10 10641人阅读 评论(2) 收藏 举报 GitHubbr ...

  7. 超全超详细的HTTP状态码大全(推荐抓包工具HTTP Analyzer V6.5.3)

    超全超详细的HTTP状态码大全 本部分余下的内容会详细地介绍 HTTP 1.1中的状态码.这些状态码被分为五大类: 100-199 用于指定客户端应相应的某些动作. 200-299 用于表示请求成功. ...

  8. 安装64位Oracle 10g超详细教程

    安装64位Oracle 10g超详细教程 1. 安装准备阶段 1.1 安装Oracle环境 经过上一篇博文的过程,已经完成了对Linux系统的安装,本例使用X-Manager来实现与Linux系统的连 ...

  9. 【公众号系列】超详细SAP HANA JOB全解析

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[公众号系列]超详细SAP HANA JOB全解 ...

  10. Linux 学习笔记之超详细基础linux命令 Part 13

    Linux学习笔记之超详细基础linux命令 by:授客 QQ:1033553122 ---------------------------------接Part 12---------------- ...

随机推荐

  1. PHP命令执行与绕过

    一.eval()函数调用--无严格过滤: 1.highlight_file()高亮显示: ?c=highlight_file(base64_decode("ZmxhZy5waHA=" ...

  2. [TK] 送礼物

    题解引用 引理1: 区间 \([l,r]\) 是最优解的必要不充分条件是: \(l,r\) 分别是区间的最小值与最大值. 这很显然,若假设不成立,当区间向内缩小时,一定有分子不变,分母变小,进而算出更 ...

  3. CatGPT Puzzle

    规则简述 一个 Nonogram 谜题包含一个 \(m*n\) 大小的空白方格矩阵,以及在表格每一行右侧.每一列下方的一组线索数. 每组都有一个或多个数字,这些数字就是解题的线索. 要想解开 Nono ...

  4. laravel框架接口

    下面是增删改查的接口,在使用过程中按自己需求对代码进行更改 控制器代码 <?php namespace App\Http\Controllers; use App\Models\Fang; us ...

  5. 【ARMv8】异常级别的定义EL0、EL1、EL2、EL3

    Exception levels ARMv8-A系列定义了一系列的异常等级,从EL0到EL3,下面具体说明其含义: ELn中,随着n的增加,软件的执行权限也相应的增加: EL0被称为无特权执行: EL ...

  6. 安装seaborn

    第一步:安装scipy,因为seaborn依赖scipy,如何安装scipy我之前有说过,可以看我之前安装sklearn库的过程中有安装scipy的方法. 第二步:pip install seabor ...

  7. 墨天轮沙龙 | Proxima 刘方:阿里巴巴大规模向量检索实时服务化引擎 Proxima SE

    导读 随着 AI 技术的广泛应用,以及数据规模的不断增长,向量检索也逐渐成了 AI 技术链路中不可或缺的一环. 在11月16日举办的[墨天轮数据库沙龙-向量数据库专场]邀请到阿里巴巴高级技术专家刘方, ...

  8. 墨天轮访谈 | 腾讯张铭:带你揭秘王者荣耀背后的游戏数据库 TcaplusDB

    分享嘉宾:张铭 腾讯数据库专家工程师,TcaplusDB产品负责人 整理:墨天轮社区 导读 大家好,我是腾讯TcaplusDB的产品负责人张铭,TcaplusDB是专为游戏设计的分布式 NoSQL 数 ...

  9. 谈一谈 vuex 的运行机制

    Vuex提供数据(state)来驱动视图(vue components),通过dispath派发actions,在其中可以做一些异步的操作,然后通过commit来提交mutations,最后mutat ...

  10. 使用AndroidStudio开发cocos2d-x,以及可能会出现的问题

    1. 使用AndroidStudio开发cocos2d-x流程 1.1 通过cocos2d-x官网(https://www.cocos.com/)下载cocos2d-x文件 1.2 安装python环 ...