我的应用程序需要哪些权限才能将用户添加到组?
What permissions does my app need before it can add users to groups?
场景:应用程序中的管理员用户(在 AD 上的特定组中)向应用程序的数据库中添加新服务提供商的新记录。此过程向添加的人的电子邮件地址发送邀请,并且[应该]将该新来宾用户添加到 AD 上与其在应用程序中的功能及其地理位置相关的一组特定组。
到目前为止,几乎所有事情都做得很好,但是当要将新的来宾用户添加到组时,我收到以下错误:
Microsoft.Graph.ServiceException: 'Code: Authorization_RequestDenied
Message: Insufficient privileges to complete the operation.
Inner error:
AdditionalData:
date: 2021-12-13T10:50:05
request-id: <redacted>
client-request-id: <redacted>
ClientRequestId: <redacted>'
我已获得管理员同意授予的以下权限:
- AdministrativeUnit.ReadWrite.All(申请)
- Directory.AccessAsUser.All(授权)
- Directory.ReadWrite.All(申请)
- Group.ReadWrite.All(申请)
- GroupMember.Read.All(授权)
- GroupMember.ReadWrite.All(申请)
- PrivilegedAccess.ReadWrite.AzureADGroup(申请)
- User.Invite.All(申请)
- User.ManageIdentities.All(申请)
- User.Read(授权)
- User.Read.全部(申请)
- User.ReadWrite.All(应用程序)
这是我的代码 - 我删除了敏感信息:
private async Task CreateUserInvitationAsync()
{
// Send the invitation.
var invitation = new Invitation
{
InvitedUserEmailAddress = Provider.Email,
InviteRedirectUrl = $"{Request.Scheme}://{Request.Host}{this.Request.PathBase}/",
SendInvitationMessage = true,
InvitedUserType = "Guest"
};
var result = await graphClient.Invitations
.Request()
.AddAsync(invitation);
// Update the provider to associate the Provider record with the new user id.
var userId = result.InvitedUser.Id;
var provider = await context.Providers.FindAsync(Provider.Id);
provider.UserId = userId;
// Add the user to groups so that role applications happen as necessary.
var directoryObject = new DirectoryObject
{
Id = userId
};
string region = provider.Region switch
{
Region.Cpt => config["redacted"],
Region.Dbn => config["redacted"],
_ => config["redacted"]
};
var groups = new List<string>
{
region,
config["redacted"]
};
foreach (var group in groups)
{
await graphClient.Groups[group].Members.References
.Request()
.AddAsync(directoryObject);
}
}
按照下面的 MS 文档页面所示,最初使用委托权限构建了这个,我更新了我的权限,使其更符合我们 Azure 上的另一个应用程序(由其他人开发),该应用程序可以运行,但上面设置的权限和在下面的 link 中指出的一个工作 - 在这两种情况下错误仍然存在。
https://docs.microsoft.com/en-us/graph/api/group-post-members?view=graph-rest-1.0&tabs=http
那么我缺少什么权限?
TL;DR 将 GroupMember.ReadWrite.All
设置为应用程序的 Application 权限,然后将应用程序添加到组中您正在分配成员。
这不是权限问题。
当我找到这个解决方案时,我已将 GroupMember.ReadWrite.All
作为 Application
权限添加到应用程序并获得管理员的同意,但错误仍然存在。
注意 GroupMember.ReadWrite.All
的权限说明:
Allows the app to list groups, read basic properties, read and update the membership of the groups this app has access to without a signed-in user. Group properties and owners cannot be updated and groups cannot be deleted.
特别感兴趣“此应用有权访问的组”。
事实证明我对此的理解是正确的,因为该应用程序需要成为相关组的成员才能将用户添加到该组。
场景:应用程序中的管理员用户(在 AD 上的特定组中)向应用程序的数据库中添加新服务提供商的新记录。此过程向添加的人的电子邮件地址发送邀请,并且[应该]将该新来宾用户添加到 AD 上与其在应用程序中的功能及其地理位置相关的一组特定组。
到目前为止,几乎所有事情都做得很好,但是当要将新的来宾用户添加到组时,我收到以下错误:
Microsoft.Graph.ServiceException: 'Code: Authorization_RequestDenied
Message: Insufficient privileges to complete the operation.
Inner error:
AdditionalData:
date: 2021-12-13T10:50:05
request-id: <redacted>
client-request-id: <redacted>
ClientRequestId: <redacted>'
我已获得管理员同意授予的以下权限:
- AdministrativeUnit.ReadWrite.All(申请)
- Directory.AccessAsUser.All(授权)
- Directory.ReadWrite.All(申请)
- Group.ReadWrite.All(申请)
- GroupMember.Read.All(授权)
- GroupMember.ReadWrite.All(申请)
- PrivilegedAccess.ReadWrite.AzureADGroup(申请)
- User.Invite.All(申请)
- User.ManageIdentities.All(申请)
- User.Read(授权)
- User.Read.全部(申请)
- User.ReadWrite.All(应用程序)
这是我的代码 - 我删除了敏感信息:
private async Task CreateUserInvitationAsync()
{
// Send the invitation.
var invitation = new Invitation
{
InvitedUserEmailAddress = Provider.Email,
InviteRedirectUrl = $"{Request.Scheme}://{Request.Host}{this.Request.PathBase}/",
SendInvitationMessage = true,
InvitedUserType = "Guest"
};
var result = await graphClient.Invitations
.Request()
.AddAsync(invitation);
// Update the provider to associate the Provider record with the new user id.
var userId = result.InvitedUser.Id;
var provider = await context.Providers.FindAsync(Provider.Id);
provider.UserId = userId;
// Add the user to groups so that role applications happen as necessary.
var directoryObject = new DirectoryObject
{
Id = userId
};
string region = provider.Region switch
{
Region.Cpt => config["redacted"],
Region.Dbn => config["redacted"],
_ => config["redacted"]
};
var groups = new List<string>
{
region,
config["redacted"]
};
foreach (var group in groups)
{
await graphClient.Groups[group].Members.References
.Request()
.AddAsync(directoryObject);
}
}
按照下面的 MS 文档页面所示,最初使用委托权限构建了这个,我更新了我的权限,使其更符合我们 Azure 上的另一个应用程序(由其他人开发),该应用程序可以运行,但上面设置的权限和在下面的 link 中指出的一个工作 - 在这两种情况下错误仍然存在。
https://docs.microsoft.com/en-us/graph/api/group-post-members?view=graph-rest-1.0&tabs=http
那么我缺少什么权限?
TL;DR 将 GroupMember.ReadWrite.All
设置为应用程序的 Application 权限,然后将应用程序添加到组中您正在分配成员。
这不是权限问题。
当我找到这个解决方案时,我已将 GroupMember.ReadWrite.All
作为 Application
权限添加到应用程序并获得管理员的同意,但错误仍然存在。
注意 GroupMember.ReadWrite.All
的权限说明:
Allows the app to list groups, read basic properties, read and update the membership of the groups this app has access to without a signed-in user. Group properties and owners cannot be updated and groups cannot be deleted.
特别感兴趣“此应用有权访问的组”。
事实证明我对此的理解是正确的,因为该应用程序需要成为相关组的成员才能将用户添加到该组。