简体   繁体   English

MSAL 登录在 Flutter 应用程序 (android) 中失败,没有明确的错误原因

[英]MSAL login fails in Flutter app (android), no clear error why

I'm trying to make a simple login button using msal login inside a Flutter app (Android and IOS), but it simply does not work and I dont know why.我正在尝试在 Flutter 应用程序(Android 和 IOS)中使用 msal 登录创建一个简单的登录按钮,但它根本不起作用,我也不知道为什么。 I'm using azure_ad_authentication 1.0.4 (before that I tried msal_flutter 2.0.1 but when i pressed the button it just crashed the whole program) I tried many configuration files, but I can not be able to make this work and the error is not clear enough to find a solution.我正在使用 azure_ad_authentication 1.0.4(在此之前我尝试过 msal_flutter 2.0.1 但是当我按下按钮时它只是让整个程序崩溃)我尝试了很多配置文件,但我无法完成这项工作并且错误是不够清楚,无法找到解决方案。

  • azure_ad_authentication: ^1.0.4 azure_ad_authentication:^1.0.4
  • dart: ">=2.18.0 <3.0.0" dart:“>=2.18.0 <3.0.0”
  • flutter:">=3.0.0" flutter:">=3.0.0"

error错误

D/DART/NATIVE( 9305): onMethodCall initialize
D/EGL_emulation( 9305): app_time_stats: avg=482603.22ms min=482603.22ms max=482603.22ms count=1
W/LibraryConfiguration( 9305):  [2023-01-24 15:02:33 - thread_name : Thread-26, correlation_id : UNSET]  Android 32 MsalConfiguration was already initialized
W/LocalMSALController:getDeviceMode( 9305):  [2023-01-24 15:02:33 - thread_name : pool-11-thread-1, correlation_id : caeccf19-fa22-4ea3-be4d-8c44573f4ae4]  Android 32 LocalMSALController is not eligible to use the broker. Do not check sharedDevice mode and return false immediately.
W/Telemetry( 9305):  [2023-01-24 15:02:33 - thread_name : main, correlation_id : UNSET]  Android 32 Telemetry is disabled because the Telemetry context or configuration is null
E/flutter ( 9305): [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: Instance of 'MsalInitializationException'
E/flutter ( 9305): #0      AzureAdAuthentication._initialize (package:azure_ad_authentication/azure_ad_authentication.dart:142:7)
E/flutter ( 9305): <asynchronous suspension>
E/flutter ( 9305): #1      AzureAdAuthentication.createPublicClientApplication (package:azure_ad_authentication/azure_ad_authentication.dart:34:5)
E/flutter ( 9305): <asynchronous suspension>

msal_default_config.json msal_default_config.json

{
  "client_id" : "[CLIENT_ID]",
  "authorization_user_agent" : "DEFAULT",
  "redirect_uri" : "msauth://com.example.app/[hash]",
  "authorities": [
    {
      "type": "AAD",
      "audience": {
        "type": "AzureADandPersonalMicrosoftAccount"
      },
      "tenant_id": "common",
      "default": true
    }
  ],
  "minimum_required_broker_protocol_version": "3.0",
  "multiple_clouds_supported": false,
  "broker_redirect_uri_registered": true,
  "web_view_zoom_controls_enabled": true,
  "web_view_zoom_enabled": true,
  "environment": "Debug",
  "power_opt_check_for_network_req_enabled": true,
  "handle_null_taskaffinity": false,
  "authorization_in_current_task": false,
  "http": {
    "connect_timeout": 10000,
    "read_timeout": 30000
  },
  "logging": {
    "pii_enabled": false,
    "log_level": "WARNING",
    "logcat_enabled": true
  },
  "account_mode": "SINGLE",
  "browser_safelist": [
    {
      "browser_package_name": "com.android.chrome",
      "browser_signature_hashes": [
        "7fmduHKTdHHrlMvldlEqAIlSfii1tl35bxj1OXN5Ve8c4lU6URVu4xtSHc3BVZxS6WWJnxMDhIfQN0N0K2NDJg=="
      ]
    },
    {
      "browser_package_name": "org.mozilla.firefox",
      "browser_signature_hashes": [
        "2gCe6pR_AO_Q2Vu8Iep-4AsiKNnUHQxu0FaDHO_qa178GByKybdT_BuE8_dYk99G5Uvx_gdONXAOO2EaXidpVQ=="
      ]
    },
    {
      "browser_package_name": "com.sec.android.app.sbrowser",
      "browser_signature_hashes": [
        "ABi2fbt8vkzj7SJ8aD5jc4xJFTDFntdkMrYXL3itsvqY1QIw-dZozdop5rgKNxjbrQAd5nntAGpgh9w84O1Xgg=="
      ]
    },
    {
      "browser_package_name": "com.cloudmosa.puffinFree",
      "browser_signature_hashes": [
        "1WqG8SoK2WvE4NTYgr2550TRhjhxT-7DWxu6C_o6GrOLK6xzG67Hq7GCGDjkAFRCOChlo2XUUglLRAYu3Mn8Ag=="
      ]
    },
    {
      "browser_package_name": "com.duckduckgo.mobile.android",
      "browser_signature_hashes": [
        "S5Av4cfEycCvIvKPpKGjyCuAE5gZ8y60-knFfGkAEIZWPr9lU5kA7iOAlSZxaJei08s0ruDvuEzFYlmH-jAi4Q=="
      ]
    },
    {
      "browser_package_name": "com.explore.web.browser",
      "browser_signature_hashes": [
        "BzDzBVSAwah8f_A0MYJCPOkt0eb7WcIEw6Udn7VLcizjoU3wxAzVisCm6bW7uTs4WpMfBEJYf0nDgzTYvYHCag=="
      ]
    },
    {
      "browser_package_name": "com.ksmobile.cb",
      "browser_signature_hashes": [
        "lFDYx1Rwc7_XUn4KlfQk2klXLufRyuGHLa3a7rNjqQMkMaxZueQfxukVTvA7yKKp3Md3XUeeDSWGIZcRy7nouw=="
      ]
    },
    {
      "browser_package_name": "com.microsoft.emmx",
      "browser_signature_hashes": [
        "Ivy-Rk6ztai_IudfbyUrSHugzRqAtHWslFvHT0PTvLMsEKLUIgv7ZZbVxygWy_M5mOPpfjZrd3vOx3t-cA6fVQ=="
      ]
    },
    {
      "browser_package_name": "com.opera.browser",
      "browser_signature_hashes": [
        "FIJ3IIeqB7V0qHpRNEpYNkhEGA_eJaf7ntca-Oa_6Feev3UkgnpguTNV31JdAmpEFPGNPo0RHqdlU0k-3jWJWw=="
      ]
    },
    {
      "browser_package_name": "com.opera.mini.native",
      "browser_signature_hashes": [
        "TOTyHs086iGIEdxrX_24aAewTZxV7Wbi6niS2ZrpPhLkjuZPAh1c3NQ_U4Lx1KdgyhQE4BiS36MIfP6LbmmUYQ=="
      ]
    },
    {
      "browser_package_name": "mobi.mgeek.TunnyBrowser",
      "browser_signature_hashes": [
        "RMVoXuK1sfJZuGZ8onG1yhMc-sKiAV2NiB_GZfdNlN8XJ78XEE2wPM6LnQiyltF25GkHiPN2iKQiGwaO2bkyyQ=="
      ]
    },
    {
      "browser_package_name": "org.mozilla.focus",
      "browser_signature_hashes": [
        "L72dT-stFqomSY7sYySrgBJ3VYKbipMZapmUXfTZNqOzN_dekT5wdBACJkpz0C6P0yx5EmZ5IciI93Q0hq0oYA=="
      ]
    },
    {
      "browser_package_name": "com.cake.browser",
      "browser_signature_hashes": [
        "442kvSdZT1fEAewzSi8Wre73x4mWmHBhOFtQ-9T9N6ExZzUdsELUmaaS0edsI7ur2nY-bjbWX7IpluFOyvKkOA=="
      ]
    },
    {
      "browser_package_name": "com.brave.browser",
      "browser_signature_hashes": [
        "wIwX1v_1TfPxHm5qn-_jdGoH3Pa9VVMR5dtVz0Y0xqPkyM_KlavjWPSgOolrVH05AVO1cHWoLPqMzCH04Pw8LQ=="
      ]
    },
    {
      "browser_package_name": "com.kiwibrowser.browser",
      "browser_signature_hashes": [
        "kmPeixKA04JcDuWNBMUPu_6WaODr6a9ofROUIHIGxiiFGvH8Y92MonrDQmsNqEJO2DQkpEQc425WmAYB4NlD3Q=="
      ]
    },
    {
      "browser_package_name": "com.mi.globalbrowser.mini",
      "browser_signature_hashes": [
        "6FEWlPfWn-omfES2ZYDj5bZUIR5au_nfyRr-o_1R3fesjfoV1JptBMumtvVIo0q37abcMRWQt9RUSNXpzKpNdA=="
      ]
    },
    {
      "browser_package_name": "mark.via.gp",
      "browser_signature_hashes": [
        "oTJf5e5nB1NinkdBpkkmhPnwbVRmDlHZ-s_QhvyuGKM5nq5XtjA439O31wxrkL6ReHyyKfDHFUHpQnoXoj--Ig=="
      ]
    }
  ]
}

AndroidManifest.xml AndroidManifest.xml

<activity android:name="com.microsoft.identity.client.BrowserTabActivity">
    <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:host="com.example.app"
            android:path="/[hash]"
            android:scheme="msauth" />
    </intent-filter>
</activity>

build.gradle build.gradle

android {
    ... OTHER STUFF
    signingConfigs {
        debug {
            keyAlias 'xxxx'
            keyPassword 'xxxxx'
            storeFile file('[path_to]\\keystore.jks')
            storePassword 'xxxxx'
        }
    }
}

dependencies {
    ... OTHER IMPLEMENTATIONS
    implementation "com.microsoft.identity.client:msal:3.0.+"
}

allprojects {
    repositories {
        mavenCentral()
        maven {
            url 'https://pkgs.dev.azure.com/MicrosoftDeviceSDK/DuoSDK-Public/_packaging/Duo-SDK-Feed/maven/v1'
        }
    }
}

button.dart按钮.dart

Widget MyButton(
  onPressed: () async {
    _acquireToken();
  },
)

Future<void> _acquireToken() async {
  await getResult();
}

String _output = 'NONE';
static const List<String> kScopes = [
  "https://graph.microsoft.com/user.read",
];
Future<String> getResult({bool isAcquireToken = true}) async {
  AzureAdAuthentication pca = await intPca();
  String? res;
  UserAdModel? userAdModel;
  try {
    if (isAcquireToken) {
      userAdModel = await pca.acquireToken(scopes: kScopes);
    } else {
      userAdModel = await pca.acquireTokenSilent(scopes: kScopes);
    }
  } on MsalUserCancelledException {
    res = "User cancelled";
  } on MsalNoAccountException {
    res = "no account";
  } on MsalInvalidConfigurationException {
    res = "invalid config";
  } on MsalInvalidScopeException {
    res = "Invalid scope";
  } on MsalException {
    res = "Error getting token. Unspecified reason";
  }

  setState(() {
    _output = (userAdModel?.toJson().toString() ?? res)!;
  });
  return (userAdModel?.toJson().toString() ?? res)!;
}

Future<AzureAdAuthentication> intPca() async {
    return await AzureAdAuthentication.createPublicClientApplication(
      clientId: "[CLIENT_ID]",
      authority: "https://login.microsoftonline.com/common/",
    );
}

Azure AD app Azure 广告应用

初始页

Redirects重定向

安卓重定向

I found the solution faster than expected.我比预期更快地找到了解决方案。

The problem was, mainly, the "redirect_uri" hash in msal_default_config.json file and android:path hash in AndroidManifest.xml.问题主要是 msal_default_config.json 文件中的“redirect_uri”hash 和 AndroidManifest.xml 中的 android:path hash。 In msal_default_config.json the hash code that you generated using keytool must be base64 encoded and in AndroidManifest.xml must be "as it is" (not encoded).在 msal_default_config.json 中,您使用 keytool 生成的 hash 代码必须是 base64 编码,而在 AndroidManifest.xml 中必须是“原样”(未编码)。 In msal_default_config.json I had top change some extra configurations like environment and account_mode.在 msal_default_config.json 中,我不得不更改一些额外的配置,例如环境和帐户模式。

I found two pages with the solution.我找到了两页解决方案。 https://github.com/AzureAD/microsoft-authentication-library-for-android/issues/1524#issuecomment-942414368 and https://github.com/AzureAD/microsoft-authentication-library-for-android/wiki/MSAL-FAQ . https://github.com/AzureAD/microsoft-authentication-library-for-android/issues/1524#issuecomment-942414368https://github.com/AzureAD/microsoft-authentication-library-for-android/wiki/ MSAL-常见问题解答 The second one is clearer than the first one.第二个比第一个更清楚。

Here are the changes made in the files previously listed:以下是对先前列出的文件所做的更改:

msal_default_config.json msal_default_config.json

{
  "client_id" : "[CLIENT_ID]",
  "authorization_user_agent" : "DEFAULT",
  "redirect_uri" : "msauth://com.example.app/[HASH_ENCODED]",
  "authorities": [
    {
      "type": "AAD",
      "audience": {
        "type": "AzureADandPersonalMicrosoftAccount"
      },
      "tenant_id": "common",
      "default": true
    }
  ],
  "minimum_required_broker_protocol_version": "3.0",
  "multiple_clouds_supported": false,
  "broker_redirect_uri_registered": true,
  "web_view_zoom_controls_enabled": true,
  "web_view_zoom_enabled": true,
  "environment": "Production",
  "power_opt_check_for_network_req_enabled": true,
  "handle_null_taskaffinity": false,
  "authorization_in_current_task": false,
  "http": {
    "connect_timeout": 10000,
    "read_timeout": 30000
  },
  "logging": {
    "pii_enabled": false,
    "log_level": "WARNING",
    "logcat_enabled": true
  },
  "account_mode": "MULTIPLE",
  "browser_safelist": [
    {
      "browser_package_name": "com.android.chrome",
      "browser_signature_hashes": [
        "7fmduHKTdHHrlMvldlEqAIlSfii1tl35bxj1OXN5Ve8c4lU6URVu4xtSHc3BVZxS6WWJnxMDhIfQN0N0K2NDJg=="
      ]
    },
    {
      "browser_package_name": "org.mozilla.firefox",
      "browser_signature_hashes": [
        "2gCe6pR_AO_Q2Vu8Iep-4AsiKNnUHQxu0FaDHO_qa178GByKybdT_BuE8_dYk99G5Uvx_gdONXAOO2EaXidpVQ=="
      ]
    },
    {
      "browser_package_name": "com.sec.android.app.sbrowser",
      "browser_signature_hashes": [
        "ABi2fbt8vkzj7SJ8aD5jc4xJFTDFntdkMrYXL3itsvqY1QIw-dZozdop5rgKNxjbrQAd5nntAGpgh9w84O1Xgg=="
      ]
    },
    {
      "browser_package_name": "com.cloudmosa.puffinFree",
      "browser_signature_hashes": [
        "1WqG8SoK2WvE4NTYgr2550TRhjhxT-7DWxu6C_o6GrOLK6xzG67Hq7GCGDjkAFRCOChlo2XUUglLRAYu3Mn8Ag=="
      ]
    },
    {
      "browser_package_name": "com.duckduckgo.mobile.android",
      "browser_signature_hashes": [
        "S5Av4cfEycCvIvKPpKGjyCuAE5gZ8y60-knFfGkAEIZWPr9lU5kA7iOAlSZxaJei08s0ruDvuEzFYlmH-jAi4Q=="
      ]
    },
    {
      "browser_package_name": "com.explore.web.browser",
      "browser_signature_hashes": [
        "BzDzBVSAwah8f_A0MYJCPOkt0eb7WcIEw6Udn7VLcizjoU3wxAzVisCm6bW7uTs4WpMfBEJYf0nDgzTYvYHCag=="
      ]
    },
    {
      "browser_package_name": "com.ksmobile.cb",
      "browser_signature_hashes": [
        "lFDYx1Rwc7_XUn4KlfQk2klXLufRyuGHLa3a7rNjqQMkMaxZueQfxukVTvA7yKKp3Md3XUeeDSWGIZcRy7nouw=="
      ]
    },
    {
      "browser_package_name": "com.microsoft.emmx",
      "browser_signature_hashes": [
        "Ivy-Rk6ztai_IudfbyUrSHugzRqAtHWslFvHT0PTvLMsEKLUIgv7ZZbVxygWy_M5mOPpfjZrd3vOx3t-cA6fVQ=="
      ]
    },
    {
      "browser_package_name": "com.opera.browser",
      "browser_signature_hashes": [
        "FIJ3IIeqB7V0qHpRNEpYNkhEGA_eJaf7ntca-Oa_6Feev3UkgnpguTNV31JdAmpEFPGNPo0RHqdlU0k-3jWJWw=="
      ]
    },
    {
      "browser_package_name": "com.opera.mini.native",
      "browser_signature_hashes": [
        "TOTyHs086iGIEdxrX_24aAewTZxV7Wbi6niS2ZrpPhLkjuZPAh1c3NQ_U4Lx1KdgyhQE4BiS36MIfP6LbmmUYQ=="
      ]
    },
    {
      "browser_package_name": "mobi.mgeek.TunnyBrowser",
      "browser_signature_hashes": [
        "RMVoXuK1sfJZuGZ8onG1yhMc-sKiAV2NiB_GZfdNlN8XJ78XEE2wPM6LnQiyltF25GkHiPN2iKQiGwaO2bkyyQ=="
      ]
    },
    {
      "browser_package_name": "org.mozilla.focus",
      "browser_signature_hashes": [
        "L72dT-stFqomSY7sYySrgBJ3VYKbipMZapmUXfTZNqOzN_dekT5wdBACJkpz0C6P0yx5EmZ5IciI93Q0hq0oYA=="
      ]
    },
    {
      "browser_package_name": "com.cake.browser",
      "browser_signature_hashes": [
        "442kvSdZT1fEAewzSi8Wre73x4mWmHBhOFtQ-9T9N6ExZzUdsELUmaaS0edsI7ur2nY-bjbWX7IpluFOyvKkOA=="
      ]
    },
    {
      "browser_package_name": "com.brave.browser",
      "browser_signature_hashes": [
        "wIwX1v_1TfPxHm5qn-_jdGoH3Pa9VVMR5dtVz0Y0xqPkyM_KlavjWPSgOolrVH05AVO1cHWoLPqMzCH04Pw8LQ=="
      ]
    },
    {
      "browser_package_name": "com.kiwibrowser.browser",
      "browser_signature_hashes": [
        "kmPeixKA04JcDuWNBMUPu_6WaODr6a9ofROUIHIGxiiFGvH8Y92MonrDQmsNqEJO2DQkpEQc425WmAYB4NlD3Q=="
      ]
    },
    {
      "browser_package_name": "com.mi.globalbrowser.mini",
      "browser_signature_hashes": [
        "6FEWlPfWn-omfES2ZYDj5bZUIR5au_nfyRr-o_1R3fesjfoV1JptBMumtvVIo0q37abcMRWQt9RUSNXpzKpNdA=="
      ]
    },
    {
      "browser_package_name": "mark.via.gp",
      "browser_signature_hashes": [
        "oTJf5e5nB1NinkdBpkkmhPnwbVRmDlHZ-s_QhvyuGKM5nq5XtjA439O31wxrkL6ReHyyKfDHFUHpQnoXoj--Ig=="
      ]
    }
  ]
}

AndroidManifest.xml AndroidManifest.xml

<activity android:name="com.microsoft.identity.client.BrowserTabActivity">
    <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:host="com.example.app"
        android:path="[HASH_NOT_ENCODED]"
        android:scheme="msauth" />
    </intent-filter>
</activity>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 在 flutter 应用程序 android 中,我无法使用 flutter 应用程序注册帐户,只是登录,错误说“错误的 Z0C83F57C786A0B4A39EFAB23731CEB7”? - in flutter app android I cant register account with flutter app just login ,, the error said “wrong email or password”? Facebook 登录 flutter 应用程序错误与本机登录 - Facebook login flutter app error with native login Android Facebook Flutter 登录导致应用程序崩溃 - Android Facebook Flutter login crashes app Flutter应用程序适用于Android但在桌面上失败 - Flutter app works on android but fails on desktop firebase登录不在flutter android app中工作 - firebase login not working in flutter android app Fastlane beta 通道无法在 android flutter 中创建应用程序构建 - Fastlane beta lane fails to create app build in android flutter msal+oauth - 如何从 android/flutter 检索刷新令牌 - msal+oauth - how to retrieve refresh token from android/flutter 为什么在运行 Flutter Android 应用程序时出现“清单合并失败并出现多个错误”错误? - Why do I get "Manifest merger failed with multiple errors" error when running Flutter Android app? Flutter 应用程序无法呈现错误“底部被无限像素溢出” - Flutter app fails to render with error "Bottom overflowed by infinite pixels" Android 工作室在新的 flutter 应用程序上出错 - Android studio gets error on fresh flutter app
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM