使用 Android 应用链接作为 OAuth2 重定向 URI
Posted
技术标签:
【中文标题】使用 Android 应用链接作为 OAuth2 重定向 URI【英文标题】:Use Android App Link as an OAuth2 Redirect URI 【发布时间】:2021-07-21 01:04:35 【问题描述】:是否可以使用以https://
开头的android App Links,例如:https://my-app.com/callback
在OAuth2 流程结束时从Android WebView 重定向回我的应用程序?我知道正常的深层链接是如何工作的,例如 com.my-app://
或 my-app://
可用于重定向回我的应用程序。根据我的理解,如果AndroidManifest.xml
中提供了足够的 IntentFilter,WebView 不知道如何处理此类协议,将请求传递给操作系统,然后操作系统将请求传递给我处理此 url 的应用程序。
这可以通过https://
方案来完成,否则重定向将始终被 WebView 捕获并且无法重定向回我的应用程序?
指定我想通过步骤实现的目标:
AndroidManifest.xml
中提供了一个 IntentFilter 来处理应用链接,例如:
<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>
https://my-app.com/.well-known/assetlinks.json
提供了有效的 assetlinks.json
(此时,IntentFilterIntent
日志显示 JSON 验证成功,我可以使用类似 npx uri-scheme open https://my-app.com/callback
的命令从终端打开应用程序)
我的应用程序通过启动 CustomTabsIntent.launchUrl
来启动 OAuth2 流程,其 url 如下:
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
完成这些步骤后,我希望我的应用程序在成功登录后打开,因为它是 url 的有效处理程序,并且不希望卡在浏览器中。这可能吗,或者请求永远不会从浏览器转发到操作系统,因为浏览器是https://
方案的有效处理程序?
如果上述方法是不可能的,有没有办法从 WebView 导航回 App,提供 auth_code
或唯一的方法是使用自定义方案?
【问题讨论】:
【参考方案1】:原来<data android:scheme="http" android:host="my-app.com/callback" />
是错误的,应该使用<data android:scheme="http" android:host="my-app.com" android:path="/callback" />
而不是这个。 android:host
不应包含 path
。我确认它在没有任何额外用户手势的情况下运行良好,就像它是一个普通的深层链接一样。浏览器实际上识别出这个 url 是一个声明的 url 并将响应转发给应用程序。
【讨论】:
【参考方案2】:绝对可以(并且推荐)使用这样的声明的 HTTPS 方案,尽管我没有使用 WebView 这样做。
棘手的部分是如果没有用户手势(用户单击),重定向回应用程序将无法可靠地工作。用户体验和可靠性都有些棘手,您可能需要一个“插页式”互联网网页。
在移动 OAuth 中,建议使用 AppAuth Pattern,系统浏览器用于处理重定向,以便应用永远无法访问凭据。
有关更多详细信息,请参阅下面的代码示例,您可以在模拟器上运行该示例。示例链接到一些博客文章,其中讨论了优缺点,以便您查看此类解决方案是否符合您的喜好:
Code Sample【讨论】:
谢谢,RFC 向我保证这是可能的。以上是关于使用 Android 应用链接作为 OAuth2 重定向 URI的主要内容,如果未能解决你的问题,请参考以下文章
Rest API 中的 Spring Security Oauth2