我的应用需要哪些权限才能将用户添加到群组?

Posted

技术标签:

【中文标题】我的应用需要哪些权限才能将用户添加到群组?【英文标题】:What permissions does my app need before it can add users to groups? 【发布时间】:2022-01-16 23:32:07 【问题描述】:

场景:应用程序中的管理员用户(在 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.All(应用程序) User.ReadWrite.All(应用程序)

这是我的代码 - 我已删除敏感信息:

private async Task CreateUserInvitationAsync()

    // Send the invitation.
    var invitation = new Invitation
    
        InvitedUserEmailAddress = Provider.Email,
        InviteRedirectUrl = $"Request.Scheme://Request.Hostthis.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 Docs 页面所示,最初使用委派权限构建了这个,我更新了我的权限,使其更符合我们 Azure 上的另一个应用程序(由其他人开发),该应用程序有效,但既不是上面设置的权限,也不是指定的权限在下面的链接中工作 - 两种情况下都存在错误。

https://docs.microsoft.com/en-us/graph/api/group-post-members?view=graph-rest-1.0&tabs=http

那么我缺少什么权限?

【问题讨论】:

【参考方案1】:

TL;DRGroupMember.ReadWrite.All 设置为您应用的 Application 权限,然后将该应用添加到您分配成员的组中。


这不是权限问题。

当我找到此解决方案时,我已将GroupMember.ReadWrite.All 添加为应用程序的Application 权限并获得管理员的同意,但错误仍然存​​在。

注意GroupMember.ReadWrite.All的权限说明:

允许应用列出组、读取基本属性、读取和更新此应用在没有登录用户的情况下可以访问的组的成员资格。无法更新群组属性和所有者,也无法删除群组。

特别感兴趣“此应用有权访问的群组”

我对此的理解是正确的,因为应用需要成为相关组的成员,才能将用户添加到组中。

【讨论】:

以上是关于我的应用需要哪些权限才能将用户添加到群组?的主要内容,如果未能解决你的问题,请参考以下文章

Docker非root用户使用

如何将消息从另一个用户的频道正确转发到群组?

linux中如何用指令将用户加入到群组中

zabbix没有收到报警邮件

添加账号

需要哪些 AWS 权限才能查看 ECR 增强图像扫描结果