Share your SharePoint sites with external users using CSOM

Yesterday on the Office 365 Yammer Network, someone asked if it was possible to add external users to a group using CSOM.

After a quick research, I found that it was a recurrent question and there’s no clear answer to that question. So I decided to investigate and I found the answer 🙂

In CSOM, there’s a namespace called Microsoft.SharePoint.Client.Sharing in which there are two useful classes called WebSharingManager and DocumentSharingManager.

These two classes are used to share a site or a document with users (internal or external).

In my case, I want to share a site with an external user so I need to use WebSharingManager.

This class has a method called UpdateWebSharingInformation with the following signature :

public static IList<UserSharingResult> UpdateWebSharingInformation(
  ClientRuntimeContext context,
  Web web,
  IList<UserRoleAssignment> userRoleAssignments,
  bool sendServerManagedNotification,
  string customMessage,
  bool additivePermission,
  bool allowExternalSharing

As you can see, there are many parameters which are very easy to understand but the important parts are userRoleAssignments and allowExternalSharing.

The first is a collection of users with whom you want to share the resource. The second is to enable external sharing if the users are not employed by your company.

How to use it in practice ? It’s very easy.

using(var password = new SecureString())
  foreach(var c in "myPassword".ToCharArray())

  using(var ctx = new ClientContext(""))
    ctx.Credentials = new SharePointOnlineCredentials("", password);

    var users = new List<UserRoleAssignment>();
    users.Add(new UserRoleAssignment()
      UserId = "",
      Role = Role.View

    WebSharingManager.UpdateWebSharingInformation(ctx, ctx.Web, users, true, null, true, true);

When you execute the code above, the external user is invited as a viewer in the site associated to the CSOM context. He will receive an email to access to the site.

If you want to know if the invitation was sent successfully and if the user has accepted (or not), you just have to go to Access requests and invitations through the site settings.

External Sharing / Pending Requests

If you want more information about WebSharingManager and DocumentSharingManager, just go to the official documentation on MSDN.

16 thoughts on “Share your SharePoint sites with external users using CSOM

  1. Pingback: SharePoint & Office 365: Recopilatorio de enlaces interesantes (III)! - Blog de Juan Carlos González en Geeks.MS

  2. Ketan

    Thanks for the post, hey do you know if there is a REST API for doing the same? We would like to do it thru SPD Worflow by calling the REST API (service) to add/share with external user.


  3. shidinharidas

    This code works beautifully, thank you!
    Is it possible to share just a particular folder instead of access to the entire site?


  4. kumudha

    I used the above code, but I don’t get invitation to my personal email. when I run the PowerShell script invitation is received, but with Csharp code I don’t get any invitation. I don’t see any exception as well.



Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.