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

如何在Flutter应用中实现Microsoft身份验证功能

Flutter 接入Microsoft身份验证实现方案

1. 前置准备

提前完成Azure应用注册流程,获取以下核心配置参数:

  • 应用客户端ID
  • 租户ID
  • 对应平台的重定向URI
    同时在Azure应用配置页开启你需要的API权限,比如读取用户基础信息的User.Read权限。

2. 依赖安装

目前主流稳定方案是使用微软官方维护的msal_flutter封装库,适配全平台MSAL身份验证逻辑:

  • 在项目根目录的pubspec.yaml文件dependencies节点下添加依赖:
msal_flutter: ^1.0.0 # 替换为当前最新稳定版本
  • 执行命令完成依赖拉取:
    flutter pub get

3. 分平台基础配置

3.1 Android端配置

  • 在android/app/src/main/AndroidManifest.xml的manifest根节点下添加queries配置,适配Android 11及以上的包可见性要求
  • 在主Activity节点下添加MSAL专属的intent-filter,绑定你预先配置的重定向URI,保证登录完成后能正确跳转回你的应用

3.2 iOS端配置

  • 在ios/Runner/Info.plist中添加CFBundleURLTypes配置项,将重定向URI的scheme注册为应用的URL Scheme
  • 开启Xcode项目后台模式中的远程通知权限,保证MSAL可以正常静默刷新token

4. 核心功能代码实现

初始化MSAL实例

import 'package:msal_flutter/msal_flutter.dart';

late PublicClientApplication msalInstance;

Future<void> initMsal() async {
  msalInstance = await PublicClientApplication.createPublicClientApplication(
    clientId: "你拿到的Azure应用客户端ID",
    redirectUri: "你配置的对应平台重定向URI",
    authority: "https://login.microsoftonline.com/你的租户ID",
    // 仅支持个人微软账户时租户ID填consumers,同时支持企业+个人账户填common
  );
}

触发登录逻辑

Future<void> microsoftLogin() async {
  try {
    final loginResult = await msalInstance.acquireToken(
      scopes: ["User.Read"], // 替换为你实际需要申请的权限列表
    );
    // 登录成功,可从loginResult中获取accessToken、idToken、用户账户信息
    // 此处可对接你自己的后端校验逻辑,和已接入的Google、Facebook登录逻辑统一处理即可
  } on MsalException catch (error) {
    // 自定义处理异常:如用户取消登录、权限不足、网络错误等场景
  }
}

登出逻辑

Future<void> microsoftLogout() async {
  try {
    // 传入当前登录的账户实例,清除本地缓存的token
    await msalInstance.removeAccount(currentLoginAccount);
  } catch (error) {
    // 处理登出异常
  }
}

注意事项

  • 申请的scopes必须和Azure应用注册时开启的API权限一一对应,否则会返回权限校验错误
  • Android端targetSdkVersion≥30时必须配置queries节点,否则会无法唤起微软登录页
  • 国内使用时要注意网络适配,保证应用可以正常访问微软身份验证服务

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 19:42:02