Flet Auth0OAuthProvider 接入指南:用 Python 为 Flet 应用集成 Auth0 OAuth 登录
Flet Auth0OAuthProvider 接入指南用 Python 为 Flet 应用集成 Auth0 OAuth 登录【免费下载链接】fletBuild realtime web, mobile and desktop apps in Python only. No frontend experience required.项目地址: https://gitcode.com/gh_mirrors/fl/fletflet.auth.Auth0OAuthProvider是 Flet Python SDK 内置的 OAuth 提供商预设类专门用于将 Auth0 身份平台接入 Flet 应用。它封装了 Auth0 的授权端点、令牌端点与/userinfo用户信息获取逻辑开发者只需提供 Auth0 租户域名与应用程序凭据即可通过page.login()完成标准的授权码Authorization Code登录流程。读完本文你将掌握 Auth0OAuthProvider 的全部构造参数与默认配置、与page.login()配合的完整接入步骤以及底层令牌交换、用户资料加载与令牌刷新的实现原理。Auth0OAuthProvider 是什么在 Flet 的认证体系中Auth0OAuthProvider是OAuthProvider基类的一个预设preset实现其源码位于 sdk/python/packages/flet/src/flet/auth/providers/auth0_oauth_provider.py。所谓预设是指它把 Auth0 特有的一整套 OAuth 端点、作用域与用户 ID 提取规则预先配置好让开发者免去手工拼接端点 URL 的繁琐工作。该类在 flet/auth/init.py 中被公开导出并通过惰性导入__getattr__按需加载因此标准导入方式是from flet.auth import Auth0OAuthProvider它与AzureOAuthProvider、GitHubOAuthProvider、GoogleOAuthProvider一起并列于 providers 目录共享同一个OAuthProvider基类抽象。构造函数与参数详解Auth0OAuthProvider的构造函数定义如下引用自源码 docstringAuth0OAuthProvider( domain: str, # Auth0 租户域名不带协议例如 example.us.auth0.com client_id: str, # Auth0 应用客户端 ID client_secret: str, # Auth0 应用客户端密钥 redirect_url: str, # 注册在 Auth0 中的回调/重定向地址 audience: Optional[str] None, # 可选的 API 标识符 )参数类型是否必填说明domainstr必填Auth0 租户域名不带协议前缀例如example.us.auth0.com。该值将用于拼接全部端点 URLclient_idstr必填Auth0 Application 的 Client ID在 Auth0 控制台创建应用后获得client_secretstr必填Auth0 Application 的 Client Secret用于令牌端点换取令牌redirect_urlstr必填回调地址必须与 Auth0 控制台 Allowed Callback URLs 中注册的地址完全一致audiencestr可选Auth0 API IdentifierAPI 标识符。传入后将以audience查询参数附加到授权 URL用于申请面向特定 API 资源服务器的访问令牌不传则忽略从源码结构看domain与audience在super().__init__()调用完成后还会被保存为实例属性self.domain、self.audience供后续使用或调试查看。预置的端点与作用域配置Auth0OAuthProvider的核心价值在于将 Auth0 的协议细节固化到基类构造参数中。以下映射均可在源码第 42-56 行直接验证基类参数Auth0OAuthProvider 预置值authorization_endpointhttps://{domain}/authorizetoken_endpointhttps://{domain}/oauth/tokenuser_endpointhttps://{domain}/userinfoscopes[offline_access]user_scopes[openid, profile, email]group_scopes[]Auth0 预设不加载分组user_id_fnlambda u: u[sub]取/userinfo响应中的sub声明作为用户 IDauthorization_params{audience: audience}仅当传入audience时几个关键设计值得注意offline_access作用域作为基础作用域总是被请求它让 Auth0 返回refresh_token从而支持令牌自动刷新见下文令牌刷新一节。openid/profile/email作为user_scopes仅在fetch_userTrue时被合并进最终请求的作用域列表。user_id_fn使用sub声明sub是 Auth0 ID Token 与/userinfo响应中的稳定用户标识Flet 用它构造User.id。OAuthProvider基类oauth_provider.py还支持code_challenge、code_challenge_method、code_verifier三个 PKCE 参数以及authorization_params扩展参数Auth0 预设未显式设置 PKCE 字段如需使用可在继承类中补充。在 Auth0 控制台与 Flet 应用中完成接入第 1 步Auth0 侧准备登录 Auth0 控制台创建一个 Application类型选择 Regular Web Application 或 Native视你的 Flet 运行形态而定。记录该应用的Client ID与Client Secret。在应用设置的Allowed Callback URLs中注册回调地址。Flet 文档中常见的本地回调地址为http://localhost:8550/oauth_callback见 website/docs/cookbook/authentication.md 中的示例约定你也可以使用自己的地址但必须与代码中的redirect_url完全一致。如需调用受保护 API可在 APIs 中创建 API 并记录其Identifier作为audience参数。第 2 步构造 Provider 并调用 page.login()以下代码演示了最小可用接入。page.login()的完整签名位于 page.pyimport os import flet as ft from flet.auth import Auth0OAuthProvider AUTH0_DOMAIN os.getenv(AUTH0_DOMAIN, example.us.auth0.com) AUTH0_CLIENT_ID os.getenv(AUTH0_CLIENT_ID) AUTH0_CLIENT_SECRET os.getenv(AUTH0_CLIENT_SECRET) AUTH0_AUDIENCE os.getenv(AUTH0_AUDIENCE) # 可选 provider Auth0OAuthProvider( domainAUTH0_DOMAIN, client_idAUTH0_CLIENT_ID, client_secretAUTH0_CLIENT_SECRET, redirect_urlhttp://localhost:8550/oauth_callback, audienceAUTH0_AUDIENCE, # 可选请求面向特定 API 的访问令牌 ) def main(page: ft.Page): def on_login(e): if e.error: print(登录失败:, e.error, e.error_description) else: # e 为 LoginEventuser 为 flet.auth.User 实例 user page.auth.user if hasattr(page, auth) else None print(登录成功:, user.id if user else unknown) page.on_login on_login async def login_click(e): # 返回 AuthorizationService 实例其 .user 属性保存登录用户 await page.login(provider, fetch_userTrue) page.add(ft.ElevatedButton(使用 Auth0 登录, on_clicklogin_click)) ft.app(main, port8550)page.login()的关键参数与默认值参数默认值说明provider无传入Auth0OAuthProvider实例fetch_userTrue是否在登录后从/userinfo拉取用户资料fetch_groupsFalse是否加载用户分组Auth0 预设的group_scopes为空scopeNone额外的初始 OAuth 作用域会与预设作用域合并去重saved_tokenNone传入之前持久化的令牌 JSON 字符串可跳过交互式登录直接恢复会话redirect_to_pageFalseWeb 应用在同一浏览器标签打开授权页时使用运行形态差异在 Web 形态下Flet 通过UrlLauncher().open_window(authorization_url, titleflet_oauth_signin)打开授权窗口在桌面端则调用UrlLauncher().launch_url()拉起系统浏览器。回调完成后_authorize_callback()会校验state、关闭内嵌 WebView移动端或激活桌面窗口桌面端然后触发login事件。第 3 步处理回调与登录事件Auth0 将用户重定向到redirect_url并携带code与state。Flet 的_authorize_callback()page.py负责校验state与发起登录时生成的值一致非 Web 端根据平台关闭授权 WebView 或把桌面窗口置前构造LoginEvent若回调中带error/error_description则原样透出否则取出code调用AuthorizationService.request_token(code)换取令牌触发on_login事件处理器。登出则调用page.logout()它会清空当前认证上下文并触发logout事件。底层流程令牌交换、用户资料与自动刷新Auth0OAuthProvider本身只描述配置真正的流程编排由AuthorizationServiceauthorization_service.py完成。page.login()内部会构造一个AuthorizationService(provider, fetch_user, fetch_groups, scope)其工作流程如下构造授权 URLget_authorization_data()使用secrets.token_urlsafe(16)生成 CSRFstate再借助oauthlib.oauth2.WebApplicationClient将client_id、redirect_url、合并后的scope、state以及provider.authorization_params含可选的audience拼接到https://{domain}/authorize。返回(authorization_url, state)。令牌交换回调拿到code后request_token(code)以表单格式 POST 到https://{domain}/oauth/token请求体包含code、redirect_uri、client_secret等字段请求头带有User-Agent: Flet/{flet_version}。成功后将 oauthlib 返回的映射转换为OAuthToken对象。用户资料加载__fetch_user_and_groups()在fetch_userTrue时优先调用provider._fetch_user(access_token)钩子由于 Auth0 预设没有重写该方法基类返回None会回退到通用路径携带Authorization: Bearer token请求https://{domain}/userinfo用user_id_fn即lambda u: u[sub]从 JSON 中提取sub作为用户 ID构造User实例。注意若配置了user_endpoint而未配置user_id_fn会抛出ValueError。令牌刷新get_token()与dehydrate_token()都会触发__refresh_token()——当令牌已过期且存在refresh_token时向令牌端点发起刷新请求若刷新响应未携带新的refresh_token则沿用旧值。这解释了为何预设请求offline_access作用域它是获取刷新令牌的前提。用户与令牌模型Useruser.py是dict的子类保存提供商返回的全部字段如name、email、picture并带有规范化属性id来自sub与groups列表。OAuthTokenoauth_token.py保存access_token、scope、token_type、expires_in、expires_at、refresh_token并提供to_json()/from_json()用于序列化持久化。将saved_token传给page.login()后dehydrate_token()会反序列化、必要时刷新并在可用时加载用户与分组——这是实现记住登录状态的推荐路径。常见注意事项domain不要带协议源码直接拼接fhttps://{domain}/authorize传入https://example.us.auth0.com会得到错误的端点 URL。redirect_url必须精确匹配Auth0 回调地址校验是严格匹配的末尾斜杠、端口差异都会导致回调失败。audience按需传入仅当你的访问令牌要调用 Auth0 保护的 API 时才需要设置不设置则无法获取面向该 API 的权限声明。offline_access是固定作用域它保证了刷新令牌可用勿在自定义scope中与之冲突。回调地址建议使用本地约定http://localhost:8550/oauth_callback与 cookbook/authentication.md 中的示例保持一致便于联调。总结Auth0OAuthProvider是 Flet 认证体系中开箱即用的 Auth0 预设只需 5 个构造参数即可获得完整的授权端点、作用域、用户资料与刷新令牌配置再配合page.login()、page.on_login与OAuthToken持久化即可在桌面、Web 与移动端 Flet 应用中快速落地 Auth0 登录。其源码auth0_oauth_provider.py与流程编排authorization_service.py均可在本仓库中直接查阅便于进一步定制或扩展。【免费下载链接】fletBuild realtime web, mobile and desktop apps in Python only. No frontend experience required.项目地址: https://gitcode.com/gh_mirrors/fl/flet创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

