You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter跨平台应用Azure AD B2C认证redirect_uri不匹配问题求助

问题修复方案

1. 修正Redirect URI不匹配问题

Azure门户中注册的redirect_uri是com.bol.azure_test://oauth/redirect,但你的代码里仅填写了com.bol.azure_test,这是错误提示的直接原因。修改代码中的redirect_uri参数为:

'redirect_uri': 'com.bol.azure_test://oauth/redirect',

2. 修复授权端点URL格式

你当前的端点路径存在语法错误,正确的Azure AD B2C授权端点格式如下,记得替换{your-tenant-name}为实际租户名称(比如租户域名是bol.onmicrosoft.com,则填bol):

var uri = Uri.https(
  '{your-tenant-name}.b2clogin.com',
  '/{your-tenant-name}.onmicrosoft.com/B2C_1_signupsignin/oauth2/v2.0/authorize',
  queryParameters
);

另外,grant_type参数无需在授权请求中携带,该参数是后续获取token时使用的。

3. 改用浏览器唤起登录页面(核心修正)

你当前用http.get直接请求授权端点是后端服务的调用逻辑,移动端必须唤起浏览器(或内嵌WebView)让用户完成登录交互。可以用Flutter的url_launcher包实现:

  • 先在pubspec.yaml添加依赖:
    dependencies:
      url_launcher: ^6.2.5
    
  • 替换按钮点击逻辑,移除http.get,改为打开浏览器:
    import 'package:url_launcher/url_launcher.dart';
    
    // ...
    
    onPressed: () async {
      print("Find Azure API Button Click");
      var queryParameters = {
        'p': "B2C_1_signupsignin",
        'client_id': "your-actual-client-id", // 替换为真实的client_id
        'nonce': 'defaultNonce',
        'redirect_uri': 'com.bol.azure_test://oauth/redirect',
        'scope': "offline_access openid",
        'response_type': "code",
        'prompt': "login",
      };
      var uri = Uri.https(
        '{your-tenant-name}.b2clogin.com',
        '/{your-tenant-name}.onmicrosoft.com/B2C_1_signupsignin/oauth2/v2.0/authorize',
        queryParameters
      );
      if (await canLaunchUrl(uri)) {
        await launchUrl(uri, mode: LaunchMode.externalApplication); // 唤起系统浏览器
      } else {
        print('无法打开登录页面');
      }
    },
    

4. 配置应用URL Scheme

确保Flutter应用已注册对应的URL Scheme,让登录完成后能跳转回应用:

  • Android:在android/app/src/main/AndroidManifest.xml的主Activity中添加intent-filter:
    <activity
        android:name=".MainActivity"
        android:exported="true">
        <!-- 原有配置 -->
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data android:scheme="com.bol.azure_test" />
        </intent-filter>
    </activity>
    
  • iOS:在ios/Runner/Info.plist中添加:
    <key>CFBundleURLTypes</key>
    <array>
        <dict>
            <key>CFBundleURLSchemes</key>
            <array>
                <string>com.bol.azure_test</string>
            </array>
        </dict>
    </array>
    

5. 后续补充:获取Token

用户登录完成后,浏览器会携带授权码code跳转到com.bol.azure_test://oauth/redirect,你需要在Flutter中监听该URL跳转,拿到code后向B2C的token端点发送POST请求,获取access token和refresh token。

内容的提问来源于stack exchange,提问作者Sumchans

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 20:05:15