MS Graph:Azure AD - 如何在用户列表中找到源列?
MS Graph: Azure AD - How to find the Source column in the users list?
我正在使用 Microsoft Graph 检索使用 Azure AD
的组织中的用户列表。当我以全局管理员身份登录 Azure Portal
并单击 Azure AD-->Users
时,它会显示如下用户列表,其中最后一列(以红色显示)是 Source
列:
问题:如何从list of users? By default, only a limited set of properties are returned(businessPhones
,displayName
,givenName
、id
、jobTitle
、mail
、mobilePhone
、officeLocation
、preferredLanguage
、surname
和 userPrincipalName
).
据我所知,图 api 的响应中没有字段 source
。我们可以看到这个page中user的所有属性,不存在属性source
.
Azure 门户请求另一个 api 但不是图形 api(列出用户)来显示源。
顺便说一下,graph api list user(v1.0) 只显示了几个字段。要显示更多字段,可以在api中使用$select
(如https://graph.microsoft.com/v1.0/users?$select=displayName,userType
)。如果使用 graph api list user(beta),它将显示用户的所有字段。
希望对你有帮助~
如果你还没有使用过它,我会查看图形资源管理器
https://developer.microsoft.com/en-us/graph/graph-explorer
如果我不得不猜测它是一个基于 userPrincipalName 的动态列。如果用户来自外部系统,userPrincipalName 中将包含#EXT#。我会看一下,看看它们是否有什么不同。
我正在查看端点 https://graph.microsoft.com/v1.0/users
正如 Hury 提到的评论,您可以使用 userType 和 externalUserState 来确定同一件事。
如果我在 C# 中这样做(这是凭记忆,如果有错字,请见谅)
public string Source {
get {
return UserPrincipalName.Contains("#EXT#")?"Microsoft Account":"Azure Active Directory";
}
}
对于更复杂的处理
private string _source = null;
public string Source _source??(_source=GenerateSource());
}
protected string GenerateSource(){
return UserPrincipalName.Contains("#EXT#")?"Microsoft Account":"Azure Active Directory";
}
如果我使用的代码类似于可以在此处找到的代码
我会把它作为扩展class(没有从记忆中测试,但我应该接近)
public static class UserExtension{
public static UserSource(this User user){
var userTypeUpper = _user.UserType.ToUpperCase();
var userPrincipalNameUpper = user.UserPrincipalName.ToUpperCase();
var externalUserStateUpper = user.ExternalUserState.ToUpperCase();
return (_user.UserType == "MEMBER" && userPrincipalNameUpper.Contains("#EXT#") == false) ? "Azure Active Directory" :
(userTypeUpper == "MEMBER" && userPrincipalNameUpper.Contains("#EXT#")) ? "Microsoft Account" :
(userTypeUpper == "GUEST" && externalUserStateUpper == "ACCEPTED") ? "External Azure Active Directory" :
(userTypeUpper == "GUEST" && externalUserStateUpper == "PENDINGACCEPTANCE") ? "Invited user" : "Unknown";
}
}
//sample code using it
Microsoft.Graph.IGraphServiceUsersCollectionPage users = await graphClient.Users.Request()
.Select("displayName, userPrincipalName, userType")
.GetAsync();
List<User> lstUsers = (List<User>)users.CurrentPage.ToList();
var source = lstUsers.First().UserSource()
我正在使用 Microsoft Graph 检索使用 Azure AD
的组织中的用户列表。当我以全局管理员身份登录 Azure Portal
并单击 Azure AD-->Users
时,它会显示如下用户列表,其中最后一列(以红色显示)是 Source
列:
问题:如何从list of users? By default, only a limited set of properties are returned(businessPhones
,displayName
,givenName
、id
、jobTitle
、mail
、mobilePhone
、officeLocation
、preferredLanguage
、surname
和 userPrincipalName
).
据我所知,图 api 的响应中没有字段 source
。我们可以看到这个page中user的所有属性,不存在属性source
.
Azure 门户请求另一个 api 但不是图形 api(列出用户)来显示源。
顺便说一下,graph api list user(v1.0) 只显示了几个字段。要显示更多字段,可以在api中使用$select
(如https://graph.microsoft.com/v1.0/users?$select=displayName,userType
)。如果使用 graph api list user(beta),它将显示用户的所有字段。
希望对你有帮助~
如果你还没有使用过它,我会查看图形资源管理器 https://developer.microsoft.com/en-us/graph/graph-explorer
如果我不得不猜测它是一个基于 userPrincipalName 的动态列。如果用户来自外部系统,userPrincipalName 中将包含#EXT#。我会看一下,看看它们是否有什么不同。
我正在查看端点 https://graph.microsoft.com/v1.0/users
正如 Hury 提到的评论,您可以使用 userType 和 externalUserState 来确定同一件事。
如果我在 C# 中这样做(这是凭记忆,如果有错字,请见谅)
public string Source {
get {
return UserPrincipalName.Contains("#EXT#")?"Microsoft Account":"Azure Active Directory";
}
}
对于更复杂的处理
private string _source = null;
public string Source _source??(_source=GenerateSource());
}
protected string GenerateSource(){
return UserPrincipalName.Contains("#EXT#")?"Microsoft Account":"Azure Active Directory";
}
如果我使用的代码类似于可以在此处找到的代码
public static class UserExtension{
public static UserSource(this User user){
var userTypeUpper = _user.UserType.ToUpperCase();
var userPrincipalNameUpper = user.UserPrincipalName.ToUpperCase();
var externalUserStateUpper = user.ExternalUserState.ToUpperCase();
return (_user.UserType == "MEMBER" && userPrincipalNameUpper.Contains("#EXT#") == false) ? "Azure Active Directory" :
(userTypeUpper == "MEMBER" && userPrincipalNameUpper.Contains("#EXT#")) ? "Microsoft Account" :
(userTypeUpper == "GUEST" && externalUserStateUpper == "ACCEPTED") ? "External Azure Active Directory" :
(userTypeUpper == "GUEST" && externalUserStateUpper == "PENDINGACCEPTANCE") ? "Invited user" : "Unknown";
}
}
//sample code using it
Microsoft.Graph.IGraphServiceUsersCollectionPage users = await graphClient.Users.Request()
.Select("displayName, userPrincipalName, userType")
.GetAsync();
List<User> lstUsers = (List<User>)users.CurrentPage.ToList();
var source = lstUsers.First().UserSource()