我在 android 应用程序中执行身份验证时遇到问题。
此协议的授权流程如下所示:
[java/kotlin 代码] 应用程序通过打开一些已知的 URL(带有网页)来触发身份验证流程。
[browser/customtab/webview] 用户与此网页交互(在我的案例中输入短信代码)
[browser/customtab/webview] 页面将此代码发送回服务器,并将我们重定向到带有身份验证令牌的新 URL。
[java/kotlin 代码] 应用程序必须拦截并解析最后一个重定向 URL 以从中获取身份验证令牌。
[java/kotlin 代码] 之后应用程序可以使用这些令牌对登录做出响应
实际上我的应用程序是开发者建议的应用程序和不发送的短信(例如我总是使用硬编码的 1234)
所以对我来说最好的方法是在没有浏览器部分的情况下实现所有流程。但在这种情况下,我不知道如何获取(我想它可能会改变)并正确形成最后一个重定向 URL 的输入参数(来自第 3 步)。我试图在网页中查看此过程的 JS 实现,但它被混淆了,根本没有帮助。
这也是我无法更改后端(服务器)实现的原因。
所以目前我正在尝试使用 CustomTabs(作为浏览器的一部分)来实现这个流程,就像协议文档推荐的那样。
CusomTabs 的问题是我无法在本机 (java/kotlin) 代码中使用身份验证令牌(来自第 3 步)拦截来自服务器的最后一个 URL。我正在尝试在我的活动中为此使用 IntentFilter。但是该 URL 使用的是“https”模式,看起来 AppLink 在这种情况下不起作用。 StackOverflow 上的一些其他主题建议通过将 URL 架构从“https”更改为“myapp”之类的内容来解决此问题,但这对我来说不是一个选项,因为没有人会更改此过程的服务器实现。
我知道我可以使用 WebView 拦截此 URL,但我仍然想尝试完全不使用浏览器或使用 CustomTabs 来实现它。
寻找任何建议?谢谢!