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

使用Azure API获取EID用户列表遇403错误,寻求技术解决方案

解决Azure Graph API获取用户列表返回403权限错误

问题根源

你的403错误核心原因是应用注册缺少足够权限,且未完成管理员同意授权。当前代码的认证逻辑无问题,但Graph API拒绝了无权限的请求。

一、权限配置修正步骤

  1. 登录Azure门户,进入应用注册找到你的目标应用
  2. 切换到API权限页面
  3. 点击添加权限 → 选择Microsoft Graph → 选择应用权限
  4. 在用户权限分类下,添加User.Read.All权限(这是读取全量用户的最小必要权限)
  5. 点击授予管理员同意(必须完成此步骤,应用权限才会生效)

二、优化后的Python代码

保留原认证逻辑,新增错误详情捕获以方便排查:

import os
import json
import requests
from azure.identity import ClientSecretCredential

def lambda_handler(event, context):
    tenant_id = os.environ['AZURE_TENANT_ID']
    client_id = os.environ['AZURE_CLIENT_ID']
    client_secret = os.environ['AZURE_CLIENT_SECRET']

    try:
        credential = ClientSecretCredential(tenant_id=tenant_id, client_id=client_id, client_secret=client_secret)
        token = credential.get_token("https://graph.microsoft.com/.default").token
        headers = {
            'Authorization': 'Bearer ' + token,
            'Content-Type': 'application/json'
        }
        # 如需筛选EID用户,可添加过滤条件,示例:筛选特定域名的用户
        # url = 'https://graph.microsoft.com/v1.0/users?$filter=contains(userPrincipalName, "eid@yourdomain.com")'
        url = 'https://graph.microsoft.com/v1.0/users'
        response = requests.get(url, headers=headers)
        response.raise_for_status() # 主动抛出HTTP错误

        users = response.json()
        return {
            'statusCode': 200,
            'body': json.dumps(users)
        }
    except requests.exceptions.HTTPError as err:
        error_details = json.loads(err.response.text)
        return {
            'statusCode': err.response.status_code,
            'body': json.dumps({'error': error_details.get('error', {}).get('message', 'Unknown error')})
        }
    except Exception as e:
        return {
            'statusCode': 500,
            'body': json.dumps({'error': str(e)})
        }

三、权限配置核心要点

  • 权限类型选择:使用客户端凭证流(ClientSecretCredential)必须配置应用权限,不能使用委派权限
  • 最小权限原则:仅申请业务所需的权限,User.Read.All是读取全量用户的最小权限
  • 管理员同意强制要求:应用权限必须由租户管理员授予同意,否则权限不会生效,这是403错误最常见诱因
  • 权限验证:可通过调用https://graph.microsoft.com/v1.0/servicePrincipals/{你的应用ID}/appRoleAssignments验证权限是否已正确授予

四、额外排查点

  1. 确认Lambda环境变量中的AZURE_TENANT_ID、AZURE_CLIENT_ID、AZURE_CLIENT_SECRET无拼写错误
  2. 检查客户端密钥是否过期,若过期需重新生成并更新环境变量
  3. 若仅需获取特定EID用户,可通过Graph API的$filter参数缩小返回范围,提升请求效率

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 18:23:11