SharePoint提供商托管的应用许可证检查

时间:2017-01-06 14:13:38

标签: sharepoint csom sharepoint-apps sharepoint-addin

我有一个SP应用程序,我希望将其发布到商店。

我想在其中实现的最后一件事是许可检查,我在服务器端(C#)进行。

我发现要执行此操作,我需要先从SharePoint检索当前的许可证,我正在尝试使用此代码:

            ClientResult<AppLicenseCollection> licenseCollection = Utility.GetAppLicenseInformation(clientContext, productId);
            clientContext.Load(clientContext.Web);
            clientContext.ExecuteQuery();

但是执行此代码会给我一个错误:远程服务器返回错误:(403)Forbidden。

我尝试使用授予应用的各种权限运行此功能(最多可完全控制网站/网站/租户)仍然存在相同的错误。

有谁知道缺少什么?,我从应用程序目录中获取产品ID,上下文似乎没问题,因为它返回其他类型请求的结果。

2 个答案:

答案 0 :(得分:0)

您需要加载clientContext.Web吗?我正在检查我之前使用的其中一个代码,它只运行clientContext.ExecuteQuery();

try
{
var contextToken = TokenHelper.GetContextTokenFromRequest(Page.Request);
var hostWeb = Page.Request["SPHostUrl"];
var appWeb = Page.Request["SPAppWebUrl"];
using (var clientContext =
TokenHelper.GetClientContextWithContextToken(
hostWeb, contextToken, Request.Url.Authority))
{
 ClientResult<AppLicenseCollection> licenses =
 Microsoft.SharePoint.Client.Utilities.Utility.
 GetAppLicenseInformation(clientContext, _productID);

 clientContext.ExecuteQuery();

 if (licenses.Value.Count == 0)
     throw new InvalidOperationException("No license");
 string licenseString = licenses.Value[0].RawXMLLicenseToken;
 }
}
catch (Exception ex)
{
 Response.Write("Licensing failed: " + ex.Message);
}

答案 1 :(得分:0)

好的,我已经让它返回了许可证集合。 在我最近的一些调整之后看起来上下文被错误地初始化了,并且Read Web权限似乎足以加载许可证。

然而,我现在看到的是我获得的许可证集合是空的。 我的应用程序尚未存储,我只将其部署到我的应用程序目录中,是否需要存储才能获得实际的许可证? 如果是这样,最好的方法是什么,我真的不想发布未完成的应用程序。

更新:我可以使用此项目中的SPAppLicenseHelper.GenerateTestToken上传测试许可证:https://code.msdn.microsoft.com/officeapps/SharePoint-2013-Import-f5f680a6/