Как получить доступ к сайту SharePoint с помощью токена доступа CRM? - PullRequest
0 голосов
/ 23 апреля 2019

Я пытаюсь получить доступ к сайту SharePoint с помощью токена доступа, сгенерированного CRM и AAD. С помощью имени пользователя и пароля я могу получить доступ к сайту. То же имя пользователя и пароль я передаю, чтобы получить токен. Когда я передаю токен, я получаю 401 несанкционированную ошибку.

private bool GetCRMToken(CRMSettings crmSettings)
        {
            bool GetCRMTokenSuccess = false;
            using (var client = new HttpClient())
            {
                client.BaseAddress = new Uri("https://login.microsoftonline.com/" + some tenant id + "/oauth2/token");
                client.DefaultRequestHeaders.Accept.Clear();
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                var content = new FormUrlEncodedContent(new[]
                {
                        new KeyValuePair<string, string("client_id",ClientId),
                        new KeyValuePair<string, string>("resource",Resource),
                        new KeyValuePair<string, string>("username",Username),
                        new KeyValuePair<string, string>("password",Password),
                        new KeyValuePair<string, string>("Client_Secret",ClientSecret),
                        new KeyValuePair<string, string>("grant_type","password")
                });
                var response = client.PostAsync(client.BaseAddress, content).Result;
                string resultContent = response.Content.ReadAsStringAsync().Result;
                if (response.IsSuccessStatusCode)
                {
                    if (response.StatusCode == System.Net.HttpStatusCode.OK)
                    {
                        GlobalDataStorage.CRMToken = JsonConvert.DeserializeObject<TokenResponseModel>(resultContent);
                        GetCRMTokenSuccess = true;
                    }
                }
                else
                {                  
                   var str = exp.error;
                    GetCRMTokenSuccess = false;
                }
            }
            return GetCRMTokenSuccess;
        }

Для доступа к сайту sharepoint я передаю токен, как показано ниже

context.ExecutingWebRequest += delegate (object sender, WebRequestEventArgs e)
{
  e.WebRequestExecutor.WebRequest.Headers.Add("Authorization", "Bearer " + accessToken);
  //e.WebRequestExecutor.WebRequest.CookieContainer = cc;
};

После выполнения в context.executequery я получаю исключение 401.

...