尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
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),仅供参考
RELATED

相关推荐

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

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

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

📅 2026/9/23 22:13:41
物联网赋能城市防汛:智慧排水解决方案实现立体监测与内涝预警预报

物联网赋能城市防汛:智慧排水解决方案实现立体监测与内涝预警预报

随着国内城市化高速发展,城市硬化地面占比持续增加。每逢汛期强降雨,下穿隧道、低洼路段、老旧管网极易发生积水、城市内涝灾害。 传统城市排水防汛模式存在明显短板: 排水管网、泵站、易涝点位分布零散,主要依靠人员雨后现场巡…

📅 2026/9/23 22:13:41
MATLAB混合优化:禁忌搜索+遗传算法协同实现

MATLAB混合优化:禁忌搜索+遗传算法协同实现

简介:本资源是一份面向算法学习者与MATLAB工程实践者的混合优化算法实现代码包,聚焦禁忌搜索与遗传算法的原理融合与工程落地,适用于智能优化、运筹学、自动化控制等领域的课程设计、毕业设计及科研原型开发。压缩包内含1个核心MATLAB脚本文件…

📅 2026/9/23 22:08:40
MORE NEWS

更多资讯

📰

双目结构光三维重建:12步相移与互补格雷码全流程

简介:这份资源是一套基于双目视觉与结构光投影的三维重建完整项目,面向计算机视觉学习者、课程设计或科研入门者,解决从相机标定到点云生成的工程落地问题。项目采用12步相移法与互补格雷码实现高精度相位解包裹,通过双目标定获取…

📰

GBrain 技能合规入门:用 Convention Callout 实现 Brain-First Lookup(以 compliant-callout 为例)

人工智能RAGAgent 记忆MCP 服务知识管理 【免费下载链接】gbrain Garrys Opinionated OpenClaw/Hermes Agent Brain 项目地址: https://gitcode.com/gh_mirrors/gb/gbrain 点击查看 免费下载 本文以 test/fixtures/brain-first-skills/compliant-callout/SKILL.md …

📰

PaddleNLP AdamW 优化器实战:AdamWDL 分层学习率衰减的原理、源码解析与使用方法

人工智能大模型预训练微调LoRARLHF强化学习分布式训练 【免费下载链接】PaddleNLP Easy-to-use and powerful LLM and SLM library with awesome model zoo. 项目地址: https://gitcode.com/gh_mirrors/pa/PaddleNLP 点击查看 免费下载 AdamW 优化器是 Transformer…

📰

机械制造企业间接采购优化:从品类盘点到供应商整合的完整指南

干了十几年制造业供应链,我最怕听到同行说“我们想把间接采购好好管一管”——不是怕他们没决心,是怕他们低估了机械制造企业间接采购品类多这个现实。小到一颗钻头、一卷密封胶,大到一条产线的年度维保、一次计量校准,零件号少则…

📰

异步接口的状态更新:如何避免旧响应覆盖新任务

先看一个常见的时序问题用户打开任务列表,界面发出第一次查询。随后用户切换筛选条件,界面发出第二次查询。第二次查询先返回,页面显示了正确的新列表;第一次查询稍后返回,如果代码无条件赋值,就会把旧列表…

📰

区块链数据共享系统源码解析:IPFS存储+以太坊记账+ABE授权

简介:这套基于IPFS、Ethereum与基于属性加密(ABE)的区块链安全数据共享系统设计源码,面向区块链开发者和数据安全研究人员,适用于金融、医疗、供应链等对访问控制要求较高的场景,通过IPFS实现分布式存储&am…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