使用Auth0的Flutter认证和授权第二部分:刷新令牌、社交登录等

9,261 阅读10分钟

在上一节的练习中,你将Auth0认证添加到一个现有的Flutter应用程序中。这给应用程序添加了一个用户名/密码认证流程。你还赋予了应用程序请求和提交刷新令牌的能力,这增强了用户体验,因为用户不需要在每次使用应用程序时进行认证。

本节将通过研究一些有用的Auth0功能来扩展该应用“

  • 刷新令牌轮换
  • 社交登录
  • 管理你的Auth0账户

如果你想在关注构建和执行步骤的同时略过这些内容,请寻找🛠表情符号。

添加刷新令牌轮换

当应用程序向Auth0的认证服务器发出认证请求时,它包括offline_access 范围。这将导致认证服务器发出一个刷新令牌,应用程序可以用它来重新认证,而不要求用户再次登录。应用程序将该令牌存储在设备的安全存储中。

虽然这增强了应用程序的用户体验,但它也引入了风险。刷新令牌的寿命很长,应用程序可以把它作为一个 "终身通行证",无休止地请求新的访问令牌,使用户永远保持登录状态。

我强烈建议利用刷新令牌旋转自动重复使用检测来帮助减轻这种风险。启用这些功能后,每个刷新令牌只能使用一次。当应用程序将其刷新令牌换成新的访问令牌时,认证服务器也会返回一个新的刷新令牌并使旧的令牌失效。

让我们启用这些功能吧!

🛠 导航到Auth0仪表板的应用程序部分,选择MJ Coffee应用程序,然后选择其设置标签。向下滚动页面到刷新令牌轮换部分,打开轮换绝对到期选项。

Turn on the “Rotation” and “Absolute Expiration” options.

建议你发出一个刷新令牌,在预设的有效期后失效。每次使用刷新令牌获得新的访问令牌或访问令牌/刷新令牌对时,可以延长刷新令牌的寿命。

令牌寿命有两个选项,它们可以相互独立设置:

  • 绝对寿命:启用绝对寿命为应用程序的刷新令牌设置一个指定的绝对寿命。刷新令牌可以在此有效期内被交换为新的访问令牌。一旦令牌的年龄超过其寿命,用户将需要重新认证,以获得新的访问令牌。如果绝对过期被禁用,刷新令牌有无限的绝对寿命。
  • 不活动寿命: 启用 "**不活动期限 "**为应用程序的刷新令牌指定不活动期限。如果用户在此期限内在应用程序中处于活动状态,刷新令牌可以被交换为新的访问令牌。如果用户在应用中不活动的时间超过不活动期限,他们将需要重新认证,以获得新的访问令牌。

🛠 滚动到页面底部,点击保存更改按钮。

The “Save Changes” button. The user is directed to click it.

这些天来,除了标准的用户名/密码组合外,还有一些登录方法是很常见的。这些方法包括用社交媒体账户登录,这将大大增强你的用户体验。

实施这些额外的登录方式并将其添加到你的授权服务器上是很耗时的,而且会有很多考虑和风险。

幸运的是,Auth0提供了很多与知名第三方认证系统的集成,甚至允许你编写你的自定义连接。让我们为谷歌和苹果的认证系统添加连接。

🛠 在Auth0的仪表板上,在左栏菜单中选择认证,然后选择社交。这将把你带到社交关系页面,你应该点击创建社交关系按钮。

The steps to create a new social connection in Auth0

你会被带到 "新社交连接"页面,其中有一个与Auth0集成的社交登录供应商的列表。

🛠 选择谷歌

Selecting Google from all the available social connections

现在你将进入新的谷歌/Gmail社交连接页面,它告诉你谷歌社交登录会访问什么样的用户信息。

🛠 点击继续

Initial page for creating a new Google/Gmail social connection

一个有许多字段的新页面会出现;这是连接的设置标签。

只要你是在开发环境中工作,你只需要填写 "名称"字段(为这个连接提供一个名称),其他字段都留空。你可以一直使用名称字段的默认值。

New Google/Gmail social connection

然而,生产应用程序要求你提供一个客户ID客户秘密(doc),并指定允许的移动客户ID。这些主题将在另一个视频或文章中介绍。

🛠 通过滚动到页面底部并点击 "创建"来创建Google/Gmail连接。

Creating the Google/Gmail connection

这将创建连接,你将被带到其应用程序标签。你会看到你的应用程序的列表,这将允许你为其中任何一个启用谷歌/Gmail连接。启用MJ咖啡应用程序的连接。

The Google/OAuth2 applications tab

你也可以设置更多的权限,最终用户在授权时需要批准。这些权限取决于你的应用程序和你想代表用户做什么。MJ Coffee应用程序不需要任何额外的权限,除了基本和扩展配置文件。

Google Permission

🛠 确保你在每次登录时同步用户档案属性并点击保存按钮。

🛠 再次在Auth0仪表板上,在左栏菜单中选择认证,然后选择社交。这将把你带到社会关系页面,在那里你应该点击创建社会关系按钮。

The steps to create a new social connection in Auth0

🛠 这一次,选择苹果

Selecting Apple from all the available social connections

现在你将进入 "新苹果社交连接"页面,它告诉你什么样的用户信息可以通过苹果社交登录访问。

🛠 点击继续

Continue

只要你是在开发环境中工作,你可以让客户端ID客户端秘密签名密钥字段为空。当应用程序进入生产阶段时,你需要这些字段的适当密钥;本文档将详细介绍这一主题

