Аутентификация API REST онлайн SharePoint без имени пользователя и пароля - PullRequest
1 голос
/ 24 октября 2019

Я пытаюсь создать консольное приложение, которое считывает данные из списка SharePoint.

Но я не хочу передавать учетные данные пользователя для аутентификации, вместо этого используйте токен. Возможно ли это?

Я пытался использовать следующий код, но я получаю запрещенную ошибку при попытке GetFormDigest

        static void Main(string[] args)
        {
            string sConnStr = "https://sab/sites/DevT";
            Uri oUri = null;
            oUri = new Uri(sConnStr + "/_api/web/lists/getbytitle('sd')/GetItems");

            string sResult = string.Empty;

            string stringData = "{'query' : {'__metadata': { 'type': 'SP.CamlQuery' }, 'ViewXml':'<View><Query><Where><Eq><FieldRef Name =\"Title\"/><Value Type=\"Text\">HR</Value></Eq></Where></Query></View>'}}";

            HttpWebRequest oWebRequest = (HttpWebRequest)WebRequest.Create(oUri);
            oWebRequest.Credentials = CredentialCache.DefaultNetworkCredentials;
            oWebRequest.Method = "POST";
            oWebRequest.Accept = "application/json;odata=verbose";
            oWebRequest.ContentType = "application/json;odata=verbose";
            oWebRequest.Headers.Add("X-RequestDigest", GetFormDigest());
            oWebRequest.ContentLength = stringData.Length;

            StreamWriter writer = new StreamWriter(oWebRequest.GetRequestStream());
            writer.Write(stringData);
            writer.Flush();

            WebResponse wresp = oWebRequest.GetResponse();
            using (StreamReader sr = new StreamReader(wresp.GetResponseStream()))
            {
                sResult = sr.ReadToEnd();
            }
        }

        public static string GetFormDigest()
        {
            string sFormDigest = null;
            string sConnStr = "https://sab/sites/DevT";
            Uri oUri = null;
            oUri = new Uri(sConnStr + "/_api/contextinfo");

            HttpWebRequest oWebRequest = HttpWebRequest.Create(oUri) as HttpWebRequest;
            oWebRequest.UseDefaultCredentials = true;
            oWebRequest.Method = "POST";
            oWebRequest.Accept = "application/json;odata=verbose";
            oWebRequest.ContentLength = 0;
            oWebRequest.ContentType = "application/json";
            string sResult;
            WebResponse sWebReponse = oWebRequest.GetResponse();

            using (StreamReader sr = new StreamReader(sWebReponse.GetResponseStream()))
            {
                sResult = sr.ReadToEnd();
            }

            var jss = new JavaScriptSerializer();
            var val = jss.Deserialize<Dictionary<string, object>>(sResult);
            var d = val["d"] as Dictionary<string, object>;
            var wi = d["GetContextWebInformation"] as Dictionary<string, object>;
            sFormDigest = wi["FormDigestValue"].ToString();

            return sFormDigest;

        } 

1 Ответ

0 голосов
/ 25 октября 2019

Вы можете использовать аутентификацию надстройки для доступа к данным SharePoint.

Вы можете проверить мою тестовую демонстрацию ниже.

https://social.msdn.microsoft.com/Forums/office/en-US/d33f5818-f112-42fb-becf-3cf14ac5f940/app-only-token-issue-unauthorized-access?forum=appsforsharepoint

...