我需要创建一个webservice,它将接受来自用户的文件,解析数据文件,组装存储在Sharepoint上的文件集合,并将包含这些文件的压缩文件返回给用户。用户可能无法直接访问Sharepoint,而且将来甚至可能没有涉及到人类用户,因为文件可能会在计时器上自动从另一个系统中提取。
我正在C#中创建解决方案,并且很难创建一个客户端,它可以成功地对Sharepoint进行身份验证。
目前,我正试图在微软文档中使用CSOM认证管理器,但使用Visual调试器,我在此方法中观察到一个失败:
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;
}
}结果的价值是:
“{”错误“:”unauthorized_client“,"error_description":"AADSTS700016:标识符'986002f6-c3f6-43ab-913e-78cca185c392‘的应用程序在目录'enpal.de’中找不到。如果应用程序尚未由租户的管理员安装或未得到租户中任何用户的同意,则可能发生这种情况。\r\n跟踪ID: d3b47a0b-54bc-40fd-a731-b99732326200\r\nCorrelation ID: 158621cc-3052-4c7b-9532-e2bab5c3cc09\r\nTimestamp: 2020-11-18 13:46:39 Z,"error_codes":700016,“时间戳”:“2020-11-18 13:46:39Z","trace_id":"d3b47a0b-54bc-40fd-a731-b99732326200","correlation_id":"158621cc-3052-4c7b-9532-e2bab5c3cc09","error_uri":"https://login.microsoftonline.com/error?code=700016"}“
resourceUri、用户名和密码值正确地对应于我将直接用于登录网站的值。我的管理员已经向我保证,用户是该网站的管理员,因此应该拥有所需的所有可能的权限来执行任何事情,包括连接。
有人知道怎么做吗?
或者知道另一种更有可能奏效的解决方案?或者知道任何必须在SharePoint端配置以允许此解决方案工作的内容?
发布于 2020-11-18 16:24:14
看起来,您从微软网站获取了代码示例,并跳过阅读一个重要部分:在Azure AD中配置应用程序 ;)
目前,您正尝试以'986002f6-c3f6-43ab-913e-78cca185c392‘作为应用程序连接到租户,这是代码示例中的占位符。在租户中注册应用程序,并在defaultAADAppId常量中插入正确的应用程序id。
https://stackoverflow.com/questions/64896702
复制相似问题