Microsoft Azure AD 用户搜索分页api调用

来源:互联网 发布:kingroot卸载软件失败 编辑:程序博客网 时间:2024/04/30 01:42
可以在azure graph explorer 调试
https://developer.microsoft.com/en-us/graph/graph-explorer


分页获取AZURE AD用户的代码:

其中的clientId,TenantName,可在azure账号里的Azure AD的application中找到。

private IHttpActionResult DoUserPaging(UserPagingRequest request, string tryGetToken)        {            string directoryName = AzureADAppConstants.TenantName;            string clientId = AzureADAppConstants.ClientId;            var credentials = new UserAssertion(tryGetToken);            var authenticationContext = new AuthenticationContext(AzureADGlobalConstants.AuthString + directoryName);            var loginResult = authenticationContext.AcquireTokenAsync(AzureADGlobalConstants.GraphUrl, clientId, credentials)                .Result;            var token = loginResult.AccessToken;            ProfileResultWrapper result = null;            string skipToken = "";            using (var httpClient = new HttpClient())            {                var baseUrl = "https://graph.microsoft.com/v1.0/users?";                var filterString = string.Format("$top={0}", request.PageSize);                // sample :                //https://graph.microsoft.com/v1.0/users?$top=10&$skiptoken=X%274453707                //                 if (!string.IsNullOrWhiteSpace(request.AzureToken))                {                    filterString += "&$skiptoken=" + request.AzureToken;                }                httpClient.BaseAddress = new Uri(baseUrl + filterString);                httpClient.DefaultRequestHeaders.Authorization = AuthenticationHeaderValue.Parse("Bearer " + token);                var graphRet = httpClient.GetAsync("").Result;                var json = graphRet.Content.ReadAsStringAsync().Result;                result = JsonConvert.DeserializeObject<ProfileResultWrapper>(json);                var i = result.SkipToken.IndexOf("skiptoken=");                var st = "skiptoken=";                skipToken = result.SkipToken.Substring(i + st.Length, result.SkipToken.Length - i - st.Length);            }            foreach (var profile in result.Value)            {                var photo = GetUserPhoto(token, profile.Id);                profile.Photo = photo;            }            return Ok(new PagingQueryResponse()            {                IsSuccess = true,                ErrorMessage = "",                Data = result.Value,                SkipToken = skipToken            });        }private byte[] GetUserPhoto(string token, string objId)        {            using (var httpClient = new HttpClient())            {                httpClient.BaseAddress = new Uri("https://graph.microsoft.com/v1.0/users/");                httpClient.DefaultRequestHeaders.Authorization = AuthenticationHeaderValue.Parse("Bearer " + token);                var x = httpClient.GetAsync(String.Format("{0}/photo/$value", objId)).Result;                var bytes = x.Content.ReadAsByteArrayAsync().Result;                return bytes;            }        }


实体类:
    
public class UserPagingRequest    {        public int PageSize { get; set; }        public string AzureToken { get; set; }        public string EmbedToken { get; set; }    }    public class ProfileResultWrapper    {        [JsonProperty("@odata.nextLink")]        public string SkipToken { get; set; }        [JsonProperty("value")]        public IList<UserProfileResult> Value { get; set; }    } public class UserProfileResult    {        [JsonProperty("id")]        public string Id { get; set; }        [JsonProperty("businessPhones")]        public IList<string> BusinessPhones { get; set; }        [JsonProperty("displayName")]        public string DisplayName { get; set; }        [JsonProperty("givenName")]        public string GivenName { get; set; }        [JsonProperty("jobTitle")]        public string JobTitle { get; set; }        [JsonProperty("mail")]        public string Mail { get; set; }        [JsonProperty("mobilePhone")]        public string MobilePhone { get; set; }        [JsonProperty("officeLocation")]        public string OfficeLocation { get; set; }        [JsonProperty("preferredLanguage")]        public string PrefferedLanguage { get; set; }        [JsonProperty("surname")]        public string Surname { get; set; }        [JsonProperty("userPrincipalName")]        public string UserPrincipalName { get; set; }        public byte[] Photo { get; set; }    }