我有一个SharePoint在线列表,需要从SharePoint之外的列表中获取数据。我需要使用访问令牌方法,因为我已经在相同的租户中在azure AD中创建了一个应用程序,并试图获取列表,但它会产生未经授权的错误。
我尝试使用SharePoint REST并在标头中传递令牌。我引用了下面的URL:https://www.ktskumar.com/2017/01/access-sharepoint-online-using-postman/,但是它给我的错误是“{”error_description“:”无效的JWT令牌。令牌已过期。“}”在邮递员本身。我已经在应用程序注册和清单中添加了api权限,但仍然没有运气!
发布于 2019-11-12 14:44:31
我已经解决了这个问题,首先创建一个访问令牌,然后通过传递令牌发出一个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;
}
}发布于 2019-11-12 02:21:20
我已经测试了你提供的链接中的步骤。对我来说很好。
此错误是由您在布局/15/appinv.aspx注册的应用程序的客户端机密过期引起的。
您可以注册一个新的应用程序或在SharePoint外接程序中替换过期的客户端秘密。。
https://stackoverflow.com/questions/58800178
复制相似问题