我想要從Azure的AD用戶的組信息。Azure的ActiveDirectory的圖形API GraphClient沒有返回廣告組
使用下面的圖形API包來實現這一
- Microsoft.Azure.ActiveDirectory.GraphClient
- Microsoft.IdentityModel.Clients.ActiveDirectory 2.13.112191810
我能夠成功從Azure圖形API檢索用戶信息。
但是當我運行這個方法來檢索用戶的羣體,提琴手顯示了包含JSON片段組信息的成功的HTTP 200響應但是該方法本身並不具有了IEnumerable返回。
IEnumerable<string> groups = user.GetMemberGroupsAsync(false).Result.ToList();
代碼似乎沒有從這個異步請求返回。
得到的經驗是空白頁,而認證的管道卡住。
的完整代碼
public override ClaimsPrincipal Authenticate(string resourceName, ClaimsPrincipal incomingPrincipal)
{
if (!incomingPrincipal.Identity.IsAuthenticated == true &&
_authorizationService.IdentityRegistered(incomingPrincipal.Identity.Name))
{
return base.Authenticate(resourceName, incomingPrincipal);
}
_authorizationService.AddClaimsToIdentity(((ClaimsIdentity) incomingPrincipal.Identity));
Claim tenantClaim = incomingPrincipal.FindFirst(TenantIdClaim);
if (tenantClaim == null)
{
throw new NotSupportedException("Tenant claim not available, role authentication is not supported");
}
string tenantId = tenantClaim.Value;
string authority = String.Format(CultureInfo.InvariantCulture, _aadInstance, _tenant);
Uri servicePointUri = new Uri("https://graph.windows.net");
ClientCredential clientCredential = new ClientCredential(_clientId, _password);
AuthenticationContext authContext = new AuthenticationContext(authority, true);
AuthenticationResult result = authContext.AcquireToken(servicePointUri.ToString(), clientCredential);
Token = result.AccessToken;
ActiveDirectoryClient activeDirectoryClient =
new ActiveDirectoryClient(new Uri(servicePointUri, tenantId),
async() => await AcquireTokenAsync());
IUser user = activeDirectoryClient
.Users
.Where(x => x.UserPrincipalName.Equals(incomingPrincipal.Identity.Name))
.ExecuteAsync()
.Result
.CurrentPage
.ToList()
.FirstOrDefault();
if (user == null)
{
throw new NotSupportedException("Unknown User.");
}
IEnumerable<string> groups = user.GetMemberGroupsAsync(false).Result.ToList();
return incomingPrincipal;
}
我有同樣的問題。但是請注意,上面使用'memberOf'的解決方案是不敏感的列表,即僅限直接成員。無法使用的getMemberGroups函數是傳遞函數。你也需要迭代每個組羣。從[DOCO(https://msdn.microsoft.com/Library/Azure/Ad/Graph/api/users-operations#UserFunctions)「你可以叫getMemberGroups函數返回所有組用戶是其成員該檢查是傳遞性的,不同於閱讀memberOf導航屬性,該屬性只返回用戶是其直接成員的組。 – mgrowan 2015-08-04 03:44:50
我與我嘗試使用此庫的大多數電話都有同樣的問題。它始終掛起,即使Fiddler顯示已經提出成功的請求。 – 2015-10-07 15:43:54