使用 Android 应用程序链接作为 OAuth2 重定向 URI

f4z*_*k4s 5 android deep-linking oauth-2.0 applinks android-app-links

是否可以使用 Android 应用程序链接,例如https://https://my-app.com/callback在 OAuth2 流程结束时从 Android WebView 重定向回我的应用程序?我知道正常的深层链接如何工作,例如com.my-app://my-app://可用于重定向回我的应用程序。根据我的理解,WebView 不知道如何处理此类协议,将请求传递给操作系统,然后操作系统将请求传递给我的应用程序,如果AndroidManifest.xml.

这可以通过方案来完成吗https://?或者重定向始终会被 WebView 捕获,并且无法重定向回我的应用程序?

指定我想要通过步骤实现的目标:

  1. 提供了一个 IntentFilterAndroidManifest.xml来处理应用程序链接,例如:
<intent-filter android:autoVerify="true">
 <action android:name="android.intent.action.VIEW" />
 <category android:name="android.intent.category.DEFAULT" />
 <category android:name="android.intent.category.BROWSABLE" />
 <data android:scheme="http" android:host="my-app.com/callback" />
 <data android:scheme="https" />
</intent-filter>
Run Code Online (Sandbox Code Playgroud)
  1. assetlinks.json提供了有效的https://my-app.com/.well-known/assetlinks.json(此时,IntentFilterIntent日志显示 JSON 验证成功,我可以使用类似命令从终端打开应用程序npx uri-scheme open https://my-app.com/callback
  2. CustomTabsIntent.launchUrl我的应用程序通过使用如下 URL启动来启动 OAuth2 流程:
https://accounts.google.com/o/oauth2/v2/auth?
 scope=email%20profile&
 response_type=code&
 state=state&
 redirect_uri=https://my-app.com/callback&
 client_id=client_id
Run Code Online (Sandbox Code Playgroud)

完成这些步骤后,我希望我的应用程序在成功登录后打开,因为它是 URL 的有效处理程序,并且不希望卡在浏览器中。这可能吗,或者请求永远不会从浏览器转发到操作系统,因为浏览器是该https://方案的有效处理程序?

如果上述不可能,是否有办法从 WebView 导航回应用程序,提供auth_code或唯一的方法是使用自定义方案?

Gar*_*her 0

绝对可以(并且推荐)使用这样的声明 HTTPS 方案,尽管我还没有使用 WebView 这样做。

棘手的部分是,如果没有用户手势(用户单击的手势),重定向回应用程序将无法可靠地工作。用户体验和可靠性都有点棘手,您可能需要一个“插页式”互联网网页。

在移动 OAuth 中,建议使用AppAuth 模式,其中系统浏览器用于处理重定向,以便应用程序永远无法访问凭据。

有关更多详细信息,请参阅下面的代码示例,您可以在模拟器上运行该代码示例。该示例链接到一些博客文章,其中讨论了优点和缺点,以便您可以了解这种类型的解决方案是否符合您的喜好: