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

如何通过外部用户登录身份验证其是否属于指定Entra租户组

问题解答

可以通过MS Graph获取外部成员的登录邮箱地址,你需要调整API请求的查询参数,指定返回用户的**邮件(mail)或其他邮箱(otherMails)**属性,就能拿到用于匹配的登录身份信息。

修改实现的核心要点:

  1. 调整Graph API请求:在请求URL中添加$select参数,指定要返回的目标属性(比如mail,otherMails),避免只拿到默认的有限字段。
  2. 解析邮箱属性:外部用户的mail字段通常直接对应其登录邮箱;若该字段为空,可从otherMails数组中提取有效邮箱。

修改后的代码示例:

public async Task<List<string>> GetGroupMemberEmailsAsync(string groupName, string accessToken)
{
    var groupId = await GetGroupIdAsync(groupName, accessToken);
    string ApiUrl = "https://graph.microsoft.com/v1.0/";
    // 添加$select参数,指定获取mail、otherMails和displayName属性
    var response = await _httpClient.GetAsync($"{ApiUrl}/groups/{groupId}/members?$select=mail,otherMails,displayName");
    response.EnsureSuccessStatusCode();

    var responseContent = await response.Content.ReadAsStringAsync();           
    var document = JsonDocument.Parse(responseContent);
    var root = document.RootElement;
    var membersData = root.GetProperty("value").EnumerateArray();

    var memberEmails = new List<string>();
    foreach (JsonElement memberData in membersData)
    {
        // 优先读取mail字段(外部用户的登录邮箱通常存在于此)
        if (memberData.TryGetProperty("mail", out JsonElement mailValue))
        {
            var email = mailValue.ToString();
            if (!string.IsNullOrEmpty(email))
            {
                memberEmails.Add(email);
                continue;
            }
        }
        // 若mail为空,读取otherMails数组中的邮箱
        if (memberData.TryGetProperty("otherMails", out JsonElement otherMailsValue) && otherMailsValue.ValueKind == JsonValueKind.Array)
        {
            foreach (var emailElement in otherMailsValue.EnumerateArray())
            {
                var email = emailElement.ToString();
                if (!string.IsNullOrEmpty(email))
                {
                    memberEmails.Add(email);
                    break;
                }
            }
        }
    }
    return memberEmails;
}

补充说明:

  • 你的应用已配置User.Read.All权限,完全满足获取这些属性的权限要求,无需额外申请。
  • 外部用户的userPrincipalName格式通常为外部邮箱#EXT#@你的租户域名,但你需要的原始登录邮箱,mail或otherMails是更直接的匹配字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 14:21:03