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(
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("https://tenant.sharepoint.com/"))
ctx.Credentials = new SharePointOnlineCredentials("email@example.com", password);
var users = new List<UserRoleAssignment>();
UserId = "firstname.lastname@example.org",
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.
If you want more information about WebSharingManager and DocumentSharingManager, just go to the official documentation on MSDN.