如何在Flutter应用中通过Azure AD获取当前登录用户的个人资料
Flutter 从 Azure AD 获取用户资料解决方案
我已经在多个生产项目中实现过该功能,你只需要按以下几个步骤排查调整即可:
1. 先确认权限和scope配置
- 打开Azure Portal的应用注册页,找到你对应的应用,在「API权限」 tab 中添加 Microsoft Graph 的 User.Read 委托权限,务必完成管理员同意
- 初始化aad_oauth配置时,必须把需要的scope补充完整,不能只使用默认示例的scope,参考配置如下:
final Config config = Config( tenant: "你的租户ID", clientId: "你的客户端ID", scope: "openid profile email User.Read", // 其余配置保持和你现有一致即可 );
2. 两种方式获取用户字段
方式一:调用Microsoft Graph接口拉取完整资料
拿到Access Token后,直接请求Graph的用户端点即可获取所有公开资料,参考代码:
import 'package:http/http.dart' as http; import 'dart:convert'; // 这里的accessToken就是你已经拿到的令牌 final res = await http.get( Uri.parse("https://graph.microsoft.com/v1.0/me"), headers: {"Authorization": "Bearer $accessToken"}, ); final userInfo = jsonDecode(res.body); // 常用字段直接取值即可: // 用户名:userInfo["displayName"] // 邮箱:优先取userInfo["mail"],为空的话取userInfo["userPrincipalName"]
方式二:直接解析ID Token获取字段
如果不想额外调用接口,可以提前在Azure AD配置令牌可选声明:
- 进入应用注册的「令牌配置」tab,点击「添加可选声明」
- 选择ID令牌,勾选你需要的字段:email、given_name、family_name、preferred_username等,保存即可
- 后续你可以直接解析认证成功后返回的ID Token拿到对应字段,解析可以使用
jwt_decoder包,示例:
import 'package:jwt_decoder/jwt_decoder.dart'; Map<String, dynamic> idTokenClaims = JwtDecoder.decode(你的IDToken字符串); // 直接从idTokenClaims里取你配置的声明字段即可
内容的提问来源于stack exchange,提问作者Ananthakrishna
相关产品推荐
相关产品推荐

