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

如何通过Firebase Authentication(微软OAuth)获取Azure AD用户组信息

获取Azure AD用户组信息(基于Firebase Auth + TypeScript)

1. 配置Azure AD应用权限

要获取用户所属的Azure AD组,必须先在Azure AD应用注册中添加对应的Microsoft Graph权限:

  • 登录Azure门户,找到你的应用注册
  • 进入「API权限」→「添加权限」→选择「Microsoft Graph」→「委托权限」
  • 搜索并添加 Group.ReadBasic.All(仅获取组名称和ID,权限更安全)或 Group.Read.All(获取完整组属性)
  • 点击「授予管理员同意」(必须完成此步骤,否则普通用户无法获取组数据)

2. 更新Firebase微软OAuth的Scope配置

在Firebase控制台的「Authentication」→「登录方法」→「Microsoft」中,修改「授权范围」,补充Graph API的权限scope:

openid profile email https://graph.microsoft.com/Group.ReadBasic.All

(若需完整组信息,替换为https://graph.microsoft.com/Group.Read.All)

3. TypeScript代码实现获取组信息

登录成功后,从Firebase的用户凭证中提取Azure AD的Access Token,再调用Microsoft Graph API获取用户所属组:

登录并提取Access Token

import { getAuth, signInWithPopup, OAuthProvider } from "firebase/auth";

const auth = getAuth();
const provider = new OAuthProvider('microsoft.com');

// 配置请求的scope,需和Firebase控制台配置保持一致
provider.addScope('https://graph.microsoft.com/Group.ReadBasic.All');

signInWithPopup(auth, provider)
  .then(async (result) => {
    // 从登录结果中提取Azure AD的Access Token
    const credential = OAuthProvider.credentialFromResult(result);
    const accessToken = credential?.accessToken;

    if (!accessToken) {
      throw new Error('无法获取Azure AD访问令牌');
    }

    // 调用API获取组信息
    const userGroups = await fetchUserGroups(accessToken);
    console.log('用户所属组:', userGroups);
    // 可将组信息存入Firestore或应用本地状态
  })
  .catch((error) => {
    console.error('登录失败:', error);
  });

调用Microsoft Graph API的工具函数

async function fetchUserGroups(accessToken: string): Promise<Array<{ id: string, displayName: string }>> {
  try {
    const response = await fetch('https://graph.microsoft.com/v1.0/me/memberOf', {
      headers: {
        'Authorization': `Bearer ${accessToken}`
      }
    });

    if (!response.ok) {
      throw new Error(`Graph API请求失败: ${response.statusText}`);
    }

    const data = await response.json();
    // 过滤出组类型数据(排除角色等非组条目)
    return data.value.filter((item: any) => item['@odata.type'] === '#microsoft.graph.group')
      .map((group: any) => ({
        id: group.id,
        displayName: group.displayName
      }));
  } catch (error) {
    console.error('获取用户组失败:', error);
    return [];
  }
}

注意事项

  • 权限选择:优先使用Group.ReadBasic.All,仅在需要组的详细属性(如描述、成员列表)时才选用Group.Read.All
  • Token过期处理:Azure AD的Access Token有效期约1小时,若需长期获取组信息,需实现Token刷新逻辑(可通过Firebase的onIdTokenChanged监听状态,或调用Azure AD的刷新端点)
  • 错误处理:需处理权限不足(403)、Token无效(401)等异常,给用户明确的提示信息

内容的提问来源于stack exchange,提问作者Kris D. J.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 02:05:15