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



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

我正在尝试使用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>

我正在使用liboauth2_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应用程序链接的文章,但我知道它需要在服务器端进行编辑,而我无法访问(这里的目标是拥有一个独立的移动应用程序身份验证(。

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

如果您想使用https重定向URI,则必须使用应用程序链接才能返回到应用程序。这是一个棘手的流程。

有一个众所周知的问题,你需要一个用户手势来接收响应,并避免你描述的问题。

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

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

Android声称HTTPS方案代码示例

不过,它是用Kotlin写的,你可能会发现在Flutter中很难实现移动安全。

最新更新