azure Microsoft图表:如何通过个人电子邮件地址查找用户?

uwopmtnx  于 2022-11-17  发布在  其他
关注(0)|答案(6)|浏览(209)

我其实有两个问题,可能是有关连的:
问题1:为什么用户个人电子邮件地址在Azure门户中显示为用户主体名称?
问题2:如何通过用户的个人电子邮件地址查找用户?
我将寻找的电子邮件地址是一个用作登录名,所以我希望它应该出现在一个属性,如signInNames,如下所述。
重现步骤:
登录Azure门户,查看随机用户并观察其用户主体名称。请注意,它以个人电子邮件地址(joe@somedomain.com)的格式显示。复制用户对象ID。
在代码中,创建一个新的GraphServiceClient,并使用上面步骤中复制的对象ID按对象ID检索用户。

GraphServiceClient client = GetGraphServiceClient();
User user = await client.Users[userID].Request().GetAsync();

在返回的用户对象中,请注意UserPrincipalName的值不是第一步中所述的Azure门户中显示的值。相反,它是一个分配的标识符:cpim_96fe-48b5-88a2-9ac960a6bdab@mydomain.onmicrosoft.com.
尝试使用个人电子邮件地址See also查找用户:

GraphServiceClient client = GetGraphServiceClient();
IGraphServiceUsersCollectionPage users = await client.Users.Request().Filter("userPrincipalName eq 'joe@somedomain.com'").GetAsync(); // Count = 0
IGraphServiceUsersCollectionPage users = await client.Users.Request().Filter("mail eq 'joe@somedomain.com'").GetAsync(); // Count = 0

正如this answer所建议的,这也不起作用:

IGraphServiceUsersCollectionPage users3 = await client.Users.Request().Filter("signInNames/any(x:x/value eq 'joe@somedomain.com')").GetAsync(); // error Filter not supported.

我的Azure应用程序具有User.ReadWrite.All权限。个人电子邮件地址未显示为我检索的任何对象的任何属性值。
编辑
在回答张贴here我尝试了这个代码:

// Exact call to graph:
    https://graph.microsoft.com/beta/users?$filter=otherMails/any(id:id%20eq%20'my.name@outlook.com')
    
    Error message:
    
    System.NotSupportedException : The collection type 'Microsoft.Graph.IUserAppRoleAssignmentsCollectionPage' on 'Microsoft.Graph.User.AppRoleAssignments' is not supported.
    
    [Question regarding above error](https://stackoverflow.com/questions/62776361/how-to-use-graph-explorer-sdk)
    
    [Instruction to use GraphClient](https://learn.microsoft.com/en-us/graph/sdks/create-client?tabs=CS)

这里使用GraphServiceClient是我如何实现您的答案的。在这两种情况下,对图的调用都返回用户,但是用户的属性没有填充。我的应用程序具有权限User.ReadWrite.All、User.ManageIdentities.All、Domain.ReadWrite.All。这是权限问题吗?

public async Task<User> GetUserByEmailAddress2(string email)
    {
        GraphServiceClient client = GetGraphServiceClient();
        IGraphServiceUsersCollectionPage users = await client.Users.Request().Filter($"otherMails/any(id:id eq '{email}')").GetAsync();
        var nonnullusers = users.Where(x => x.OtherMails?.Any() ?? false).ToList(); // count = 0
        
        users = await client.Users.Request().Filter($"identities/any(id:id/issuer eq 'LeaderAnalytics.onmicrosoft.com' and id/issuerAssignedId eq '{email}')").GetAsync();
        nonnullusers = users.Where(x => x.Id == email).ToList(); // count = 0

        return users[0];
    }
u1ehiz5o

u1ehiz5o1#

要在电子邮件地址填充为备用电子邮件(otherMails属性)时搜索用户,请执行以下操作:

  • 您好!欢迎访问我们的网站!
    要在电子邮件地址填充为登录名(signInNames属性)时搜索用户,请执行以下操作:
  • 如果您想了解更多xxxx.onmicrosoft.com。
b5buobof

b5buobof2#

使用C# SDK时,您的呼叫将是:

var users = await _graphClient.Users.Request()
                .Filter($"identities/any(id:id/issuer eq 'xxx.onmicrosoft.com' and id/issuerAssignedId eq '{emailAddress}')")
                .GetAsync();
fafcakar

fafcakar3#

这些解决方案对我都不起作用。以下是起作用的解决方案。不过,您必须具有正确的权限。
我使用https://graph.microsoft.com/v1.0作为端点。

var officeUser = await graph.Users
            .Request()
            .Filter($"mail eq '{emailAddress}'")
            .Select(e => new {
            e.DisplayName,
            e.Mail,
            e.Id
            })
            .GetAsync();
lf3rwulv

lf3rwulv4#

请尝试以下图形调用:
电子邮件/xxxx.onmicrosoft.com任何电子邮件/任何电子邮件/任何电子邮件
此外,请确保您使用的用户帐户是B2C租户中的成员帐户(通过Azure门户〉Azure Active Directory〉用户〉新建用户〉创建用户选项创建),而不是访客或已注册用户。
请让我知道,如果这工作,如果您正在作出这些调用在同一用户的上下文中从您的代码。

lnvxswe2

lnvxswe25#

几天的搜索一个答案,工程,我尝试了多个东西在图形资源管理器,并找到了什么工程为我的场景是。
这将得到一个列表中的用户,并形成逗号分隔的字符串,并将其用作过滤器,或者如果你只想为一个用户使用eq操作符。

var userBatchStr = "'user1@domain.com', 'user2@domain.com'";

// Get Multiple Users
var users = this.graphServiceClient.Users
                .Request()
                .Filter($"userPrincipalName in ({userBatchStr})")
                .GetAsync()
                .Result;

// Get Single User
var user = this.graphServiceClient.Users
                .Request()
                .Filter($"userPrincipalName eq 'user1@domain.com'")
                .GetAsync()
                .Result;
46qrfjad

46qrfjad6#

您可以使用此API获取信息
获取https://graph.microsoft.com/v1.0/users/{id|用户主体名称}?$select=显示名称,给定名称,邮政编码

相关问题