如何从c#后端验证SharePoint Rest API调用? (阅读详情)

时间:2016-12-02 11:19:32

标签: c# rest authentication sharepoint

我正在尝试简单的应用程序,该应用程序侦听http请求并对Sharepoint 2013进行rest api调用。

情境:

用户从浏览器向后端(在c#中)发出get请求。从后端调用sharepoint api。现在它应该使用登录用户凭据来处理此请求,但是我收到了未经授权的错误。

直接从浏览器调用rest api。

注意: 用户通过AD进行身份验证,因此我不想再在我的应用中请求凭据。 我发现的大多数解决方案都假设用户在机器上登录进行休息呼叫(后端),但是它的情况不同。

1 个答案:

答案 0 :(得分:0)

调用SharePoint API必须使用安全标头。您有不同的方式来获取AccessToken,包括对ADFS或login.microsoft的纯HTTP调用,但我认为您需要它。

使用本机客户端上下文的示例。

ClientContext clientContext = new ClientContext(someSharePointUrl);
clientContext.ExecutingWebRequest += delegate (object sender, WebRequestEventArgs e)
{
    e.WebRequestExecutor.WebRequest.Headers["Authorization"] = string.Format("Bearer {0}", someUserToken);
};
//... then use clientContext as usual

使用更常见的REST调用的示例,也包括formDigest

HttpWebRequest itemRequest =
    (HttpWebRequest)HttpWebRequest.Create(hostUrl + "/_api/Web/lists/getbytitle('" + listName + "')/items");
itemRequest.Method = "POST";
itemRequest.ContentLength = itemPostBody.Length;
itemRequest.ContentType = "application/json;odata=verbose";
itemRequest.Accept = "application/json;odata=verbose";
itemRequest.Headers.Add("Authorization", "Bearer " + token);
itemRequest.Headers.Add("X-RequestDigest", formDigest);

其他选项是使用AppOnlyToken,但您可以模拟API调用并自行管理用户ID!