gpt4 book ai didi

c# - 如何检查 azure Active Directory 用户是否已在 approle 中

转载 作者:行者123 更新时间:2023-11-30 14:53:54 26 4
gpt4 key购买 nike

我已创建一个 Azure Active Directory 用户并将该用户添加到应用角色。现在我正在检索该用户并尝试将其添加到更多应用程序角色。

var activeDirectoryUser = client.Users.Where(u => u.UserPrincipalName == user.UserName).ExecuteSingleAsync().Result as User;

作为预防措施,我想在添加之前首先检查用户是否已经处于应用程序角色中,但问题是 User 对象上的 ApproleAssignments 字段始终是空的。即使用户有应用程序角色分配,如果我尝试将用户添加到相同的应用程序角色,我也会收到错误。

创建新的应用角色分配。

var appRoleAssignment = new AppRoleAssignment
{
Id = appRole.Id,
ResourceId = Guid.Parse(servicePrincpal.ObjectId),
PrincipalType = "User",
PrincipalId = Guid.Parse(user.ObjectId)
};

if(IsUserInAppRole(user,appRoleAssignment))return;

user.AppRoleAssignments.Add(appRoleAssignment);
user.UpdateAsync().Wait();

检查用户是否具有应用角色。

private bool IsUserInAppRole(User user, AppRoleAssignment appRoleAssignment)
{
var userInApprole = user.AppRoleAssignments.Where(ara => ara.ObjectId == appRoleAssignment.Id.ToString());
return userInApprole.Any();
}

我正在使用最新版本的 Microsoft.Azure.ActiveDirectory.GraphClient

最佳答案

抱歉回复晚了。以下代码对我有用。不确定是否需要使用 IUserFetcher 接口(interface),但 LINQ 查询失败,因为您正在将分配的 objectID 与 appRole Id 进行比较。您需要比较的是作业的 ID。

var userFetcher = user as IUserFetcher;
IPagedCollection<IAppRoleAssignment> rawObjects = userFetcher.AppRoleAssignments.ExecuteAsync().Result;

IList<IAppRoleAssignment> assignments = rawObjects.CurrentPage.ToList();
IAppRoleAssignment a = null;
a = assignments.Where(ara => ara.Id.Equals(appRole.Id)).First();
if (a != null) {
Console.WriteLine("Found assignment {0} for user {1}", appRole.Id, user.DisplayName);
}

希望这有帮助...

关于c# - 如何检查 azure Active Directory 用户是否已在 approle 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28219361/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com