Authenticate SharePoint - JackHu88/Comm GitHub Wiki

Enable FBA for SharePoint Server

https://www.cnblogs.com/goldeneyezhang/p/7755730.html

AppForSharePointOnlineWebToolkit

https://www.nuget.org/packages/AppForSharePointOnlineWebToolkit

https://docs.microsoft.com/en-us/sharepoint/dev/solution-guidance/security-apponly-azureacs

https://social.technet.microsoft.com/wiki/contents/articles/31338.sharepoint-online-using-app-only-policy-to-create-site-collection-in-sharepoint-online.aspx

Replace an expiring client secret in a SharePoint Add-in

https://docs.microsoft.com/en-us/sharepoint/dev/sp-add-ins/replace-an-expiring-client-secret-in-a-sharepoint-add-in

<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
  <appSettings>
    <add key="ClientId" value="xxxx" />
    <add key="ClientSecret" value="xxx" />
    <add key="Realm" value="xxxxx" /> //Tenant ID
  </appSettings>
</configuration>
using Microsoft.SharePoint.Client;
using Microsoft.Online.SharePoint.TenantAdministration;

var siteUri= new Uri("https://yourtenant.sharepoint.com");
try { 
                var accessToken = TokenHelper.GetAppOnlyAccessToken(TokenHelper.SharePointPrincipal, siteUri.Authority, null).AccessToken;

                using (var ctx = TokenHelper.GetClientContextWithAccessToken(siteUri.ToString(), accessToken))
                {
                    Web web = ctx.Web;
                    User user = web.CurrentUser;
                    ctx.Load(web);
                    ctx.Load(user);
                    ctx.ExecuteQuery();
                    Console.WriteLine(web.Title);
                    Console.WriteLine(user.LoginName);
                    Console.ReadLine();

                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }


SharePointPnPCoreOnline

https://www.nuget.org/packages/SharePointPnPCoreOnline

https://gist.github.com/vman/37bab1e1d700be238011f1de23a3e275

https://www.ktskumar.com/2016/05/authenticate-sharepoint-using-pnp-authentication-manager/

https://docs.microsoft.com/en-us/sharepoint/dev/solution-guidance/security-apponly-azureacs

<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
  <appSettings>
    <add key="ClientId" value="xxxx" />
    <add key="ClientSecret" value="xxx" />
  </appSettings>
</configuration>
using Microsoft.SharePoint.Client;
using OfficeDevPnP.Core;

AuthenticationManager authManager = new AuthenticationManager(); 
var ctx = authManager.GetAppOnlyAuthenticatedContext("https://yourtenant.sharepoint.com, ClientId, ClientSecret);
//var ctx = authManager.GetSharePointOnlineAuthenticatedContextTenant(siteUrl, account, password);

            Web web = ctx.Web;
            User user = web.CurrentUser;
            ctx.Load(web);
            ctx.Load(user);
            ctx.ExecuteQuery();
            Console.WriteLine(web.Title);
            Console.WriteLine(user.LoginName);
            Console.ReadLine();

Http Request

https://www.ktskumar.com/2017/01/access-sharepoint-online-using-postman

<configuration>
  <appSettings>
    <add key="ClientID" value="xxx" />
    <add key="ClientSecret" value="xxx" />
    <add key="SiteDomain" value="xxx" />
    <add key="TenantID" value="xxx" />
    <add key="resource" value="00000003-0000-0ff1-ce00-000000000000" />
  </appSettings>
</configuration>
//On-Premise

            HttpWebRequest endpointRequest = (HttpWebRequest)HttpWebRequest.Create("http://sp2013/_api/web/lists/getByTitle('Tasks')/items");

            endpointRequest.Method = "GET";
            endpointRequest.Accept = "application/json;odata=verbose";

            NetworkCredential cred = new NetworkCredential(account), securepassWord);

            endpointRequest.Credentials = cred;
            HttpWebResponse endpointResponse = (HttpWebResponse)endpointRequest.GetResponse();
            try
            {
                WebResponse webResponse = endpointRequest.GetResponse();
                Stream webStream = webResponse.GetResponseStream();
                StreamReader responseReader = new StreamReader(webStream);
                string response = responseReader.ReadToEnd();
                JObject jobj = JObject.Parse(response);
                JArray jarr = (JArray)jobj["d"]["results"];
                foreach (JObject j in jarr)
                {
                    Console.WriteLine(j["Title"]);
                }

                responseReader.Close();
                //Console.ReadLine();
            }
            catch (Exception ex)
            {
                Console.Out.WriteLine(ex.Message); Console.ReadLine();
            }
//SharePoint Online
            var request = (HttpWebRequest)HttpWebRequest.Create(@"https://accounts.accesscontrol.windows.net/" + TenantID + "/tokens/OAuth/2");
            request.Method = "POST";
            request.ContentType = "application/x-www-form-urlencoded";
            request.AllowAutoRedirect = false;

            Encoding myEncoding = Encoding.GetEncoding("gb2312");
            string requestBody = HttpUtility.UrlEncode("grant_type", myEncoding) + "=" + HttpUtility.UrlEncode("client_credentials", myEncoding)
                + "&" + HttpUtility.UrlEncode("client_id", myEncoding) + "=" + HttpUtility.UrlEncode(ClientID + "@" + TenantID, myEncoding)
                + "&" + HttpUtility.UrlEncode("client_secret", myEncoding) + "=" + HttpUtility.UrlEncode(ClientSecret, myEncoding)
                + "&" + HttpUtility.UrlEncode("resource", myEncoding) + "=" + HttpUtility.UrlEncode(resource + "/" + SiteDomain + "@" + TenantID, myEncoding);
            byte[] contentBytes = Encoding.UTF8.GetBytes(requestBody);

            request.ContentLength = contentBytes.Length;
            using (var requestStream = request.GetRequestStream())
            {
                requestStream.Write(contentBytes, 0, contentBytes.Length);
                requestStream.Close();

                HttpWebResponse hwRes = request.GetResponse() as HttpWebResponse;
                if (hwRes.StatusCode == System.Net.HttpStatusCode.OK)
                {
                    Stream rStream = hwRes.GetResponseStream();
                    StreamReader sr = new StreamReader(rStream, Encoding.UTF8);
                    string result = sr.ReadToEnd();
                    sr.Close();
                    rStream.Close();

                    var obj = JObject.Parse(result);
                    string access_token = obj.GetValue("access_token").ToString();

                    var request2 = (HttpWebRequest)HttpWebRequest.Create(@"https://tennat.sharepoint.com/_api/web/lists/getByTitle('Test')/items");

                    request2.Method = "Get";
                    request2.PreAuthenticate = true;
                    request2.ContentType = "application/json";
                    request2.AllowAutoRedirect = false;
                    request2.Accept = "application/json";
                    request2.Headers.Add("Authorization", "Bearer " + access_token);

                    try
                    {
                        WebResponse webResponse = request2.GetResponse();
                        Stream webStream = webResponse.GetResponseStream();
                        StreamReader responseReader = new StreamReader(webStream);
                        string response = responseReader.ReadToEnd();
                        JObject jobj = JObject.Parse(response);
                        JArray jarr = (JArray)jobj["value"];
                        foreach (JObject j in jarr)
                        {
                            Console.WriteLine(j["Title"]);
                        }

                        responseReader.Close();
                    }
                    catch (Exception ex)
                    {
                        Console.Out.WriteLine(ex.Message); Console.ReadLine();
                    }

                }
            }
//
https://blog.csdn.net/cslp517/article/details/66973474

https://stackoverflow.com/questions/54252915/c-sharp-code-to-update-sharepoint-list-item-using-rest-api-call

 Uri uri = new Uri ("https://tenantname.sharepoint.com/sites/dev/");
            using (var client = new SPHttpClient(uri, "[email protected]", "yourpassword"))
            {
                var listTitle = "MyList8";
                var itemId = 4;
                var itemPayload = new { __metadata = new { type = "SP.Data.MyList8ListItem" }, Title = "updateviaRest" };
                var endpointUrl = string.Format("{0}/_api/web/lists/getbytitle('{1}')/items({2})", uri, listTitle, itemId);
                var headers = new Dictionary<string, string>();
                headers["IF-MATCH"] = "*";
                headers["X-HTTP-Method"] = "MERGE";
                client.ExecuteJson(endpointUrl, HttpMethod.Post, headers, itemPayload);
                Console.WriteLine("Task item has been updated");
            }

From <https://stackoverflow.com/questions/54252915/c-sharp-code-to-update-sharepoint-list-item-using-rest-api-call> 
⚠️ **GitHub.com Fallback** ⚠️