如何在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
相关产品推荐
相关产品推荐

