在 Office 365 中设置网站集的外部共享

可在 Office 365 中控制 SharePoint 网站集的外部共享设置,允许外部用户(不具备 Office 365 订阅中的组织帐户的用户)访问你的网站集。

适用于:SharePoint 的外接程序 | SharePoint Online | Office 365

Core.ExternalSharing 代码示例演示了如何控制 SharePoint 网站集的外部共享设置。 使用此解决方案可以:

  • 在网站预配过程中控制外部共享设置。

  • 让网站集准备好与外部用户共享数据。

注意

外部共享设置仅适用于 Office 365。

开始之前

若要开始,请从 GitHub 上的 Office 365 开发人员模式和做法项目下载 Core.ExternalSharing 示例外接程序。

使用 Core.ExternalSharing 应用

确认您的 Office 365 订阅允许外部共享。 为此:

  1. 打开Office 365管理中心

  2. 在左侧导航菜单上,选择“SharePoint”

  3. 在左侧导航菜单上,选择 “共享”。

  4. “组织外部共享”中,确保 “允许用户邀请和与经过身份验证的外部用户共享”“打开”。

验证 SharePoint 网站集的外部网站设置。 为此:

  1. 打开Office 365管理中心

  2. 在左侧导航菜单中,选择 “SharePoint ”以打开 SharePoint 管理中心

  3. 在“网站集”列表中,选中要对其验证外部共享设置的网站集 URL 旁边的复选框。

  4. 在功能区上,选择“共享”

  5. 在共享对话框中查看外部 共享 设置。 After running the code sample, return to the sharing dialog to verify that your external sharing settings changed.

运行此代码示例时,Program.cs 中的 Main 将执行以下任务:

  • 获取 SharePoint 管理中心 URL。

  • 获取要配置外部共享设置的网站集 URL。

  • 获取你的 Office 365 管理员凭据。

  • 调用 GetInputSharing,这会提示用户选择外部共享设置 ( SharingCapabilities) 应用到网站集。 外部共享设置选项包括:

    • Disabled,禁用网站的外部共享。

    • ExternalUserAndGuestSharing,启用网站的外部用户和来宾共享。

    • ExternalUserSharingOnly ,仅启用外部用户共享。

  • 调用 SetSiteSharing

注意

本文中的代码按原样提供,不提供任何明示或暗示的担保,包括对特定用途适用性、适销性或不侵权的默示担保。

 static void Main(string[] args)
        {
           
            /* Prompt for your Office 365 admin center URL*/
            Console.WriteLine("Enter your Tenant Admin URL for your Office 365 subscription:");
            string tenantAdminURL = GetSite();

            /* End Program if no Office 365 admin center URL is supplied*/
            if (string.IsNullOrEmpty(tenantAdminURL))
            {
                Console.WriteLine("Hmm, i tried to work on it but you didn't supply your admin tenant url:");
                return;
            }
               
            // Prompt the user for an Office365 site collection 
            Console.WriteLine("Enter your Office 365 Site Collection URL:");
            string siteUrl = GetSite();

            /* Prompt for Credentials */
            Console.WriteLine("Enter Credentials for your Office 365 Site Collection {0}:", siteUrl);

            string userName = GetUserName();
            SecureString pwd = GetPassword();

            /* End program if no credentials are entered */
            if (string.IsNullOrEmpty(userName) || (pwd == null))
            {
                Console.WriteLine("Hmm, i tried to work on it but you didn't supply your credentials:");
                return;
            }

            try 
            {
                SharingCapabilities _sharingSettingToApply = GetInputSharing(siteUrl);
                using (ClientContext cc = new ClientContext(tenantAdminURL))
                { 
                    cc.AuthenticationMode = ClientAuthenticationMode.Default;
                    cc.Credentials = new SharePointOnlineCredentials(userName, pwd);
                    SetSiteSharing(cc, siteUrl, _sharingSettingToApply);
                }
            }
            catch(Exception ex)
            {
                Console.WriteLine("Oops, Mistakes can happen to anyone. An Error occured : {0}", ex.Message);
               
            }

            Console.WriteLine("Hit Enter to exit.");
            Console.Read();

        
        }

SetSiteSharing 执行以下操作:

  • 使用 Tenant.GetSitePropertiesByUrl 检索网站集上的 SiteProperties

  • 使用 Tenant.SharingCapability 确定是否在Office 365订阅上启用了外部共享。

  • 如果 Office 365 订阅已启用共享,将 SiteProperties.SharingCapability 设置为用户输入的外部共享设置。

public static void SetSiteSharing(ClientContext adminCC, string siteCollectionURl, SharingCapabilities shareSettings)
        {
            var _tenantAdmin = new Tenant(adminCC);
            SiteProperties _siteprops = _tenantAdmin.GetSitePropertiesByUrl(siteCollectionURl, true);
            adminCC.Load(_tenantAdmin);
            adminCC.Load(_siteprops);
            adminCC.ExecuteQuery();

            SharingCapabilities _tenantSharing = _tenantAdmin.SharingCapability;
            var _currentShareSettings = _siteprops.SharingCapability;
            bool _isUpdatable = false;

            if(_tenantSharing == SharingCapabilities.Disabled)
            {
                Console.WriteLine("Sharing is currently disabled in your tenant! I am unable to work on it.");
            }
            else
            {  
                if(shareSettings == SharingCapabilities.Disabled)
                { _isUpdatable = true; }
                else if(shareSettings == SharingCapabilities.ExternalUserSharingOnly)
                {
                    _isUpdatable = true;   
                }
                else if (shareSettings == SharingCapabilities.ExternalUserAndGuestSharing)
                {
                    if (_tenantSharing == SharingCapabilities.ExternalUserAndGuestSharing)
                    {
                        _isUpdatable = true;
                    }
                    else
                    {
                        Console.WriteLine("ExternalUserAndGuestSharing is currently disabled in your tenant! I am unable to work on it.");
                    }
                }
            }
            if (_currentShareSettings != shareSettings && _isUpdatable)
            {
                _siteprops.SharingCapability = shareSettings;
                _siteprops.Update();
                adminCC.ExecuteQuery();
                Console.WriteLine("Set Sharing on site {0} to {1}.", siteCollectionURl, shareSettings);
            }
        }

另请参阅