OAuth2 - 移动应用重定向问题,停留在浏览器中

Posted

技术标签:

【中文标题】OAuth2 - 移动应用重定向问题,停留在浏览器中【英文标题】:OAuth2 - mobile app redirection issue, stays in browser 【发布时间】:2021-07-18 13:13:35 【问题描述】:

我知道存在类似的线程,但我找不到适合我的用例的解决方案。

我正在尝试通过 Flutter 制作的移动应用使用 OAuth2 进行身份验证。作为一个例子,我在这里展示了 android 案例。

我提供的重定向 url 必须以 http(s) 开头,否则身份提供者会拒绝它。我在我的 AndroidManifest.xml 中添加了以下活动:

<activity android:name="com.linusu.flutter_web_auth.CallbackActivity">
        <intent-filter android:label="flutter_web_auth" 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" />
        </intent-filter>
    </activity>

我正在使用 lib oauth2_client 发出请求。

var myOAuth2Client = new MyOAuth2Client(redirectUri: "http://my-app", customUriScheme: "http");
AccessTokenResponse tknResp = await myOAuth2Client.getTokenWithAuthCodeFlow(
    clientId: 'xxxxxxxxxxxxxx',
    clientSecret: 'xxxxxxxxxxxxxx',
    scopes: ['the.profile']).catchError((onError) 
  print("Error $onError");
);

有了这个,我很好地重定向到浏览器中的身份提供者登录页面。使用凭据登录后,我不会被重定向到我的应用程序。相反,我被重定向到浏览器中的无效 url。请注意,如果我强制使用我的应用而不是浏览器打开 url,它会运行良好。

我已阅读有关 Android 应用程序链接的信息,但我知道它需要在服务器端进行编辑,而我无权访问(这里的目标是让独立的移动应用程序进行身份验证)。

有人可以指导我如何重定向到我的应用吗? (如果这是不可能的并且需要我这边的服务器,那么流程是什么?)谢谢! :)

【问题讨论】:

您有什么解决办法吗? @Reedy 【参考方案1】:

如果您想使用 https 重定向 URI,则必须使用应用链接返回应用。正确处理是一个棘手的流程。

有一个众所周知的问题,您需要用户手势才能收到响应并避免您描述的问题。

一种可能的快速解决方案是将授权服务器配置为在每次用户登录后显示同意屏幕,以充当用户手势。

有一个我的代码示例,您可以在模拟器上运行,它有一些博客链接,更详细地解释了棘手的问题:

Android Claimed HTTPS Schemes Code Sample

虽然它是用 Kotlin 编写的,但您可能会发现在 Flutter 中更难实现移动安全性。

【讨论】:

以上是关于OAuth2 - 移动应用重定向问题,停留在浏览器中的主要内容,如果未能解决你的问题,请参考以下文章

为啥在发送 Mailchimp API oauth2 初始请求后我没有在浏览器中被重定向?

在 OAuth2 身份验证调用和重定向调用之间传递值

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

是否可以使用OAuth2 API发布请求设置“重定向URI”? [关闭]

用户接受权限后重定向回应用程序 Oauth2

Flutter:Oauth2 - 重定向 uri 的问题