Microsoft graph api 尝试通过Microsoft Graph创建组时“权限不足,无法完成操作”

Microsoft graph api 尝试通过Microsoft Graph创建组时“权限不足,无法完成操作”,microsoft-graph-api,microsoft-graph-sdks,msal.js,Microsoft Graph Api,Microsoft Graph Sdks,Msal.js,期望的行为 通过Microsoft Graph,在具有委托API权限的单租户应用程序中使用JavaScript SDK和MSAL创建组 实际行为 我试过的 为了创建代码,我使用了以下API参考说明: 登录/注销以及所有其他API请求都正常工作 订阅 API权限 ***我在阅读后添加了这些,但仍然得到相同的错误。 +++我在下面的回答中补充了这个建议 我已单击Azure应用程序注册区域中的“授予管理员同意”按钮 index.html config.js //msal选项 常量msalConfig=

期望的行为

通过Microsoft Graph,在具有委托API权限的单租户应用程序中使用JavaScript SDK和MSAL创建组

实际行为

我试过的

为了创建代码,我使用了以下API参考说明:

登录/注销以及所有其他API请求都正常工作

订阅

API权限

***我在阅读后添加了这些,但仍然得到相同的错误。 +++我在下面的回答中补充了这个建议


我已单击Azure应用程序注册区域中的“授予管理员同意”按钮

index.html

config.js

//msal选项 常量msalConfig={ 认证:{ clientId:此处为客户端id, 重定向URI:http://localhost:8080, 授权:https://login.microsoftonline.com/tenant-id-here }, 缓存:{ 缓存位置:会话存储, storeAuthStateInCookie:错, forceRefresh:错误 } }; //定义应用程序权限 const scopes=['directory.accessUser.all'、'directory.readwrite.all'、'group.readwrite.all'、'groupmember.readwrite.all'、'openid'、'profile'、'sites.read.all'、'user.read'、'tasks.readwrite']; auth.js

const msalApplication=新的Msal.UserAgentApplicationmsalConfig; 常量登录请求={ 作用域:作用域 } 异步函数登录{ 试一试{ 等待msalApplication.loginpoppuploginrequest; 如果msalApplication.getAccount{ console.logsign成功; } }捕捉错误{ console.logsign错误; console.logerror; } } 功能签出{ msalApplication.logout; } graph.js

var路径=/组; 变量组={ 描述:这是一个描述。, 显示名称:test\u test\u test, 组类型:[ 统一,, 动态会员制 ], mailEnabled:对, 邮件昵称:test_test_test, securityEnabled:false,//最初我认为这是真的,这两种方式似乎都没有什么区别 可见性:隐藏成员, owners@odata.bind: [ https://graph.microsoft.com/v1.0/users/my-user-id-here ], members@odata.bind: [ https://graph.microsoft.com/v1.0/users/my-user-id-here ] }; var response=await client.apipath .邮政组; 相关阅读:

关于什么可能导致错误的其他想法

仅对统一组支持可见性;安全组不支持它

可能securityEnabled:true和visibility:Hiddenmembership的组合不兼容

我尝试将其更改为securityEnabled:false,并得到了相同的消息

代币有什么问题吗

我从Chrome dev tools控制台复制了authorization:Bearer值并粘贴在上,令牌中提供了两个额外的作用域-但所有其他作用域都存在:


我可以看到您尚未授予组。请在您的权限集中创建权限。 授予此权限以创建组

对于应用程序权限类型,需要以下所有权限:

组。创建 Group.ReadWrite.All Directory.ReadWrite.All 和对于委派的用户权限类型:

Group.ReadWrite.All Directory.ReadWrite.All Directory.AccessAsUser.All 通过在graph.js中更改以下内容,我可以创建一个组:

我不知道为什么DynamicMembership会导致错误

它是下面链接中列出的Group>groupTypes的有效属性值,没有任何警告:

作为参考,上述代码创建:

组 SharePoint“团队网站” Outlook电子邮件组 它不会自动创建相应的:

团队 计划 您可以在以下位置看到列出的新组:

您可以在以下位置查看组“团队站点”:

https://your_account-admin.sharepoint.com/_layouts/15/online/AdminHome.aspx#/siteManagement

从graph调用中,我看到您尝试创建动态组并为此组分配一个成员,动态组不支持添加成员,这就是为什么在group type下删除dynamicMemberShip可以解决此问题,下面是通过graph API调用创建动态组的示例:

{
    "description": "test1",
    "displayName": "test1",
    "groupTypes": [
        "Unified",
        "DynamicMembership"
    ],
    "mailEnabled": true,
    "membershipRule": "user.displayname -contains A",
    "membershipRuleProcessingState":"On",
    "mailNickname": "library",
    "securityEnabled": false,
}

它是否正在请求Azure广告租户的管理员批准?在管理员批准之前,我无法使用user.read.all权限。此外,这适用于没有用户的守护程序应用程序。我已单击Azure应用程序注册区域中的“授予管理员同意”按钮将此信息添加到帖子中。权限是委派的,而不是应用程序,我已将此详细信息添加到问题中,谢谢。我在Microsoft Graph>委派权限>组区域中只看到两个权限:Group.Read.All和Group.ReadWrite.All,没有Group.Create。我尝试在应用程序和azure中添加Directory.AccessAsUser.All,但出现了相同的错误。您的意思是我必须添加应用程序和委派权限吗?我想我只需要添加授权权限
我的方案的授权。它只应与委派的权限一起工作,不需要添加应用程序权限,您是否在Azure portal上指定了权限?是否传递客户端机密以获取授权令牌@User1063287是,在azure和应用程序代码中具有指定的权限。所有的身份验证都由MSAL负责,javascript SDK、登录/注销和其他请求都可以正常工作。哦,根据我在其他地方读到的内容,我对动态组有不同的理解,不过,这似乎是一个很好的解释:所以在您的答案中解释的原因是为什么我会出现特定的“权限不足”错误?是的,这个答案可以解释为什么您会出现特定的权限不足错误以及通过图形API调用创建动态组的正确格式
Directory.AccessAsUser.All +++
Directory.ReadWrite.All ***
Group.ReadWrite.All  
GroupMember.ReadWrite.All ***
openid
profile
Sites.Read.All
Tasks.ReadWrite
User.Read
groupTypes: ["Unified","DynamicMembership"]  
groupTypes: ["Unified"]`   
https://your_account-admin.sharepoint.com/_layouts/15/online/AdminHome.aspx#/siteManagement
{
    "description": "test1",
    "displayName": "test1",
    "groupTypes": [
        "Unified",
        "DynamicMembership"
    ],
    "mailEnabled": true,
    "membershipRule": "user.displayname -contains A",
    "membershipRuleProcessingState":"On",
    "mailNickname": "library",
    "securityEnabled": false,
}