常用符号大全:分类清单与直接复制指南

常用符号大全:分类清单与直接复制指南

1. 为什么我们需要一个“随手可用”的符号库做内容这行久了,你会发现一个很反直觉的现象:真正高频使用的东西,往往不是那些复杂工具,而是最不起眼的“小零件”。符号就是典型代表。写文案要加个箭头强调逻辑,做表格要打…

2026/9/29 2:29:29 阅读更多 →
Web端三通道支付集成:QQ/支付宝/Payment API最小可行方案

Web端三通道支付集成:QQ/支付宝/Payment API最小可行方案

简介:这是一套面向Web开发初学者与中级工程师的多支付网关集成源码,聚焦QQ支付与支付宝(Alipay)H5/扫码支付的前端后端完整实现,解决电商类网站或SaaS系统快速接入主流国内支付渠道的技术落地难题。资源共219个文件&am…

2026/9/29 2:20:20 阅读更多 →
SEO外链管理系统源码部署与一键优化实战指南

SEO外链管理系统源码部署与一键优化实战指南

简介:一款面向SEO从业者与网站管理员的工具型源码,借助自动化方式集中管理外部链接,解决人工维护外链耗时、易失效的问题,适合想提升站点排名与权重的中初级用户。压缩包共18个文件,主要包含3个PHP脚本用于网站配置和核…

