Python:OAuth2第三方登录之Github

简介: Python:OAuth2第三方登录之Github

一、应用登记

https://github.com/settings/applications/new

登记完成后,获取两个参数

  1. 客户端 ID(client ID)
  2. 客户端密钥(client secret)

二、GitHub登录授权

1、网站让用户跳转到 GitHub。

GET https://github.com/login/oauth/authorize?
    client_id=7e015d8ce32370079895&
    redirect_uri=http://localhost:8080/oauth/redirect

两个参数:

  1. client_id告诉 GitHub 谁在请求
  2. redirect_uri是稍后跳转回来的网址


2、 GitHub 用户登录授权,重定向回网站,同时返回【授权码code】。

GET http://localhost:8080/oauth/redirect?
    code=859310e7cecc9196f4af

3、 网站后台使用授权码,向 GitHub 请求【令牌】, 需要加json请求头

POST https://github.com/login/oauth/access_token
Accept: application/json
参数:
client_id:客户端的 ID
client_secret:客户端的密钥
code:授权码

三、请求数据

网站使用令牌,向 GitHub 请求用户数据。

GET https://api.github.com/user
Authorization: Bearer {access_token}
Accept: application/json

代码实现

依赖requirements.txt

requests
flask
environs
mo-cache

run.py

# -*- coding: utf-8 -*-
from urllib.parse import urljoin
from flask import Flask, request, url_for
from github_api import get_github_auth_url, user, get_access_token
from mo_cache import FileCache
from environs import Env
# 注册应用获取的参数
env = Env()
env.read_env()
clientID = env.str('clientID')
clientSecret = env.str('clientSecret')
# 使用文件缓存 access_token
cache = FileCache()
ACCESS_TOKEN_KEY = 'access_token_key'
app = Flask(__name__)
def full_url_for(endpoint, **values):
    """获取完整路径"""
    return urljoin(request.host_url, url_for(endpoint, **values))
@app.route('/')
def hello_world():
    """首页暴露接口地址"""
    return {
        'auth_url': full_url_for('get_auth_url'),
        'get_user': full_url_for('get_user')
    }
@app.route('/auth_url')
def get_auth_url():
    """获取由后端拼接的Github第三方登录授权地址"""
    redirect_uri = full_url_for('oauth_redirect')
    auth_url = get_github_auth_url(client_id=clientID, redirect_uri=redirect_uri)
    return {'auth_url': auth_url}
@app.route('/oauth/redirect')
def oauth_redirect():
    """github验证回调地址,从请求参数中获取code"""
    code = request.args.get('code')
    # 拿到code后继续请求获取access_token
    res = get_access_token(client_id=clientID, client_secret=clientSecret, code=code)
    # 存储用户的access_token
    access_token = res.get('access_token')
    cache.set(ACCESS_TOKEN_KEY, access_token)
    return res
@app.route('/user')
def get_user():
    """通过access_token 获取用户信息"""
    # 从缓存中取出
    access_token = cache.get(ACCESS_TOKEN_KEY)
    res = user(access_token=access_token)
    return res
if __name__ == '__main__':
    print(app.url_map)
    # 服务地址需要和应用配置一致
    app.run(port=8080, debug=True)

github_apipy

# -*- coding: utf-8 -*-
import requests
def get_github_auth_url(client_id, redirect_uri):
    """
    :param client_id: 告诉 GitHub 谁在请求
    :param redirect_uri: 跳转回来的网址
    :return:
    """
    authorize_uri = 'https://github.com/login/oauth/authorize'
    return f'{authorize_uri}?client_id={client_id}&redirect_uri={redirect_uri}'
def get_access_token(client_id, client_secret, code):
    """获取 access_token 此操作在后台完成"""
    url = 'https://github.com/login/oauth/access_token'
    params = {
        'client_id': client_id,
        'client_secret': client_secret,
        'code': code
    }
    headers = {
        'accept': 'application/json'
    }
    res = requests.post(url=url, params=params, headers=headers)
    return res.json()
def user(access_token):
    """获取用户信息"""
    url = 'https://api.github.com/user'
    headers = {
        'Authorization': f'Bearer {access_token}'
    }
    res = requests.get(url=url, headers=headers)
    return res.json()

Python实现完整代码:https://github.com/mouday/github-oauth-demo

参考

GitHub OAuth 第三方登录示例教程

