是否有可用的C#示例显示我们如何以编程方式连接到O365站点并查找所有MySite / OneDrive集合和相应的身份验证令牌,然后通过CSOM连接到每个站点?基本上我们希望能够从特定租户的所有网站集中下载所有内容 - 我们让它适用于除MySites之外的所有内容,但当我尝试使用全局管理员帐户通过CSOM连接到每个用户的mysite URL时#39;凭据我获得拒绝访问权限。但是,为了达到这个目的,我们存储每个用户的用户名和密码肯定不可能/不现实。
编辑:
事实证明,只要您不尝试枚举子站点,它就可以通过CSOM使用全局管理员凭据正常工作! 但是,如果您知道其网址,可以访问子网站:
ClientContext cc = new ClientContext("http://contoso-my.sharepoint.com/personal/j_citizen_contoso_onmicrosoft_com/" );
cc.Credentials = new SharePointOnlineCredentials("admin@contoso.onmicrosoft.com", AdminPassword);
Web web = cc.Web;
cc.Load(web, website => website.Webs);
cc.ExecuteQuery(); // - ServerUnauthorizedAccessException
但是
ClientContext cc = new ClientContext("http://contoso-my.sharepoint.com/personal/j_citizen_contoso_onmicrosoft_com/subsite" );
cc.Credentials = new SharePointOnlineCredentials("admin@contoso.onmicrosoft.com", AdminPassword);
Web web = cc.Web;
cc.Load(web);
cc.ExecuteQuery(); // works fine
我还要注意,当我通过浏览器作为全球管理员登录以查看每个用户的MySite时,我无法在任何地方看到子网站列表,即使是网站内容页面:
显示根网站中的各种库,但不显示子网站! (有趣的是,即使作为全球管理员,我似乎没有选择在这里创建任何库/子网站)
更新:当然,我考虑检查全局管理员是否实际上是每个用户的MySite网站集的管理员,结果发现他们不是。一旦添加一切正常。但这意味着,如果有人已经进入每个MySite并确保他们拥有共享站点管理员,那么只能从所有用户的MySites下载所有内容,这将是一个问题。 / p>
答案 0 :(得分:3)
ClientContext adminContext = new ClientContext("https://contoso-admin.sharepoint.com/");
adminContext.Credentials = new Microsoft.SharePoint.Client.SharePointOnlineCredentials("admin@contoso.onmicrosoft.com", SecurePassword);
Microsoft.Online.SharePoint.TenantAdministration.Tenant tenant = new Microsoft.Online.SharePoint.TenantAdministration.Tenant(adminContext);
tenant.SetSiteAdmin("https://contoso-my.sharepoint.com/personal/j_citizen_contoso_onmicrosoft_com", "admin@contoso.onmicrosoft.com", true);
adminContext.ExecuteQuery();
诀窍。全局管理员有权使自己成为每个个人站点的站点管理员,一旦完成此操作,该帐户可以执行的操作没有任何限制。