Flutter:Oauth2 - 重定向 uri 的问题

Posted

技术标签:

【中文标题】Flutter:Oauth2 - 重定向 uri 的问题【英文标题】:Flutter: Oauth2 - Problems with redirect uri 【发布时间】:2020-02-03 06:04:34 【问题描述】:

我想在我的 Flutter 应用中设置 Spotify API 的 oAuth 身份验证。我选择了 flutter_web_auth 0.1.1 包。 到目前为止,我已经设法让用户可以登录到 Spotify。登录后,用户应该被重定向回我的应用程序。那是行不通的。 Spotify 总是将用户重定向到另一个网站,而不是返回应用程序。用户登录后如何关闭 WebView 并将用户重定向到我的应用?

import 'package:flutter/material.dart';
import 'package:flutter_web_auth/flutter_web_auth.dart';

void main() => runApp(MyApp());

class MyApp extends StatefulWidget 
  @override
  _MyAppState createState() => _MyAppState();


class _MyAppState extends State<MyApp> 
  @override
  void initState() 
    super.initState();
    authenticate();
  

  void authenticate() async 
    // Present the dialog to the user
    final result = await FlutterWebAuth.authenticate(
      url:
          "https://accounts.spotify.com/de/authorize?client_id=78ca499b2577406ba7c364d1682b4a6c&response_type=code&redirect_uri=https://partyai/callback&scope=user-read-private%20user-read-email&state=34fFs29kd09",
      callbackUrlScheme: "https://partyai/callback",
    );

// Extract token from resulting url
    final token = Uri.parse(result).queryParameters['token'];
    print('token');
    print(token);
  

  @override
  Widget build(BuildContext context) 
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Web Auth example'),
        ),
        body: Center(
          child: Text(
            'test',
          ),
        ),
      ),
    );
  


android/app/src/main/AndroidManifest.xml

<activity android:name="com.linusu.flutter_web_auth.CallbackActivity" >
            <intent-filter android:label="flutter_web_auth">
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
                <data android:scheme="https://partyai/callback" />
            </intent-filter>
        </activity>

enter image description here

【问题讨论】:

嘿,你得到令牌后在哪里存储它?共享偏好?安全存储? 嗨,我决定使用 Spotify Native SDK 而不是使用 Web API。因为这个原因,我没有解决这种问题 【参考方案1】:

callbackUrlScheme 应为partyairedirect_uri 应为partyai:/,AndroidManifest.xml android:scheme 值应为partyai

【讨论】:

非常感谢。有用。你为我节省了很多时间【参考方案2】:

使用此代码

void authenticate() async 
  // Present the dialog to the user
  final result = await FlutterWebAuth.authenticate(
    url:
        "https://accounts.spotify.com/authorize?client_id=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx&redirect_uri=yourname:/&scope=user-read-currently-playing&response_type=token&state=123",
    callbackUrlScheme: "yourname",
  );

// Extract token from resulting url
  final token = Uri.parse(result);
  String at = token.fragment;
  at = "http://website/index.html?$at"; // Just for easy persing
  var accesstoken = Uri.parse(at).queryParameters['access_token'];
  print('token');
  print(accesstoken);

添加到 AndroidManifest.xml android\app\src\main

                 ...
        </activity>
        <activity android:name="com.linusu.flutter_web_auth.CallbackActivity" >
            <intent-filter android:label="flutter_web_auth">
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
                <data android:scheme="yourname" />
            </intent-filter>
            </activity>
    </application>
</manifest>

【讨论】:

【参考方案3】:

我还面临使用flutter_web_auth插件从flutter中的身份验证页面导航回应用程序的问题。

据我了解,一切正常,但它并没有返回到颤振应用程序。

问题:下面代码中的.CallbackActivity是什么

 <activity android:name="com.linusu.flutter_web_auth.CallbackActivity" >
        <intent-filter android:label="flutter_web_auth">
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data android:scheme="yourname" />
        </intent-filter>
        </activity>

【讨论】:

欢迎来到 SO;您的帖子实际上是另一个问题,因此请考虑添加评论或发布新问题。答案应该只针对原始问题的实际解决方案

以上是关于Flutter:Oauth2 - 重定向 uri 的问题的主要内容,如果未能解决你的问题,请参考以下文章

coinbase oauth2 重定向 uri

出现错误:redirect_uri_mismatch 请求中的重定向 URI:http://localhost:8080/oauth2callback 与注册的重定向 URI 不匹配

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

OAuth2(授权代码授予类型)的重定向 URI 中是不是应该存在动态查询参数

Google Drive OAuth2 - 对回调和重定向 URI 感到困惑

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