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

第三方登录的主要特点

简化注册和登录:

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

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

提高安全性:

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

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

增加用户信任:

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

第三方登录(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. Tomcat——IDEA中创建 Maven Web 项目

    IDEA中创建 Maven Web 项目    首先创建一个新的空项目        1.使用骨架      新建模块-找到如下骨架-创建              删除pom.xml中多余的坐标   ...

  2. map的线程安全,boost库读写锁的实现

       *************** map的线程安全 ********************  *  * 参考1  * map要实现线程安全必须要加锁,如果使用mutex会产生大量的线程等待,可以 ...

  3. USB2.0 的LPM和USB3.0的LPM区别

    USB 2.0 和 USB 3.0 都支持低功耗管理机制(LPM,Link Power Management),但两者的实现方式和目标不同.以下是 USB 2.0 的 LPM 和 USB 3.0 的 ...

  4. vue3自动导入 api ,不需要多次导入 api 了

    安装插件   npm i -D unplugin-auto-import 配置 vite.config.js export default defineConfig({ plugins: [ vue( ...

  5. 0606-nn.functional

    0606-nn.functional 目录 一.nn.functional 和 nn.Module 的区别 二.nn.functional 和 nn.Module 结合使用 pytorch完整教程目录 ...

  6. kotlin类与对象——>对象表达式与对象声明、内联类

    1.对象表达式与对象声明 有时候,我们需要创建一个对某个类做了轻微改动的类的对象,而不用为之显式声明新的子类.Kotlin 用对象表达式和对象声明处理这种情况 2.对象表达式 要创建一个继承自某个(或 ...

  7. 在 Kubernetes 中基于 StatefulSet 部署 MySQL(上)

    大家好,我是老 Z! 本文实现了 MySQL 数据库在基于 KubeSphere 部署的 K8s 集群上的安装部署,部署方式采用了图形化这种形式.下一篇文章将会涉及 GitOps 的基础操作,部署过程 ...

  8. 字符串、列表、元组、字典(python)

    文章目录 1.python字符串 1.1 python访问字符串中的值 1.2Python 字符串连接 1.3Python字符串运算符 2.python列表 2.1访问列表中的值 2.2更新列表 2. ...

  9. base64编码图片二进制数据后直接保存在html文件中

    相关内容: 在markdown编辑器中嵌入base64图片 看到一个帖子,那就是base64编码用来http服务中对二进制文件编码,那么可以不可以直接在html文件中使用base64编码后的字符串来表 ...

  10. 在美国和以色列的技术支持下BP机可以爆炸,那么苹果手机是否也可以被远程引爆

    要知道,这一切在技术上都是可以实现的. 由此可见,带电池的产品,最为稳妥的办法就是购买在中国组装的产品,否则其安全性是无法保证的.有人可能会说美国政府不会单独的通过这种方法去定向的杀害某个中国普通人, ...