AdalServiceException:在网站集上配置文件时的AADSTS50001

时间:2014-12-19 12:49:35

标签: sharepoint azure sharepoint-online sharepoint-apps

我正在编写一个使用Windows Azure AD对SharePoint Online进行身份验证的应用。 我试图将应用程序中的某些文件配置到SharePoint租户上的现有网站集。 这适用于位于[subdomain] .sharepoint.com上的默认网站集,但是当我尝试在非默认网站集上配置文件时,即。 [subdomain] .sharepoint.com / mysite代码抛出此异常:

[WebException: The remote server returned an error: (400) Bad Request.]
   System.Net.HttpWebRequest.GetResponse() +6540964
   Microsoft.IdentityModel.Clients.ActiveDirectory.<GetResponseSyncOrAsync>d__2.MoveNext() +382
   System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +93
   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +52
   Microsoft.IdentityModel.Clients.ActiveDirectory.<SendPostRequestAndDeserializeJsonResponseAsync>d__0`1.MoveNext() +414

[AdalServiceException: AADSTS50001: Resource 'https://[subdomain].sharepoint.com/sites/mysite' is not registered for the account.
Trace ID: f9d32123-4a42-4890-bf5d-7e979083ed18
Correlation ID: 71a6d021-270d-4974-8bd6-b17fb06aab9d
Timestamp: 2014-12-19 11:21:30Z]
   Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext.RunAsyncTask(Task`1 task) +89
   Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext.AcquireTokenByRefreshToken(String refreshToken, ClientCredential clientCredential, String resource) +59
   ...Authorization.Azure.TokenHelper.GetContext(String refreshToken, String site) in d:\...\Authorization\Azure\TokenHelper.cs:30
   ...Authorization.AuthorizationManager.GetClientContextFromAzureCode(String code, String site) in d:\..\Authorization\AuthorizationManager.cs:57
   ...Pages.Install.btnInstall_Click(Object sender, EventArgs e) in d:\..\Pages\Install.aspx.cs:65
   System.Web.UI.WebControls.Button.OnClick(EventArgs e) +9628114
   System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +103
   System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
   System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +35
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1724

我在AD中检查了App权限,它有权在所有网站集上写入。我的配置有问题或者我应该尝试不同的方法吗?

1 个答案:

答案 0 :(得分:0)

我们在这里遇到了同样的问题。在我们的C#应用​​程序中,我们使用HttpClient命中SharePoint REST API以从列表中读取项目。在开发过程中,我们在Team Site下设置了一个列表。我们用来点击API的网址看起来有点像这样:

https://mycompany.sharepoint.com/_api/web/lists/getbytitle('MyList')/items

在App.config中,我们设置了ServiceResourceId参数。在调用resource的{​​{1}}方法时,这用作AcquireToken()参数。重要的是,我们还将其用作API调用的基本URL。

当我们尝试转移到生产方案时,相关列表位于自定义网站内 - 而不是团队网站。我们可以登录浏览器并点击这样的URL并查看返回的结果:

Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext

我们已将https://mycompanylive.sharepoint.com/MySiteName/_api/web/lists/getbytitle('MyList')/items 更改为ServiceResourceId,不再允许我们登录并抛出您提及的例外情况。修复方法是使用基本服务URL的config参数,在验证时使用该参数,然后在调用API时将另一个参数用作基本URL。在我提到的示例中,它看起来像这样:

https://mycompanylive.sharepoint.com/MySiteName/