如何从 Microsoft Graph API C# 中的电子邮件地址获取用户 ID

sid*_*hah 8 c# microsoft-graph-api

我想将用户添加到组中,但我没有用户的id,我只有电子邮件地址。

这是代码:

User userToAdd = await graphClient
    .Users["objectID"]
    .Request()
    .GetAsync();

await graphClient
    .Groups["groupObjectID"]
    .Members
    .References
    .Request()
    .AddAsync(userToAdd);
Run Code Online (Sandbox Code Playgroud)

有人可以帮助我如何使用 Microsoft Graph 从电子邮件地址检索 ObjectId(用户 ID)?

Mar*_*eur 12

您可以通过几种不同的方式查找用户。

/users端点,您可以使用他们的id(分配给每个帐户的 GUID)或他们的userPrincipalName(默认域的电子邮件别名):

// Retrieve a user by id
var user  = await graphClient
    .Users["00000000-0000-0000-0000-000000000000"]
    .Request()
    .GetAsync();

// Retrieve a user by userPrincipalName
var user  = await graphClient
    .Users["user@tenant.onmicrosoft.com"]
    .Request()
    .GetAsync();
Run Code Online (Sandbox Code Playgroud)

如果您使用授权代码或隐式OAuth 授权,您还可以查找通过/me端点进行身份验证的用户:

var user = await graphClient
    .Me
    .Request()
    .GetAsync();
Run Code Online (Sandbox Code Playgroud)

  • 这不是OP问的。不幸的是,电子邮件地址可以与 UPN 不同,并且不必是唯一的。 (2认同)

小智 12

除了上面这些正确答案之外。

userPrincipalName或者id不是外部电子邮件地址。这是我手动完成注册时的情况。您可以使用此过滤器:

var user = await _graphClient.Users
    .Request()
    .Filter($"identities/any(c:c/issuerAssignedId eq '{email}' and c/issuer eq 'contoso.onmicrosoft.com')")
    .GetAsync();
Run Code Online (Sandbox Code Playgroud)

源代码: https: //learn.microsoft.com/en-us/graph/api/user-list? view=graph-rest-1.0&tabs=csharp

使用此配置创建用户:

Microsoft.Graph.User graphUser = new Microsoft.Graph.User
{
    AccountEnabled = true,
    PasswordPolicies = "DisablePasswordExpiration,DisableStrongPassword",
    PasswordProfile = new PasswordProfile
    {
            ForceChangePasswordNextSignIn = false,
            Password = accountModel.Password,
        },
        Identities = new List<ObjectIdentity>
        {
            new ObjectIdentity()
            {
                SignInType = "emailAddress",
                Issuer ="contoso.onmicrosoft.com",
                IssuerAssignedId = email
            }
        },
};
Run Code Online (Sandbox Code Playgroud)


FIL*_*FIL 2

您可以使用iduserPrincipalName(这是电子邮件地址)从 Graph API 检索用户的详细信息。

来自Microsoft Graph API 参考

GET /users/{id | userPrincipalName}
Run Code Online (Sandbox Code Playgroud)

您是否尝试过使用电子邮件地址作为objectID