相关文章
|
JSON 安全 数据安全/隐私保护
Python认证新风尚:OAuth遇上JWT,安全界的时尚Icon👗
【10月更文挑战第2天】在当今互联网世界中,数据安全与隐私保护日益重要。Python 作为广泛应用于 Web 开发的语言,其认证机制也不断进化。OAuth 2.0 和 JSON Web Tokens (JWT) 成为当前最热门的安全认证方案,不仅保障数据安全传输,还简化了用户认证流程。本文将介绍 Python 如何结合 OAuth 2.0 和 JWT 打造安全高效的认证体系。
159 3
|
JSON 安全 数据安全/隐私保护
Python认证新风尚:OAuth遇上JWT,安全界的时尚Icon👗
在当今互联网世界中,数据安全和隐私保护至关重要。Python 作为 Web 开发的主流语言,其认证机制也在不断进步。OAuth 2.0 和 JSON Web Tokens (JWT) 是当前最热门的安全认证方案,不仅保障数据安全传输,还简化用户认证流程。本文介绍如何在 Python 中结合 OAuth 2.0 和 JWT,打造一套既安全又高效的认证体系。通过 Flask-HTTPAuth 和 PyJWT 等库,实现授权和验证功能,确保每次请求的安全性和便捷性。
212 3
|
JSON 安全 数据安全/隐私保护
告别密码泄露!Python OAuth与JWT双剑合璧,守护你的数字资产💰
本文探讨了在Python环境中利用OAuth 2.0和JSON Web Tokens (JWT) 提高系统安全性的方法。OAuth 2.0是一种开放标准授权协议,通过用户授权和令牌颁发来保护资源访问。JWT则是一种紧凑、自包含的认证方式,用于安全传输信息。文章详细介绍了如何使用Flask-OAuthlib实现OAuth 2.0认证,以及使用PyJWT生成和验证JWT。结合这两种技术,可以构建出既安全又高效的认证体系,为数据安全提供双重保障。
227 3
|
JSON 安全 数据安全/隐私保护
Python安全守护神:OAuth与JWT,让黑客望而却步的魔法阵🧙‍♂️
在网络世界中,数据安全至关重要。本文介绍了如何在Python环境中使用OAuth 2.0和JSON Web Tokens (JWT) 构建安全的认证系统。OAuth 2.0是一种开放标准授权协议,允许客户端在不暴露用户凭证的情况下访问资源。JWT则是一种轻量级的数据交换格式,用于在各方之间安全地传输信息。结合两者,可以构建出既安全又高效的认证体系。文章通过Flask-OAuthlib和PyJWT库的示例代码,详细展示了实现过程。
376 2
|
JSON 安全 数据安全/隐私保护
深度剖析:Python如何运用OAuth与JWT,为数据加上双保险🔐
【10月更文挑战第2天】当讨论Web应用安全时,认证与授权至关重要。OAuth 2.0 和 JSON Web Tokens (JWT) 是现代Web应用中最流行的两种认证机制。OAuth 2.0 是一种开放标准授权协议,允许资源拥有者授予客户端访问资源的权限,而不需直接暴露凭据。JWT 则是一种紧凑、URL 安全的信息传输方式,自我包含认证信息,无需服务器查询数据库验证用户身份。在 Python 中,Flask-OAuthlib 和 PyJWT 分别用于实现 OAuth 2.0 和 JWT 的功能。结合两者可构建高效且安全的认证体系,提高安全性并简化交互过程,为数据安全提供双重保障。
208 7
|
JSON 安全 数据安全/隐私保护
深度剖析:Python如何运用OAuth与JWT,为数据加上双保险🔐
【10月更文挑战第10天】本文介绍了OAuth 2.0和JSON Web Tokens (JWT) 两种现代Web应用中最流行的认证机制。通过使用Flask-OAuthlib和PyJWT库,详细展示了如何在Python环境中实现这两种认证方式,从而提升系统的安全性和开发效率。OAuth 2.0适用于授权过程,JWT则简化了认证流程,确保每次请求的安全性。结合两者,可以构建出既安全又高效的认证体系。
178 1
|
JSON 安全 数据安全/隐私保护
Python安全守护神:OAuth与JWT,让黑客望而却步的魔法阵🧙‍♂️
【10月更文挑战第2天】在网络世界中,数据安全至关重要。本文以教程形式介绍如何在Python环境中使用OAuth 2.0和JSON Web Tokens (JWT) 构建安全认证系统。OAuth 2.0 作为一种开放标准授权协议,允许客户端安全访问资源;JWT 则用于安全传输信息。二者结合可构建高效且安全的认证体系。文中详细介绍了OAuth 2.0 的工作流程及如何使用Flask-OAuthlib实现认证;并通过PyJWT库展示了JWT的生成与验证方法。最后探讨了两者结合使用的具体实践,旨在为开发者提供全面的认证解决方案。随着技术发展,这两种技术将继续在认证领域发挥重要作用。
277 5
|
JSON 安全 数据安全/隐私保护
告别密码泄露!Python OAuth与JWT双剑合璧,守护你的数字资产💰
【10月更文挑战第2天】密码泄露是互联网安全的重大隐患。为了解决这一问题,开发人员采用更安全的认证机制,如 OAuth 2.0 和 JSON Web Tokens (JWT),以保护用户数字资产。OAuth 2.0 作为一种开放标准授权协议,允许资源拥有者向客户端授予访问权限而不必暴露凭证;JWT 则是一种用于安全传输信息的紧凑格式,能够在各方间传递自包含认证信息。
134 3
|
JSON 安全 数据安全/隐私保护
告别密码泄露!Python OAuth与JWT双剑合璧,守护你的数字资产💰
【9月更文挑战第5天】密码泄露是互联网安全的重大隐患。为了解决这一问题,开发者们采用了更为安全的认证机制,如OAuth 2.0和JSON Web Tokens (JWT),以保护用户的数字资产。OAuth 2.0通过授权协议允许资源拥有者授予客户端访问权限而不暴露凭证;JWT则提供了一种紧凑且安全的信息传输方式,使得认证信息自包含于令牌中。
244 8
|
JSON 安全 数据安全/隐私保护
实战指南:Python中OAuth与JWT的完美结合,构建安全认证防线
【9月更文挑战第9天】当今互联网应用的安全性至关重要,尤其在处理用户数据和个人隐私时。OAuth 和 JWT 是两种广泛使用的认证机制,各具优势。本文探讨如何在 Python 中结合 OAuth 和 JSON Web Tokens (JWT) 构建安全可靠的认证系统。OAuth 允许第三方应用获取有限访问权限而不暴露用户密码;JWT 则是一种轻量级数据交换格式,用于安全传输信息。结合使用这两种技术,可以在确保安全性的同时简化认证流程。
219 4

推荐镜像

更多