2026/9/27 11:24:18 阅读更多 →

最新新闻

error-prone 的 AvoidObjectArrays 检查:用集合代替对象数组的 API 设计规范

error-prone 的 AvoidObjectArrays 检查:用集合代替对象数组的 API 设计规范

静态分析代码质量开发工具 【免费下载链接】error-prone Catch common Java mistakes as compile-time errors 项目地址: https://gitcode.com/gh_mirrors/er/error-prone 点击查看 免费下载 本篇技术指南围绕 error-prone 内置检查器 AvoidObjectArrays 展开&…

2026/9/29 2:30:17 阅读更多 →
Pysa 端到端集成测试完全指南:基于 pyre-check 的污点分析测试体系详解

Pysa 端到端集成测试完全指南:基于 pyre-check 的污点分析测试体系详解

静态分析开发工具代码质量 【免费下载链接】pyre-check Performant type-checking for python. 项目地址: https://gitcode.com/gh_mirrors/py/pyre-check 点击查看 免费下载 导读 Pysa(Python Static Analyzer)是 pyre-check 仓库内置的污…

2026/9/29 2:30:17 阅读更多 →
基于深度学习的无人机目标检测系统实战:YOLOv8/v7/v6/v5代码+Streamlit网页版+训练数据集全流程

基于深度学习的无人机目标检测系统实战:YOLOv8/v7/v6/v5代码+Streamlit网页版+训练数据集全流程

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/29 2:30:17 阅读更多 →
Android Studio 创建首个 Android 项目实战与避坑指南

