跳过主要内容

5步实现Capacitor应用中的OAuth2

本指南简要概述了OAuth2安全认证的关键步骤和最佳实践,帮助您在Capacitor应用中集成此功能。

马丁·多纳迪厄

马丁·多纳迪厄

目标市场专家

5 步实现 OAuth2 在 Capacitor 应用程序中

想在你的 __CAPGO_KEEP_0__ 应用程序中添加安全的 OAuth2 认证?这里有一份快速指南让你开始。 Capacitor __CAPGO_KEEP_0__ 应用程序

因为它可以在 iOS、Android 和 web 平台上工作。对于社交提供商, @Capacitor/__CAPGO_KEEP_1__-social-login 处理 Google、Apple 和 Facebook 登录的原生流程。对于无密码认证 @capgo/capacitor-social-login __CAPGO_KEEP_0__ 应用程序 @capgo/capacitor-passkey 保持浏览器风格的WebAuthn code,同时为您处理本机passkey调用。另外,它通过使用令牌而不是存储敏感凭证来保持您的应用程序安全。

在以下5个步骤中,将OAuth2集成到您的 Capacitor 应用程序中:

  1. 设置OAuth2提供者: 选择提供者(例如,Google, Auth0,)配置重定向URI,
  2. 并安全地管理客户端凭证。安装和配置OAuth2插件 @byteowls/capacitor-oauth2 : 添加插件, @capgo/capacitor-social-login 为 Google、Apple 和 Facebook 配置平台特定的设置(例如, Info.plist 为 iOS 配置 AndroidManifest.xml 为 Android 配置).
  3. 构建身份验证流程: 使用插件安全地处理用户登录、令牌存储和注销。启用 PKCE 以获得额外的保护。
  4. 跨平台测试: 在 iOS、Android 和 web 浏览器上验证流程。修复常见问题,如重定向 URI 匹配错误或 PKCE 错误。
  5. 安全实施: 在安全存储中存储令牌(密钥链/Keystore) 使用 HTTPS,并设置强大的 内容安全策略.

快速比较:安全令牌存储选项

存储选项 最佳选择 安全级别 离线访问 示例用例
安全存储 移动应用 刷新令牌
内存存储 暂时访问 中等 活跃访问令牌
HttpOnly Cookies Web 应用 基于浏览器的会话

如何使用 Google Sign In Capacitor 添加到您的 Ionic 应用

Capacitor

YouTube 视频播放器 步骤 1:设置您的 OAuth2

提供者

正确设置 OAuth2 提供者是确保一切顺利运行的第一步和最关键步骤。它涉及选择与您的应用需求相符的提供者、配置技术细节,如重定向 URI、并安全地处理您的凭据。这些步骤为接下来安装 OAuth2 插件做好准备。

选择一个与您的应用功能、安全需求和兼容性相匹配的OAuth2提供商。您正在构建的应用类型在确定您将使用的OAuth 2.0流程中起着至关重要的作用,这直接影响了您选择的提供商 [2]. For Capacitor-based apps,建议使用Authorization Code流程-此是移动应用程序的首选方法。

在比较提供商时,重点关注其安全功能。寻找像签名Cookie、CSRF令牌验证和加密JWT等选项。如果您的应用处理敏感数据, 多因素身份验证 是必不可少的。评估时,应平衡成本和功能,根据您的需求而定,不要被繁琐的比较所困扰。

配置重定向URI

重定向URI至关重要,它们告诉OAuth2提供商在用户完成身份验证后将用户发送到哪里。正确配置这些URI确保在移动和Web平台上都能实现顺畅的体验。

对于移动应用程序,使用自定义URL方案,通常以 com.example.app://callback为格式, com.example.app 匹配您的应用程序包ID。 window.location.origin 在Web上,使用 http://localhost:8100/callback 作为重定向URI。如果您正在测试本地环境,一个类似于

