使用 c# 从 SharePoint Online 外部获取 SharePoint 列表数据
Get SharePoint list data from outside SharePoint Online using c#
我有一个 SharePoint 在线列表,需要从 SharePoint 外部的列表中获取数据。
我需要使用访问令牌方法,因为我已经在同一个租户的 azure AD 中创建了一个应用程序并试图获取列表但它给出了未经授权的错误。
我尝试使用 SharePoint REST api 并在 headers 中传递令牌。我已经参考了以下 URL:
https://www.ktskumar.com/2017/01/access-sharepoint-online-using-postman/
但它在 Postman 本身给我的错误是“{"error_description":"Invalid JWT token. The token is expired."}”。
我在应用程序注册和清单中添加了 api 权限,但仍然没有成功!
我已经测试了您提供的 link 中的步骤。它对我来说很好用。
此错误是由于您在 https://.sharepoint.com/_layouts/15/appinv.aspx.
注册的应用的客户端密码过期所致
您可以注册一个新应用或replace an expiring client secret in a SharePoint Add-in。
你在azure和SharePoint add-in中注册的app不一样,token也不一样
您可以使用加载项身份验证来访问 SharePoint。
如果您确实想使用 azure 应用访问 SharePoint,您可以检查 this thread。
我已经解决了这个问题,首先创建一个访问令牌,然后通过传递令牌进行http请求。
using (var context = new ClientContext("SiteURL"))
{
context.ExecutingWebRequest += Context_ExecutingWebRequest;
}
public void Context_ExecutingWebRequest(object sender, WebRequestEventArgs e)
{
e.WebRequestExecutor.RequestHeaders["Authorization"] = "Bearer " + GetAccessToken();
}
public string GetAccessToken()
{
try
{
#region Get Access token for Azure AD access
var client = new RestClient("https://accounts.accesscontrol.windows.net/" + TenantID + "/tokens/OAuth/2");
var request = new RestRequest(Method.POST);
request.AddParameter("grant_type", "client_credentials");
request.AddParameter("client_id", "ClientID@TenantID");
request.AddParameter("client_secret", "ClientSecret");
request.AddParameter("resource", "00000003-0000-0ff1-ce00-000000000000/SharePointSite@TenantID");
IRestResponse restClientResponse = client.Execute(request);
var DeserializeObject = JsonConvert.DeserializeObject<BearerToken>(restClientResponse.Content.ToString());
string accessToken = DeserializeObject.AccessToken;
#endregion
return accessToken;
}
catch (Exception ex)
{
throw ex;
}
}
我有一个 SharePoint 在线列表,需要从 SharePoint 外部的列表中获取数据。 我需要使用访问令牌方法,因为我已经在同一个租户的 azure AD 中创建了一个应用程序并试图获取列表但它给出了未经授权的错误。
我尝试使用 SharePoint REST api 并在 headers 中传递令牌。我已经参考了以下 URL: https://www.ktskumar.com/2017/01/access-sharepoint-online-using-postman/ 但它在 Postman 本身给我的错误是“{"error_description":"Invalid JWT token. The token is expired."}”。 我在应用程序注册和清单中添加了 api 权限,但仍然没有成功!
我已经测试了您提供的 link 中的步骤。它对我来说很好用。
此错误是由于您在 https://.sharepoint.com/_layouts/15/appinv.aspx.
注册的应用的客户端密码过期所致您可以注册一个新应用或replace an expiring client secret in a SharePoint Add-in。
你在azure和SharePoint add-in中注册的app不一样,token也不一样
您可以使用加载项身份验证来访问 SharePoint。
如果您确实想使用 azure 应用访问 SharePoint,您可以检查 this thread。
我已经解决了这个问题,首先创建一个访问令牌,然后通过传递令牌进行http请求。
using (var context = new ClientContext("SiteURL"))
{
context.ExecutingWebRequest += Context_ExecutingWebRequest;
}
public void Context_ExecutingWebRequest(object sender, WebRequestEventArgs e)
{
e.WebRequestExecutor.RequestHeaders["Authorization"] = "Bearer " + GetAccessToken();
}
public string GetAccessToken()
{
try
{
#region Get Access token for Azure AD access
var client = new RestClient("https://accounts.accesscontrol.windows.net/" + TenantID + "/tokens/OAuth/2");
var request = new RestRequest(Method.POST);
request.AddParameter("grant_type", "client_credentials");
request.AddParameter("client_id", "ClientID@TenantID");
request.AddParameter("client_secret", "ClientSecret");
request.AddParameter("resource", "00000003-0000-0ff1-ce00-000000000000/SharePointSite@TenantID");
IRestResponse restClientResponse = client.Execute(request);
var DeserializeObject = JsonConvert.DeserializeObject<BearerToken>(restClientResponse.Content.ToString());
string accessToken = DeserializeObject.AccessToken;
#endregion
return accessToken;
}
catch (Exception ex)
{
throw ex;
}
}