Android Studio 创建首个 Android 项目实战与避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/29 2:30:17 阅读更多 →
2026年超简单:OpenClaw(ClawdBot)一键部署并接入QQ等四大平台

2026年超简单:OpenClaw(ClawdBot)一键部署并接入QQ等四大平台

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/29 2:30:16 阅读更多 →
Cursor 使用 50 次 OR 150 次:TaoToken 统一 Key 接入与 settings.json 配置骨架

Cursor 使用 50 次 OR 150 次:TaoToken 统一 Key 接入与 settings.json 配置骨架

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/29 2:29:16 阅读更多 →

日新闻

开源模型端侧落地实战:量化、推理加速与Agent上下文管理

开源模型端侧落地实战:量化、推理加速与Agent上下文管理

1. 从"追平"到"端侧落地":开源模型这波到底变了什么如果你最近半年一直在关注模型圈的动态,应该能明显感觉到一个拐点:开源模型和闭源旗舰之间的差距,正在从"代差"变成"身位差"。以前大家…

2026/9/29 0:00:05 阅读更多 →
AI Evals实战指南:从零搭建LLM应用评估体系与CI/CD集成

AI Evals实战指南:从零搭建LLM应用评估体系与CI/CD集成

1. 为什么AI Evals值得你花时间搞明白做LLM应用的人,迟早会撞上同一堵墙:模型输出飘忽不定,今天答得好好的,明天换个问法就胡说八道。你改了一版提示词,感觉好像好了点,但到底好了多少?说不清。…

2026/9/29 0:00:05 阅读更多 →
Java采购管理系统实战:从数据库设计到事务一致性

Java采购管理系统实战:从数据库设计到事务一致性

简介:这是一套面向Java Web初学者与课程设计者的采购管理系统完整源码,采用JSP技术搭建,配合MySQL数据库,用于解决企业采购信息的管理问题,适合作为毕业设计、课程大作业或进销存类项目的参考模板。系统实现了用户登录…

2026/9/29 0:00:05 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/28 5:40:26 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/28 9:47:26 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/9/28 8:07:01 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/28 16:55:15 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/28 3:51:11 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/26 22:52:30 阅读更多 →