苹果团队ID密钥ID的值是必须的。

Google Permission

  • 要获得你的苹果团队ID,你需要一个苹果开发者账户。
  • 要为你的应用程序获得一个密钥ID,你需要使用你的苹果开发者账户注册该应用程序。

🛠 登录你的苹果开发者账户,然后进入会员页面,记下你的团队ID。

🛠 如果你有一个注册的应用程序,你可以跳过以下步骤,跳到创建服务ID的任务列表。否则,请遵循以下步骤:

  • 在Apple Developer Portal中,进入Certificate, IDs, & Profiles > Identifiers,点击Identifiers旁边的蓝色 "加号 "图标,创建新的App ID。
  • 选择App IDs作为标识符类型,然后点击继续
  • 提供一个描述和一个反向域名格式的Bundle ID(例如。 com.mydomain.mjcoffee).
  • 向下滚动并选中 "用苹果登录"。
  • 点击继续,然后点击注册

🛠 一旦应用被注册,就是创建服务ID的时候:

  • 回到 "证书、ID和配置文件"部分,点击 "识别器"旁边的蓝色 "加号 "图标。
  • 选择服务ID,并选择继续。填入描述和标识符(例如:。 com.mydomain.mjcoffee).
  • 勾选 "用苹果登录"后,选择 "配置",并定义你的网络域名(例如:)。 com.mydomain.mjcoffee)和你的 "返回URL"。确保你的Return URL是你的Auth0域名,并且它遵循以下格式。 https://YOUR_AUTH0_DOMAIN/login/callback.

Return URL apple sign in

🛠 最后:保存,继续,然后注册服务。

设置你的客户秘密签名密钥

🛠 按照以下步骤进行:

  • 进入密钥,它位于你的苹果开发者仪表板的证书、识别码和配置文件部分。
  • 选择蓝色的 "加号 "图标,添加一个新的密钥。
  • 输入一个密钥名称,并选中 "用苹果登录"选项。
  • 选择 "配置",确保 "选择主要应用程序ID"字段填写正确的应用程序ID。
  • 选择保存,继续,然后注册
  • 在你注册后被重定向到的页面上,记下密钥ID。然后下载密钥;它将有一个 .p8文件名扩展名。

🛠 回到你的苹果社交连接设置,粘贴密钥ID。确保选择适当的属性(姓名、电子邮件),并在每次登录时同步用户资料。点击保存

🛠 一旦你创建了所有的社交连接并正确设置了它们,回到你的应用程序。进入 "连接"选项卡,启用你新建立的社交连接。

app social connections

正如你所看到的,现在为你的应用程序添加和删除社交关系就像按下开关一样简单。

在Flutter方面,我有一个好消息:你不需要在那里实现任何东西

重新启动应用程序,注销,然后尝试登录。你会看到这个。

app social connections

就这样了!登录屏幕现在将显示社交登录按钮,它们的登录流程也可以使用了。

品牌化

虽然在开发过程中使用默认的品牌标识很好,但一旦应用进入生产阶段,你希望登录页面可以根据你的 "外观和感觉 "进行定制。

Auth0允许你通过一些选项来定制你的登录页面。你可以通过添加颜色和标志来改变登录页面的外观和感觉,你也可以定制用户通知的部分:电子邮件模板、文本信息等等。这一切都在Auth0仪表板的品牌部分。

Auth0 branding

添加角色

你可能想根据用户的角色向他们提供某些功能。这很容易与适当的授权服务器,如Auth0,它有利于添加角色和指定每个角色的用户被允许做什么。

在MJ Coffee应用程序中,有三个不同的角色:

  • 管理员:这些是管理员,他们将有机会访问所有应用程序的功能,并有完整的权限。
  • 客户;这是注册或登录用户的默认角色。他们只限于应用程序面向客户的功能。在注册或登录时,你将自动为所有用户分配这个角色,你将在本教程的后面学习如何这样做。
  • 雇员:这些是咖啡店的员工。他们可以进入社区屏幕,在支持聊天中回答客户请求,以及其他面向员工的功能。

Auth0 roles

你可以根据需要在应用程序中添加更多的角色。

Auth0中的用户管理

Auth0提供基础设施,在其云数据库中存储用户和他们的信息。

对于MJ Coffee应用程序,Auth0的云数据库是足够的。Auth0的目标之一是减少额外基础设施的维护和成本。

你可以通过在Auth0仪表板的左栏菜单中选择用户管理来访问用户。用户页面允许你创建新的用户,并通过改变他们的详细资料、添加权限和角色或撤销他们的访问权来管理你现有的用户。

Auth0 users

当你打开一个用户时,你会看到Auth0提供了关于该用户的深入细节,包括基本的账户数据、元数据、他们的设备和他们的历史,这对于调试应用程序或调查某个特定用户的访问活动、权限和角色可能相当有帮助。

Auth0 user roles

每个用户账户都存储了一些关于用户的基本信息:姓名、电子邮件地址、账户创建的日期和时间等等。

额外的信息可以通过添加到这些元数据存储中附加到一个用户身上:他们的用户元数据,这是一个用于存储用户信息的键值结构。你也可以在usermetadata*或操作`appmetadata`*中存储信息,这有助于在接收用户详细信息时向Flutter应用程序提供更多信息。

继续前进

在本教程的下一节中,您将学习如何在应用程序中添加实时聊天。