对于iOS用户,请注意Capacitor的浏览器插件使用 SFSafariViewController. 在iOS 11及之后,这不会与Safari共享Cookie,这可能会影响单点登录功能。如果SSO是必需的,请考虑使用支持 ASWebAuthenticationSession [3].

管理客户端凭证

客户端凭证标识您的应用程序到OAuth2提供商,并由客户端ID和客户端密钥组成。将客户端ID视为公共标识符,而客户端密钥应像私钥一样处理。

不要将客户端密钥直接硬编码到您的应用程序或提交到版本控制。相反,使用环境变量或安全密钥管理系统来存储它们。另外,优先选择短期令牌并最小化作用域,以限制暴露并提高安全性。

步骤2:安装和配置OAuth2插件

现在您的OAuth2提供商准备好后,下一步是将插件添加到您的Capacitor应用程序中,并为iOS、Android和Web平台进行设置。

安装插件

插件与大多数OAuth2提供商兼容。为了避免兼容性问题,您需要安装与__CAPGO_KEEP_0__设置匹配的版本。 @byteowls/capacitor-oauth2 plugin works with most OAuth2 providers. To avoid compatibility issues, you’ll need to install the version that matches your Capacitor setup.

根据您的Capacitor版本,以下是安装命令:

  • Capacitor v5: npm i @byteowls/capacitor-oauth2
  • Capacitor v4: npm i @byteowls/capacitor-oauth2@4
  • Capacitor v3: npm i @byteowls/capacitor-oauth2@3

安装完成后,请运行同步命令()来更新本地依赖项。这个步骤对于确保插件正确与iOS和Android项目集成至关重要。忽略此步骤可能导致在移动平台上编译时出现构建错误。npx cap sync配置插件设置

安装后,您需要配置插件以匹配OAuth2提供商的设置。这可以通过在调用

方法时使用 oauth2Options 对象来完成。需要定义的关键参数包括: authenticate() appId

  • :您的OAuth2提供商的客户端ID。configurePluginSettings
  • authorizationBaseUrl: 服务提供商的授权端点。
  • responseType: 通常设置为 "code" for mobile apps.
  • redirectUrl: 这必须与步骤 1 中配置的重定向 URL 匹配。

You can also set additional parameters like accessTokenEndpoint, scope, 和平台特定的选项来微调身份验证过程。

For Android, update your AndroidManifest.xmlstrings.xml 文件,使用正确的方案和主机信息。 On iOS, modify the Info.plist 用于注册重定向 URL 方案的文件。这些平台特定的更改确保用户在身份验证后会被重定向回您的应用。

检查 Capacitor 版本兼容性

必须验证插件版本与 Capacitor 版本匹配。版本不符可能导致编译错误或运行时问题。因此, @byteowls/capacitor-oauth2 插件严格遵循 Capacitor 的发布版本,因此在进行操作之前,请务必检查兼容性。

插件版本 兼容的 Capacitor 版本 备注
5.x 5.x.x 要求 Xcode 14.1。注意在 changelog 中的 Breaking Changes。
4.x 4.x.x 需要 Xcode 12.0。Breaking changes 可在 changelog 中找到。
3.x 3.x.x 需要 Xcode 12.0。Breaking changes 可在 changelog 中找到。
2.x 2.x.x 需要 Xcode 11.4。Breaking changes 可在 changelog 中找到。
1.x 1.x.x

如果您正在开发 iOS 应用,请务必注意 Xcode 版本要求。使用不兼容的版本会阻止您的应用成功构建。插件文档包含详细的兼容性表格,这些表格是解决版本相关问题的绝佳资源。

如果安装后遇到问题,请卸载当前插件版本,安装适合您的Capacitor版本的插件,并再次运行同步命令。这种方法比尝试强制不兼容版本之间的工作要有效得多。

步骤 3:构建 OAuth2 认证流程

设置插件后,接下来是创建一个功能全面的认证流程。这一步确保了用户登录、令牌管理和注销的安全性,使您的应用程序能够在多个平台上管理用户会话。

创建登录流程

