Добавить участника в группу рассылки с помощью API Azure AD - PullRequest
0 голосов
/ 29 августа 2018

Я хочу добавить участника в список рассылки . Поскольку, очевидно, я не могу сделать это с помощью Microsoft Graph, я пытаюсь использовать Azure AD Graph API. Я использую Node.js.

Я могу подключиться к Azure с помощью библиотеки adal-node. Я получаю токен обратно, отправляю запросы и получаю ответы. (Я могу перечислить группы, пользователей и т. Д.).

Я следую документации Добавить участников , но я в замешательстве.

  1. В URL-адресе object_id является id группы, к которой я хочу добавить участника?

  2. Для myorganization я использую tennant_id.

  3. Где я могу указать данные пользователя? Должен ли я передать это в POST? Если да, то какой формат?

  4. Что такое $links в URL?

В настоящее время я делаю это:

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 голосов
/ 30 августа 2018

Короткий / самый важный ответ заключается в том, что ни Microsoft Graph или Azure AD Graph API не поддерживают списки рассылки. Из документации :

Важно : Вы можете добавлять участников только в группы безопасности и группы безопасности с включенной поддержкой почты.


Тем не менее, технически это не то, почему ваш звонок здесь не срабатывает. Ваш код достигает точки, где он терпит неудачу из-за типа группы, с которой вы работаете. И хотя это не поможет вам в управлении списком рассылки, на самом деле происходит следующее.

Опция form: { key: "value" } указывает запрос на отправку полезной нагрузки в виде закодированной формы 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));
    }
  }
);

Параметр $links в URI сообщает API, что вы предоставляете ссылку на другой ресурс (в данном случае запись пользователя).

0 голосов
/ 30 августа 2018

мы можем добавить члена в группу с 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...