Добавить участника в группу Office 365 с помощью JSON/JavaScript

Я пытаюсь добавить пользователя, который нажимает на кнопку на сайте SharePoint (онлайн) в группу Office 365. Я знаю, что это можно сделать с помощью JSON, используя Add Member API.

https://github.com/OfficeDev/microsoft-graph-docs/blob/master/api-reference/v1.0/api/group_post_members.md

Я, однако, действительно неопытен, когда дело доходит до JSON и постоянно портит функцию POST. Это код, который у меня есть сейчас, все до запятой работало нормально.

function showButton() {

    $('btn-1').on('click', function(event) {
        var userProfileProperties
        var clientContext = new SP.ClientContext.get_current();
        var peopleManager = new SP.UserProfiles.PeopleManager(clientContext);
        userProfileProperties = peopleManager.getMyProperties();
        clientContext.load(userProfileProperties);
        clientContext.executeQueryAsync(onSuccess, onFail);

        function onSuccess(){
            accountProperties = userProfileProperties.get_userProfileProperties();
            accountId = accountProperties['msOnline-ObjectId'];
            //JSON Query
            jQuery.ajax({   
                url: "https://mysite.sharepoint.com/groups/groupID/members/$ref";
                method: "POST";
                contentType: "application/json";
                dataType: 'json',
                {
                    "@odata.id": "https://graph.microsoft.com/v1.0/directoryObjects/" + accountId
                };
            });
        };  
        function onFail(){
            alert(failed);
        };
    });
};

1 ответ

В вашем документе вы найдете токен аутентификации, необходимый в заголовках запроса. Без токена аутентификации вы получите сообщение об ошибке:

"code": "InvalidAuthenticationToken", "message": "Bearer access token is empty."

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

1. Зарегистрируйте приложение javascript в Azure AD и настройте свое приложение, чтобы разрешить поток неявного предоставления OAuth 2.0. Токены получены с использованием потока неявного предоставления OAuth 2.0. Используя неявное разрешение, ваше приложение запрашивает токен доступа из Azure AD для текущего пользователя, вошедшего в систему, отправляя пользователю URL-адрес авторизации, где пользователь выполняет вход со своими учетными данными Office 365, а затем перенаправляется обратно в приложение с токеном доступа. в URL.

2.Добавить разрешения для Graph API.

3. Добавьте html-страницу к своей точке доступа в Интернете (в режиме проводника).

4. Измените HTML, напишите ниже функцию, чтобы получить токен доступа:

 function requestToken() { 
   // Change clientId and replyUrl to reflect your app's values 
   // found on the Configure tab in the Azure Management Portal. 
   // Also change {your_subdomain} to your subdomain for both endpointUrl and resource. 
   var clientId = '3dadb44e-feaa-4158-90f5-e129e15db66d';//ID of your App in Azure
   var replyUrl = 'https://o365e3w15.sharepoint.com/sites/XXX/app.html';  //my sharepoint page that requests 
   //an oauth 2 authentification and data
   //It is also referenced in the REPLY URL field of my App in Azure
   var endpointUrl = 'https://graph.microsoft.com/v1.0/me/messages';
   var resource = "https://graph.microsoft.com/";
   var authServer  = 'https://login.windows.net/common/oauth2/authorize?';  
   //var authServer  =  'https://login.microsoftonline.com/common/oauth2/authorize?';//this works either
   var responseType = 'token'; 

   var url = authServer + 
        "response_type=" + encodeURI(responseType) + "&" + 
        "client_id=" + encodeURI(clientId) + "&" + 
        "resource=" + encodeURI(resource) + "&" + 
        "redirect_uri=" + encodeURI(replyUrl); 

   window.location = url; 
}
  1. После этого вы можете сделать ajax-вызов конечной точки Graph API для получения / отправки запроса, например, для получения сообщений текущего пользователя:

    var endpointUrl = "https://graph.microsoft.com/v1.0/me/messages";
    
    var xhr = new XMLHttpRequest(); 
    xhr.open("GET", endpointUrl); 
    var myToken = getToken();
    // The APIs require an OAuth access token in the Authorization header, formatted like this: 
    //'Authorization: Bearer <token>'. 
    xhr.setRequestHeader("Authorization", "Bearer " + myToken); 
    
    // Process the response from the API.  
    xhr.onload = function () { 
      if (xhr.status == 200) { 
        //alert('data received');
        var message="";
        var object = JSON.parse(xhr.response); 
        for(i=0;i<object.value.length;i++){
        message+='Subject: ' + object.value[i].subject + '<br>';    
       }
       document.getElementById("results").innerHTML = message;
      } else { } 
    }
    // Make request.
    xhr.send(); 
    
  2. отобразить этот app.html на любой странице веб-части SharePoint, вызвав ее в теге iframe.

Все подробные шаги вы найдете в этой статье, я проверил и отлично работаю в мою сторону.

Другие вопросы по тегам