当前位置:

首页 > 系统应用 > Flask 添加 OAuth2 认证方法详解

Flask 添加 OAuth2 认证方法详解

使用OAuth2可避免维护用户账号密码风险,适合Flask后台系统接入Google、GitHub或自建提供商。推荐使用Authlib扩展,配置客户端后实现登录流程:1.用户点击登录按钮跳转授权页;2.用户授权后回调指定URL;3.应用通过code获取accesstoken;4.使用token请求用户信息完成登录。需将用户信息映射至本地数据库并结合权限控制,如添加@admin_required装饰器限制访问。注意事项包括:设置HTTPS回调地址、处理跨域与CSRF保护、安全存储token及合理处理异常。

本文目录

    使用OAuth2可避免维护用户账号密码风险,适合Flask后台系统接入Google、GitHub或自建提供商。推荐使用Authlib扩展,配置客户端后实现登录流程:1. 用户点击登录按钮跳转授权页;2. 用户授权后回调指定URL;3. 应用通过code获取access token;4. 使用token请求用户信息完成登录。需将用户信息映射至本地数据库并结合权限控制,如添加@admin_required装饰器限制访问。注意事项包括:设置HTTPS回调地址、处理跨域与CSRF保护、安全存储token及合理处理异常。

    如何为 Flask 后台管理系统添加 OAuth2 认证支持

    OAuth2 是现代 Web 应用中常用的认证机制,特别适合用于后台管理系统,可以避免自己维护用户账号密码的风险。如果你正在使用 Flask 搭建后台系统,并希望接入如 Google、GitHub 或自建的 OAuth2 提供商,下面这些步骤和建议能帮你顺利实现。


    使用合适的 Flask 扩展简化开发

    Flask 本身没有内置 OAuth2 支持,但社区提供了几个好用的扩展来处理这个需求。最推荐的是 Flask-OAuthlib 和 Authlib。其中:

    • Flask-OAuthlib:功能全面,文档较老但依然可用。
    • Authlib:更新更活跃,支持 OAuth1、OAuth2、OpenID Connect 等,推荐作为首选。

    安装方式(以 Authlib 为例):

    pip install authlib

    引入后可以在 Flask 应用中创建客户端配置,比如连接 GitHub 的 OAuth2 接口:

    from authlib.integrations.flask_client import OAuth
    
    oauth = OAuth(app)
    github = oauth.register(
        name='github',
        client_id='your-client-id',
        client_secret='your-client-secret',
        access_token_url='https://github.com/login/oauth/access_token',
        authorize_url='https://github.com/login/oauth/authorize',
        api_base_url='https://api.github.com/',
    )

    配置 OAuth2 登录流程

    OAuth2 的登录流程通常包括以下几个步骤:

    1. 用户点击“使用 GitHub 登录”之类的按钮;
    2. 跳转到 OAuth 提供方的授权页面;
    3. 用户授权后,提供方回调你的应用指定 URL;
    4. 你的应用通过 code 获取 access token;
    5. 使用 token 请求用户信息并完成登录或注册逻辑。

    在 Flask 中可以通过如下视图函数实现:

    @app.route('/login/github')
    def login_github():
        redirect_uri = url_for('authorize', _external=True)
        return github.authorize_redirect(redirect_uri)
    
    @app.route('/authorize')
    def authorize():
        token = github.authorize_access_token()
        resp = github.get('user')
        user_info = resp.json()
    
        # 这里可以根据 user_info['id'] 或 email 做用户查找或创建
        # 并设置 session 或 JWT 登录状态
        session['user'] = user_info
        return redirect('/admin')

    需要注意:

    • 回调地址 /authorize 必须与你在 OAuth 提供方配置的地址一致;
    • 有些平台要求 HTTPS 回调地址,本地调试时可能需要借助 ngrok;
    • 获取到的用户信息字段因平台而异,最好先打印出来看看结构。

    在后台系统中集成权限控制

    完成 OAuth2 登录后,你还需要将用户信息与后台权限管理结合起来。常见的做法是:

    • 将 OAuth 返回的唯一标识(如 user_info['id'])映射到本地数据库中的用户表;
    • 添加字段判断该用户是否有后台访问权限;
    • 使用 Flask 的 @login_required 或类似装饰器限制访问;
    • 可选地结合角色系统(如管理员、普通用户)做细粒度控制。

    例如,你可以这样封装一个简单的权限检查:

    def admin_required(f):
        @wraps(f)
        def decorated_function(*args, **kwargs):
            user = session.get('user')
            if not user or not is_admin_user(user['id']):
                abort(403)
            return f(*args, **kwargs)
        return decorated_function
    
    @app.route('/admin')
    @admin_required
    def admin_dashboard():
        return "欢迎进入管理后台"

    注意事项和常见问题

    • 跨域问题:如果前后端分离,要注意设置好 OAuth 回调域名和 CORS 配置;
    • CSRF 保护:确保 OAuth 流程中有 state 参数防止 CSRF;
    • Session 安全:使用安全的 cookie 设置(如 HttpOnly、Secure);
    • Token 存储:生产环境建议不要把 token 存在 session 中,可以用缓存或数据库保存;
    • 错误处理:OAuth 流程中可能出现网络失败、用户取消等情况,要合理处理异常。

    基本上就这些。整个过程不复杂,但有很多细节容易忽略,尤其是权限控制和用户绑定部分。只要一步步按流程来,就能顺利为 Flask 后台系统加上 OAuth2 支持。

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    系统应用 Flask
    相关文章 更多
    Golang实现OAuth2授权_使用Golang-jwt框架流程
    Golang实现OAuth2授权_使用Golang-jwt框架流程

    好的,没问题。作为一位深耕Go语言领域多年的老兵,我来把这篇文章重新梳理一下,让它读起来更像是咱们技术群里一位靠谱同事的分享。 先把结论摆在这儿:在Go语言的世界里,`golang-jwt/jwt/v5` 和 OAuth2 协议本身是两码事。OAuth2 那套“拿code换token”的流程,得交给

    Python技术:Windows下Flask服务启用教程
    Python技术:Windows下Flask服务启用教程

    下面展示了flask服务启用后对我给的特定请求做的一些处理。如果想实现连接windows服务器,利用requests请求进行文件传输,可以看我的这篇文章:Python技术篇-用flask库与requests请求实现mac本地文件上传至windows服务器指定文件夹下实例演示代码语言:javascript代码运行次数:0运行复制#-*-coding:utf-8-*-importflaskapp=flask.Flask(__name__)#直接输入ip+端口号展

    OAuth2令牌刷新失败解决方法
    OAuth2令牌刷新失败解决方法

    令牌刷新失败常见原因及解决方法:1.检查刷新令牌是否有效,过期或撤销需重新授权;2.核对客户端ID/密钥是否正确;3.验证权限范围是否一致;4.排查网络连接问题;5.分析错误日志定位问题;6.实现重试机制并限制次数;7.检查授权服务器配置;8.使用封装的刷新逻辑与自定义TokenSource优雅处理刷新流程。

    Spring Security配置OAuth2资源服务器详解
    Spring Security配置OAuth2资源服务器详解

    配置SpringSecurityOAuth2资源服务器的核心步骤如下:1.添加依赖:根据项目构建工具(Maven或Gradle)添加SpringSecurity和OAuth2资源服务器相关依赖;2.配置application.yml或application.properties:根据令牌类型(JWT或OpaqueToken)配置JWKSURI、公钥路径或introspection端点及客户端凭证;3.配置SpringSecurity:创建SecurityConfig类定义接口访问规则,如匿名访问路径、角色

    Flask-Restful: Python构建RESTful API的最佳实践
    Flask-Restful: Python构建RESTful API的最佳实践

    Flask-Restful是一种使用Flask框架构建RESTfulAPI的最佳实践。它可以帮助开发者在不牺牲性能和可扩展性的情况下快速构建RESTfulAPI。本文将介绍Flask-Restful的优势、基本用法和常见实践。什么是Flask-RestfulFlask-Restful是Flask框架的一个扩展库,它提供了一组工具和

    Flask-Restless和Flask-SQLAlchemy:Python web应用程序中构建RESTful API的最佳实践
    Flask-Restless和Flask-SQLAlchemy:Python web应用程序中构建RESTful API的最佳实践

    在Pythonweb应用程序开发中,构建RESTfulAPI是一个不可避免的话题。RESTfulAPI已经成为现代web应用程序开发的标准,因为它可以通过HTTP协议实现轻量级、可扩展和易于维护的API接口。有两个Python库值得一提:Flask-Restless和Flask-SQLAlchemy。让我们探讨如何使用它们来构建RESTfulAPI的

    使用Python的Flask-Babel本地化Web应用程序
    使用Python的Flask-Babel本地化Web应用程序

    在当今全球化的环境下,为Web应用程序提供本地化支持是至关重要的。本地化可以帮助您的应用程序适应用户的语言和文化习惯,从而增加用户的满意度和忠诚度。对于Python开发者来说,Flask-Babel是一个极具价值的工具,可以方便地实现Web应用程序的本地化。Flask-Babel是一个为Flask框架提供国际化和本地化支持的插件。它利用Babel库(http

    处理 flask 中发生的 KeyboardInterrupt 错误
    处理 flask 中发生的 KeyboardInterrupt 错误

    报错的原因KeyboardInterrupt是python的一个常见异常,当用户在终端中按下ctrl+c组合键时就会触发。在flask应用程序中,如果您在运行应用程序时按下ctrl+c,就会导致应用程序抛出KeyboardInterrupt异常,并终止运行。在这种情况下,这不是一个错误,而是正常的终止运行。如果您想在这种情况下执行某些清理操作,可以在应用程序中捕获KeyboardInterrupt异常,在其中执行清理操作。如果您在运行flask的开发服务器时出现KeyboardInterrupt的话,可以

    安装Python Flask:启动你的Web应用
    安装Python Flask:启动你的Web应用

    PythonFlask是一种轻量级的Web应用框架,使用Python作为主要开发语言。它简洁而灵活,适用于快速构建Web应用。在本文中,我们将介绍如何安装和配置PythonFlask,并提供一些具体的代码示例,帮助你快速启动你的Web应用。一、安装PythonFlask要安装PythonFlask,首先需要确保你的机器上已经安装了Python。你可

    学习如何安装Flask:PythonWeb开发的必备技能
    学习如何安装Flask:PythonWeb开发的必备技能

    手把手教你安装Flask:PythonWeb开发的利器导语:Flask是一个简洁高效的PythonWeb开发框架,它提供了一种灵活的方式来构建Web应用程序。本文将为大家介绍如何安装Flask,并提供具体的代码示例。一、安装Python首先,我们需要安装Python。Flask是基于Python开发的,所以必须先安装Python。可以从官方网站(https:

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。