登录过程从调用 authenticate() 开始,传入一个选项对象。该对象应包含您的 authorizationBaseUrl, redirectUrlresponseType ,并将 'code' 设置为

以符合 PKCE 要求。该插件安全地打开提供者的登录页面,用户可以在此页面输入凭证。登录成功后,提供者会将用户重定向回您的应用程序,带有令牌和用户详细信息。

这里的最佳部分是:用户直接在 OAuth2 提供者那里输入凭证,因此您的应用程序永远不会获得敏感信息。该方法返回一个包含访问令牌、刷新令牌和用户数据(如电子邮件或个人资料详细信息)的响应对象。

在 iOS 和 Android 平台上,这个过程使用一个安全的网页视图,共享 cookie 与系统浏览器。对于 web 平台,它依赖于标准的浏览器重定向。正确配置您的重定向 URL 可以确保无论平台如何,用户体验都将顺畅。

{

  • targetLanguage":"
  • 简体中文"protectedTokens capacitor-secure-storage :[ "Cloudflare"","Capacitor"

","GitHub"

","Capgo" ","code" ","API" 离线访问 最佳用途
安全存储 AES-256 硬件 刷新令牌、长期数据
内存存储 高(临时) 活动访问令牌
Regular Storage 非敏感的偏好

为了保持会话活动,刷新令牌在它们过期之前。 在进行API调用之前,检查访问令牌是否即将过期。如果是,使用刷新令牌从您的OAuth2提供商那里获取一个新的访问令牌。 为增加可靠性,包括逻辑来在网络重新连接时重试令牌刷新。如果刷新令牌过期或被撤销,重定向用户回登录流程以重新验证。

添加注销功能

安全有效的注销过程同样重要。首先通过提供商的端点撤销刷新令牌。然后清除令牌从安全存储中并重置用户数据以确保所有会话都被终止。

仅仅删除本地令牌是不够的。 OAuth2提供商通常维护服务器端会话,这些会话可以自动重新验证用户。 撤销刷新令牌打断了授权授予与令牌链相关的令牌链,确保存储的凭证不能被重用。

“JWT访问令牌无法撤销。它们有效直到过期。由于它们是持有者令牌,因此无法使它们失效。” – lihua.zhang,Auth0员工 [5]

为了撤销令牌,调用提供商的令牌撤销端点并使用刷新令牌,然后清除本地存储。 这个服务器端操作防止令牌滥用,即使凭证被泄露。 在撤销令牌之后,移除令牌从安全存储中,重置缓存用户数据,并导航用户回登录屏幕。

For single sign-on (SSO) setups, decide whether logging out should also end sessions for other apps using the same provider. Additionally, make sure the logout process works smoothly during network interruptions by storing logout requests locally and retrying them when the connection is restored. This ensures proper cleanup on the provider’s end.

第 4 步:测试您的 OAuth2 集成

After setting up your OAuth2 configuration and developing the authentication flow, the next step is testing it thoroughly. This ensures your integration works seamlessly across devices and platforms, providing a reliable experience for your users. Testing involves verifying functionality on mobile devices and web browsers, while also identifying and resolving potential issues before launching your app.

在 iOS 和 Android 设备上测试

首先测试整个认证过程在物理 iOS 和 Android 设备上。

  • For iOS: 确保您的 URL 方案在文件中正确配置,并确认您的应用程序正确处理来自 OAuth2 提供商的重定向。避免使用 Info.plist 来进行授权请求,因为这可能导致错误。相反,使用像 Google Sign-In for iOS 或 OpenID Foundation’s AppAuth for iOS 这样的库来处理认证流程 WKWebView For Android disallowed_useragent : 检查您的应用程序是否正确处理来自 OAuth2 提供商的重定向,并确保您的应用程序正确处理来自 OAuth2 提供商的重定向。 [6].

  • Test on iOS and AndroidStep 4: Test Your OAuth2 Integration AndroidManifest.xml 包含了正确的意图过滤器来处理重定向 URI。类似于 iOS,避免使用 android.webkit.WebView __CAPGO_KEEP_0__ disallowed_useragent 用于授权请求,因为这也可能导致 [6].

错误。对于 Android,优先选择类似 Google Sign-In 或 OpenID AppAuth 的库 [7]在两种情况下,测试错误场景,例如授权服务器不可用 [6].

。如果您的应用程序请求多个权限(范围),请验证哪些已授予并处理某些可能被拒绝的情况

测试 Web [10]对于 Web 平台,使用开发人员工具监控网络请求并确保令牌安全。工具如 OAuth 2.0 Playground 可以帮助测试流程 ,而 HTTP 拦截代理如 ZAP BurpSuite [11].

在测试时,使用Authorization Code授权码与PKCE,作为公共客户端的推荐方法。确保通过POST参数或头部值安全地传输密钥,而不是通过URL参数。另外,实现安全头部,如 Referrer-Policy 以增强保护 [11].

修复常见问题

在测试过程中,您可能会遇到需要解决的问题:

  • 错误的重定向URI:重定向URI不符会导致“未经授权的客户端”错误。确保重定向URI在OAuth2提供者的设置、__CAPGO_KEEP_0__应用中的文件和原生平台清单中完全匹配。 capacitor.config.json file in your Capacitor app, and the native platform manifests.

    The sso accepted route需要支持iosScheme和hostname的 combination: ionic://com.myapp.mybundle” - LBopp [8]

  • PKCE 验证错误:确认PKCE支持并正确配置,因为它对于安全应用程序至关重要 [9].

  • 插件实现错误:错误,如“iOS上未实现插件”通常表明缺少配置或Capacitor环境中的问题。启用OAuth2插件的日志,以帮助识别和解决这些问题 [4].

  • 状态不匹配错误: 如果授权请求中的状态参数与重定向响应中的状态参数不匹配,可能存在安全风险。特别是在使用自定义 OAuth 处理器(如 Facebook)时,需要格外小心检查自定义处理器 code 以确保没有错误或配置错误 [4].

第 5 步:安全您的 OAuth2 实现

保护您的 OAuth2 整合至关重要,以 safeguarding sensitive 数据和最小化漏洞。以下是确保您的实现保持安全的关键实践

启用 PKCE 为更好的安全性

PKCE

One of the most effective ways to secure your authorization flow is by enabling PKCE (Proof Key for Code Exchange). PKCE helps prevent unauthorized interception of authorization codes. Here’s how it works:

  • 首先,生成一个随机 code_verifier 长度为 43 到 128 个字符的
  • 然后,创建一个 code_challenge 通过使用SHA-256并以base64 URL格式编码结果。 code_verifier 如果您正在使用

插件,启用PKCE非常简单。以下是示例配置: capacitor-community/generic-oauth2 此插件自动处理PKCE,并不支持__CAPGO_KEEP_0__流程。默认情况下,

{
  responseType: "code",
  pkceEnable: true,
  redirectUrl: "com.companyname.appname:/"
}

This plugin automatically handles PKCE and does not support the Code Flow without it. The code_challenge_method 使用安全存储的令牌 [12].

安全存储OAuth2令牌至关重要,以防止未经授权的访问。对于原生移动应用程序,利用操作系统提供的安全存储:

在iOS上,使用

  • Keychain 进行硬件加密和OS级别保护。 在Android上,使用
  • 进行硬件加密和OS级别保护。 密钥库, 也可以支持 生物识别验证 为安全性提供额外的保护。

对于 Web 应用程序,存储令牌在 HttpOnly 安全 cookie 中,带有 SameSite 属性以减轻跨站点脚本 (XSS) 风险。

以下是安全存储选项的快速比较:

存储选项 最佳用途 安全性优势 注意事项
iOS Keychain 原生 iOS 应用 硬件加密和操作系统级保护 需要平台特定的实现
Android Keystore 原生 Android 应用 具有潜在生物识别保护的安全存储 设备安全功能有所不同
HttpOnly Cookies Web 浏览器 抵抗 XSS 并且安全的自动传输 必须配置同域名的API访问
前端后端 所有平台 令牌永远不会暴露给客户端 需要额外的服务器基础设施

为了提高安全性,请考虑使用短期访问令牌和加密存储。例如,Auth0 将活跃刷新令牌限制为每个用户每个应用程序200个,以减少风险 [13]您还可以通过使用 HttpOnly cookie 的后端前端 (BFF) 代理来增强安全性 [14].

设置内容安全策略

除了安全存储之外,实施强大的内容安全策略 (CSP) 可以帮助保护您的应用程序免受跨站脚本攻击 (XSS) 和 code 注入等攻击。您可以使用 HTTP 头或在 HTML 中添加一个 Content-Security-Policy tag 在服务器级别配置 CSP <meta> 需要重点关注的关键指令包括:

Key directives to focus on include:

  • default-src: Sets fallback rules for all content types.
  • script-src: Controls which JavaScript files are allowed to execute.
  • connect-src: Manages API calls and OAuth2 interactions.
  • frame-ancestors: Prevents clickjacking by restricting who can embed your app in an iframe.

为了获得最大限度的保护,请使用严格的 nonce 或哈希代替广泛的 allowlist,并避免使用指令,如 unsafe-inlineunsafe-eval。如果您的应用程序正在从 HTTP 切换到 HTTPS,请考虑添加 upgrade-insecure-requests 指令。要确保您的 OAuth2 内容不能被嵌入到其他地方,请设置 frame-ancestors 'none'.

结论和下一步

关键点

您已经成功在您的Capacitor应用中实现了OAuth2身份验证,通过遵循五个核心步骤。这些步骤包括设置OAuth2提供商、安装所需插件、创建身份验证流程、在多个平台上测试以及使用PKCE和适当的令牌存储来安全地集成。请记住,OAuth 2.0是一个 授权协议,而不是身份验证协议 [1]。它的主要重点是授予访问权限而不是验证用户身份。

安全性至关重要,尤其是对于移动应用。使用OAuth 2.0的组织报告了与依赖基本身份验证方法的组织相比,API访问安全事件的34%降低。 [19]通过采用最佳实践,如使用短期访问令牌、实现PKCE和安全存储令牌,您已经为应用的身份验证系统奠定了坚实的基础。

现在,您可以探索如何在保持安全框架的同时扩展应用的功能。

添加更多功能

通过OAuth2的实施,您有机会通过添加更多功能来增强应用。例如:

  • OpenID Connect (OIDC): 使用 OAuth 2.0 扩展用户身份验证和单点登录 (SSO) 功能 [16].
  • Multi-Factor Authentication (MFA): 增强安全性通过添加额外的保护层 [17].
  • Progressive Profiling: 逐步收集用户数据以改善用户体验和注册体验 [15].

For ongoing maintenance and updates, consider tools like Capgo, 这使您能够实时推送更新、修复和新功能 - 无需等待应用商店批准。这对于处理安全补丁或快速推出新身份验证功能尤其有用。

More Resources

为了进一步增强 OAuth2 实现,利用这些资源和策略:

  • API Gateway Security: 强化部署,通过实施身份验证和授权措施、缓存、以及健壮的日志和分析 [20].

  • Aaron Parecki的建议: 根据Aaron Parecki的建议, OAuth 2.0简化:

    “The Authorization Code Flow is the most secure of the OAuth 2.0 flows and should be used whenever possible for server-side applications” [18].

以下是快速参考表,指导您的下一步行动:

阶段 重点区域
系统配置 管理令牌生命周期、强制HTTPS、安全存储敏感信息
令牌管理 使用短期访问令牌并旋转刷新令牌
验证流程 验证签名并检查令牌过期

保持领先,定期进行安全审计并保持您的实现最新。例如,OAuth 2.1 引入了改进,如要求 PKCE 对所有授权 code 请求,并退役了不安全的流程 [19]此外,Capacitor 文档和 OAuth2 插件仓库提供了持续的技术支持,以帮助维护和改进您的应用程序的身份验证系统。

常见问题

::: faq

为什么我应该在移动应用程序中使用 Authorization Code 流程(PKCE)?

为什么在移动应用程序中使用 Authorization Code 流程(PKCE)?

The Authorization Code 流程(PKCE) is a go-to choice for mobile apps because it boosts security by addressing risks like authorization code interception and man-in-the-middle attacks. PKCE (Proof Key for Code Exchange) works by adding an extra layer of protection: it requires a unique code challenge that the authorization server validates. This ensures that only the intended app can finalize the authentication process.

由于移动应用程序被分类为公共客户端,因此无法安全地存储客户端密钥。PKCE 就是这样一种机制,它允许您在不暴露敏感数据的情况下安全地验证用户。结果?一个更安全、更可靠的登录过程,改善了整体用户体验。 :::

::: faq

iOS、Android和web应用程序中如何安全存储OAuth2令牌?

为了在不同平台上安全存储OAuth2令牌,必须使用 针对每个平台的安全存储解决方案. 对于iOS,Keychain Services是首选选项,而Android用户应该依赖于Android Keystore系统。这些工具是专门为保护敏感数据而设计的,包括令牌。 在web上,安全cookie或加密的浏览器存储可以作为有效的替代方案。

添加加密,例如AES-256,令牌的安全性又增加了一层。 使用 短期令牌 并在需要时安全刷新它们进一步降低了风险。 在OAuth2过程中实施 PKCE (Proof Key for Code Exchange) 可以阻止未经授权的访问。 为了获得更强的保护,请考虑在存储令牌时集成生物识别验证,确保只有合法的用户才能访问存储的令牌。 :::

::: faq

在Capacitor应用程序中测试OAuth2集成时最常见的问题是什么,如何解决?

When testing OAuth2 integration in Capacitor apps, developers might run into a few common roadblocks. Here’s a quick rundown of what to watch out for:

  • 无效的客户端凭证: 确保您的客户端 ID 和密钥设置正确,并与您的 OAuth 提供商配置中的详细信息匹配。即使是小的拼写错误也会导致问题。
  • 重定向 URI 不匹配: 应用程序中的重定向 URI 必须与 OAuth 提供商中注册的 URI 完全匹配。请仔细检查以避免不必要的头痛。
  • 令牌过期: 令牌不会永远存在。设置可靠的令牌刷新系统来处理过期令牌,保持用户体验不受影响。
  • 权限配置不正确: 应用程序中请求的权限需要与 OAuth 提供商配置中的权限匹配。权限不匹配可能会导致意外错误。

要解决这些问题,请仔细审查应用程序的 OAuth 设置。实现强大的错误处理来捕获和解决问题,测试您的身份验证流程在不同场景下。工具,如 Capgo,可以使生活更轻松,允许您直接将更新和修复推送到应用程序,而无需等待应用商店批准,保持开发高效,用户满意。

Keep going from 5 Steps to Implement OAuth2 in Capacitor Apps

继续阅读 5 步实现 OAuth2 在 __CAPGO_KEEP_0__ 应用程序中的步骤 5 步实现 OAuth2 在 Capacitor 应用中的步骤 为安全和合规性规划,连接它 加密 加密的实现细节 合规 合规的实现细节 Capgo 安全扫描器 Capgo 安全扫描器的产品工作流程 Capgo 安全 Capgo 安全的产品工作流程 Capgo 信任中心 Capgo 信任中心的产品工作流程

Capacitor 应用程序的实时更新

当 web 层 bug 活跃时,通过 Capgo 将修复推送到用户,而不是等待几天的应用商店批准。用户在后台接收更新,而本机更改保持在正常的审查路径中。

立即开始

博客最新文章

Capgo 给您创建真正专业的移动应用所需的最佳见解。