使用Azure AD API将成员添加到通讯组

时间:2018-08-29 19:14:28

标签: node.js azure-active-directory azure-ad-graph-api

我想将成员添加到分发列表。显然我无法使用Microsoft Graph执行此操作,因此我尝试使用Azure AD Graph API。我正在使用Node.js。

我能够使用adal-node库连接到Azure。我得到一个令牌,发送请求并获得响应。 (我可以列出组,用户等)。

我正在关注Add Members documentation,但感到困惑。

  1. 在URL中,我要添加成员的object_idid是巫婆吗?

  2. 对于myorganization,我正在使用tennant_id

  3. 我在哪里指定用户数据?我应该在POST中传递它吗?如果是这样,格式是什么?

  4. URL中的$links是什么?

当前,我正在这样做:

request.post(
  "https://graph.windows.net/TENNANT_ID_HERE/groups/GROUP_ID_HERE/$links/members?api-version=1.6",
  {
    headers: {
      Authorization: "Bearer " + TOKEN_HERE,
      "Content-Type": "application/json"
    },
    form: { key: "value" } //should I put my user object here?
  },
  function(err, res, body) {
    if (err) {
      console.log("err: " + err);
    } else {
      console.log("res: " + JSON.stringify(res, null, 3));
    }
  }
);

我收到以下错误:

{
  "odata.error": {
    "code": "Request_BadRequest",
    "message": {
      "lang": "en",
      "value":  "A supported MIME type could not be found that matches the 
                content type of the response. None of the supported type(s) 'application/xml, text/xml, 
                application/json;odata=minimalmetadata;streaming=true, application/json;odata=minimalmetadata;
                streaming=false, application/json;odata=minimalmetadata, 
                application/json;odata=fullmetadata;streaming=true, 
                application/json;odata=fullmetadata;streaming=false, 
                application/json;odata=fullmetadata, 
                application/json;odata=nometadata;streaming=true, 
                application/json;odata=nometadata;streaming=false, 
                application/json;odata=nometadata, 
                application/json;streaming=true, 
                application/json;streaming=false, 
                application/json;odata=verbose, 
                application/json' 
                matches the content type 'application/x-www-form-urlencoded'."
    }
  }
}

2 个答案:

答案 0 :(得分:1)

我们可以使用AD graph API将成员添加到组中。

post https://graph.windows.net/{tenantId}/groups/{groupobjectid}/$links/members?api-version=1.6

身体

{
  "url": "https://graph.windows.net/{tenantId}/directoryObjects/{userObjectId}"
}

用邮递员测试

enter image description here

答案 1 :(得分:1)

最简短/最重要的答案是 Microsoft Graph或Azure AD Graph API都不支持通讯组列表。来自documentation

  

重要:您只能将成员添加到安全组和启用邮件的安全组中。


也就是说,从技术上讲,这不是您的电话在此处失败的原因。由于您正在使用的组的类型,您的代码已经到了失败的地步。尽管这对您管理分发列表没有帮助,但实际上是以下情况。

form: { key: "value" }选项告诉request以URL编码形式(application/x-www-form-urlencoded)发送有效负载。该API要求有效载荷以JSON(application/json)的形式发送。

要通过JSON发送,您需要做两件事:

  1. json选项设置为true
  2. 设置body值,而不是form值。

正确的代码如下:

request.post(
  "https://graph.windows.net/{tenant-id}/groups/{group-id}/$links/members?api-version=1.6",
  {
    headers: {
      Authorization: "Bearer " + TOKEN_HERE
    },
    json: true,
    body: JSON.stringify({ url: "https://graph.windows.net/{tenant-id}/directoryObjects/{user-id}" })
  },
  function(err, res, body) {
    if (err) {
      console.log("err: " + err);
    } else {
      console.log("res: " + JSON.stringify(res, null, 3));
    }
  }
);

URI中的$links参数告诉API您正在提供到另一个资源(在本例中为用户记录)的链接。