Sharepoint Online 上禁止 WebRequest
Posted
技术标签:
【中文标题】Sharepoint Online 上禁止 WebRequest【英文标题】:WebRequest is forbidden on Sharepoint Online 【发布时间】:2019-01-24 09:06:13 【问题描述】:我需要使用访问令牌在 SharePoint Online 中创建对特定页面的 Web 请求,以获取某些标头信息,但我不断收到 403,我不知道为什么。在处理了一些访问请求之后,我设法只使用 clientContext 获得 403,使用 Postman 获得 401。
我可以从我的应用程序中的 grah api 和使用访问令牌的邮递员获得响应,但问题是我需要执行 Web 请求来获取真正的网页标题,例如 SpRequestDuration 和 SPIISLatency。
我已按照步骤创建我的 Azure AD 和应用程序。 我请求用户登录以获取我的应用程序的验证码
loginScopes = [
'User.Read.All',
'Directory.Read.All',
'Group.Read.All',
'Sites.Read.All',
'Reports.Read.All'
'offline_access',
'https://www.sharepoint.com/AllSites.FullControl'
];
const encodedScopes = encodeURIComponent(loginScopes.join(' '));
const encodedRedirectUri = encodeURIComponent(redirectUri);
let url = `https://login.microsoftonline.com/organizations/oauth2/v2.0/authorize?
response_type=code&
client_id=$clientId
&redirect_uri=$encodedRedirectUri
&scope=$encodedScopes
&prompt=select_account`;
在此返回身份验证代码后,我创建 ConfidentialClientApplication 权限为:'https://login.microsoftonline.com/organizations' 并使用我的应用程序 clientId、秘密、重定向等。使用新创建的 ConfidentialClientApplication 我在范围'tenantUrl/AllSites.FullControl'和具有其他范围的另一个令牌。
现在,我使用访问令牌成功创建了 ClientContext,它从共享点站点检索数据,我可以轻松地发出图形 API 请求,一切都会好起来的。但问题在于向特定站点创建 WebRequest(例如。tenantUrl/SitePages/Forms/ByAuthor.aspx)
var manager = new AuthenticationManager();
var clientContext = manager.GetAzureADAccessTokenAuthenticatedContext(tenantUrl, accessToken);
clientContext.Load(clientContext.Site);
clientContext.Load(oWebsite.Lists);
clientContext.ExecuteQuery(); // Works fine
var request = clientContext.WebRequestExecutorFactory.CreateWebRequestExecutor(clientContext,tenantUrl/SitePages/Forms/ByAuthor.aspx).WebRequest;
request.Method = "GET";
//request.Headers.Add("Authorization", $"Bearer accessToken");
clientContext.ExecutingWebRequest += delegate (object sender, WebRequestEventArgs e)
e.WebRequestExecutor.WebRequest.Headers.Add("Authorization", "Bearer " + accessToken);
;
await request.GetResponseAsync(); // Throws 403
【问题讨论】:
【参考方案1】:在线共享点
string siteUrl = ConfigurationManager.AppSettings["siteURL"];
SecureString passWord = new SecureString();
string pass = ConfigurationManager.AppSettings["userPassword"];
string user = ConfigurationManager.AppSettings["userName"];
foreach (char c in pass.ToCharArray()) passWord.AppendChar(c);
ClientContext clientContext = new ClientContext(siteUrl);
clientContext.Credentials = new SharePointOnlineCredentials(user, passWord);
return clientContext;
没有
clientContext.ExecutingWebRequest
【讨论】:
以上是关于Sharepoint Online 上禁止 WebRequest的主要内容,如果未能解决你的问题,请参考以下文章
从 SharePoint Online Web 部件调用外部服务
如何在 Sharepoint Online 上托管的 Access 自定义 Web 应用程序上编辑 CSS?
Sharepoint Online 突出显示的内容 Web 部件 - 显示文件子文件夹 CAML 查询