我需要创建一个Web服务,该服务将接受来自用户的文件,解析该文件以获取数据,组装存储在Sharepoint上的文件的集合,并将包含这些文件的zip文件返回给用户。用户可能没有直接访问Sharepoint的权限,将来甚至可能没有人类用户参与,因为该文件可能会在计时器上自动从另一个系统中拉出。
我正在用C#创建解决方案,并且正在努力创建可以成功针对Sharepoint进行身份验证的客户端。
当前,我正在尝试使用Microsoft文档中的CSOM身份验证管理器,但是使用Visual Studio调试器时,我发现此方法失败:
private async Task<string> AcquireTokenAsync(Uri resourceUri, string username, string password)
{
string resource = $"{resourceUri.Scheme}://{resourceUri.DnsSafeHost}";
var clientId = defaultAADAppId;
var body = $"resource={resource}&client_id={clientId}&grant_type=password&username={HttpUtility.UrlEncode(username)}&password={HttpUtility.UrlEncode(password)}";
using (var stringContent = new StringContent(body, Encoding.UTF8, "application/x-www-form-urlencoded"))
{
var result = await httpClient.PostAsync(tokenEndpoint, stringContent).ContinueWith((response) =>
{
return response.Result.Content.ReadAsStringAsync().Result;
}).ConfigureAwait(false);
var tokenResult = JsonSerializer.Deserialize<JsonElement>(result);
var token = tokenResult.GetProperty("access_token").GetString();
return token;
}
}
结果的值为:
“ {” error“:” unauthorized_client“,” error_description“:” AADSTS700016:在目录'enpal.de'中找不到标识符为'986002f6-c3f6-43ab-913e-78cca185c392'的应用程序。如果租户的管理员未安装该应用程序,或者该租户中的任何用户未同意该应用程序,则可能发生这种情况。您可能已将身份验证请求发送到错误的租户。\ r \ n跟踪ID:d3b47a0b-54bc-40fd-a731-b99732326200 \ r \ n相关ID:158621cc-3052-4c7b-9532-e2bab5c3cc09 \ r \ n时间戳:2020-11 -18 13:46:39Z“,” error_codes“:[700016],” timestamp“:” 2020-11-18 13:46:39Z“,” trace_id“:” d3b47a0b-54bc-40fd-a731-b99732326200“, “ correlation_id”:“ 158621cc-3052-4c7b-9532-e2bab5c3cc09”,“ error_uri”:“ https://登录。
resourceUri,用户名和密码值正确对应于我将直接用于登录网站的值。我的管理员向我保证,该用户是该站点的管理员,因此应具有执行任何操作(包括连接)所需的所有可能的权限。
有人知道如何进行这项工作吗?
还是知道其他更可能有效的解决方案?还是知道必须在SharePoint方面进行任何配置才能使此解决方案正常工作?
您似乎从Microsoft网站上获取了代码示例,而跳过了阅读重要部分的内容:在Azure AD中配置应用程序;)
目前,您正在尝试使用ID为'986002f6-c3f6-43ab-913e-78cca185c392'的应用程序连接到租户,该应用程序是代码示例中的占位符。在租户中注册您的应用,然后在defaultAADAppId
常量中插入正确的应用ID 。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句