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

请求协助修复Azure Function:实现用户ID多租户访问权限校验

完整修复后的Azure Function PowerShell代码
using namespace System.Net

# 输入绑定通过param块传入
param($Request, $TriggerMetadata)

# 初始化结果集合
$tenantAccessResults = @()

# 从请求体提取核心参数
$userEmail = $Request.Body.UserEmail
$userId = $Request.Body.UserId
$targetTenants = $Request.Body.Tenants

# 校验输入参数合法性
if (-not $userEmail -or -not $userId -or (-not $targetTenants -or $targetTenants.Count -ne 5)) {
    Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
        StatusCode = [HttpStatusCode]::BadRequest
        Body = @{
            Error = "参数不完整:必须提供UserEmail、UserId,以及包含5个租户ID的Tenants数组"
        }
    })
    return
}

# 遍历每个租户执行权限校验
foreach ($tenantId in $targetTenants) {
    $resultItem = @{
        TenantId   = $tenantId
        HasAccess  = $false
        StatusMsg  = ""
    }

    try {
        # 调用Microsoft Graph API校验用户在租户中的存在性(基础访问权限判定依据)
        # 依赖:Function已配置托管身份,并获得Directory.Read.All应用权限的管理员同意
        $graphEndpoint = "https://graph.microsoft.com/v1.0/users/$userId"
        $authHeader = @{
            "Authorization" = "Bearer $env:IDENTITY_HEADER"
        }

        # 针对目标租户发起Graph请求
        $response = Invoke-RestMethod -Uri $graphEndpoint -Headers $authHeader -Method Get -ErrorAction Stop

        # 请求成功则判定用户拥有该租户访问权限
        $resultItem.HasAccess = $true
        $resultItem.StatusMsg = "用户在该租户中存在,拥有基础访问权限"
    }
    catch {
        # 按错误类型返回精准提示
        switch ($_.Exception.Response.StatusCode) {
            [HttpStatusCode]::NotFound {
                $resultItem.StatusMsg = "用户未在该租户中注册"
            }
            [HttpStatusCode]::Forbidden {
                $resultItem.StatusMsg = "Function托管身份无权限访问该租户的Graph数据"
            }
            default {
                $resultItem.StatusMsg = "校验失败:$($_.Exception.Message)"
            }
        }
    }

    $tenantAccessResults += $resultItem
}

# 返回结构化响应结果
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
    StatusCode = [HttpStatusCode]::OK
    Body = @{
        UserProfile = @{
            Email = $userEmail
            Id    = $userId
        }
        TenantCheckResults = $tenantAccessResults
    }
})
关键配置与修复说明
  • 输入校验逻辑:新增参数完整性检查,提前拦截非法请求,避免后续逻辑崩溃
  • 跨租户权限校验:采用Microsoft Graph API替代传统Azure AD模块,适配无服务器环境的依赖轻量化需求
  • 错误分类处理:针对用户不存在、权限不足、请求异常等场景返回明确提示,便于问题定位
  • 结构化响应:返回包含用户信息与租户校验结果的JSON结构,符合API交互的规范要求
部署前必备配置
  1. 托管身份启用:为Azure Function开启系统分配托管身份,或关联用户分配托管身份
  2. Graph权限授权:在Azure AD中为该托管身份授予Directory.Read.All应用权限,并完成管理员同意
  3. 环境变量确认:确保Function应用设置中自动注入的IDENTITY_HEADER环境变量可用
测试请求示例

发送POST请求至Function触发URL,请求体格式如下:

{
    "UserEmail": "john.doe@contoso.com",
    "UserId": "a1b2c3d4-5678-90ef-ghij-klmnopqrstuv",
    "Tenants": [
        "tenant-id-1",
        "tenant-id-2",
        "tenant-id-3",
        "tenant-id-4",
        "tenant-id-5"
    ]
}

内容的提问来源于stack exchange,提问作者NERDO-leee

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 10:33:18