Introduction
Custom Claims Provider issues and packages claims into security tokens which can be further used to give permission to the items in a customized way. Claims Augmentation enables an application to augment additional claims into the user token. Claims can be displayed in the people picker control through claims picking. In this article, I will explain how to create a Custom Claims Provider in SharePoint 2013 using the C# Server-Side Object Model.
Pre-Requisites
Open Visual Studio.
Open the New Project dialog box. Expand the Office/SharePoint node and then choose SharePoint Solutions.
Choose the SharePoint 2013 – Empty Project template. Name the project as ClaimProviderProject.
Choose the Deploy as a farm solution option button and click Finish.
To create a Custom Claims Provider class file, right-click ClaimProviderProject project -> Add -> New Item.
Add the class file and name it as CustomClaimsProvider.cs.
Create Custom claims provider
Inherit SPClaimProvider to the new class created by adding Microsoft.SharePoint.Administration.Claims reference.
Add the fields for Claims Provider as Display Name, Internal Name, and People picker display name.
#region FIELDS
public const string ClaimsProviderDisplayName = "Custom Claims Provider";
public const string ClaimsProviderInternalName = "CustomClaimsProvider";
private const string PickerEntitySchemaDisplayName = "Custom Claims";
#endregion FIELDS
Add the properties for Display Name and Internal Name.
#region PROPERTIES
public virtual string ProviderDisplayName
{
get
{
return ClaimsProviderDisplayName;
}
}
public virtual string ProviderInternalName
{
get
{
return ClaimsProviderInternalName;
}
}
#endregion PROPERTIES
Override the SPClaimProvider properties, as shown below.
#region OVERRIDDENPROPERTIES
public override string Name
{
get
{
return this.ProviderInternalName;
}
}
public override bool SupportsEntityInformation
{
get
{
return true;
}
}
public override bool SupportsHierarchy
{
get
{
return true;
}
}
public override bool SupportsResolve
{
get
{
return true;
}
}
public override bool SupportsSearch
{
get
{
return true;
}
}
#endregion OVERRIDDENPROPERTIES
Create the constructor for the newly created class.
#region CONSTRUCTOR
public CustomClaimsProvider(string displayName) : base(displayName) {}
#endregion CONSTRUCTOR
Override the SPClaimProvider methods as the following.
Override the FillClaimTypes method to add your custom claims type.
protected override void FillClaimTypes(List<string> claimTypes)
{
// claimTypes.Add("Our Custom Claim Type");
}
Override the FillClaimValueTypes method to add your custom value type.
protected override void FillClaimValueTypes(List<string> claimValueTypes)
{
//claimValueTypes.Add("Our Custom Value Type");
}
Override the FillClaimsForEntity method to add your custom entities.
protected override void FillClaimsForEntity(Uri context, SPClaim entity, List<SPClaim> claims)
{
// claims.Add("Our Custom Entity");
}
Override the FillEntityTypes method to add your custom entity type.
protected override void FillEntityTypes(List<string> entityTypes)
{
entityTypes.Add(SPClaimEntityTypes.FormsRole);
}
Override the FillResolve method to add your custom resolve claim.
protected override void FillResolve(Uri context, string[] entityTypes, SPClaim resolveInput, List<Microsoft.SharePoint.WebControls.PickerEntity> resolved)
{
//PickerEntity pe = GetPickerEntity(resolvedClaim.ClaimType, resolvedClaim.ClaimValue, resolvedClaim.ClaimValueType);
//Add it to the return list of picker entries.
//resolved.Add(pe);
}
protected override void FillResolve(Uri context, string[] entityTypes, string resolveInput, List<Microsoft.SharePoint.WebControls.PickerEntity> resolved)
{
//PickerEntity pe = GetPickerEntity(resolvedClaim.ClaimType, resolvedClaim.ClaimValue, resolvedClaim.ClaimValueType);
//Add it to the return list of picker entries.
//resolved.Add(pe);
}
Override the FillSchema method to add your custom schemas.
protected override void FillSchema(Microsoft.SharePoint.WebControls.SPProviderSchema schema)
{
//add the schema element we need at a minimum in our picker node
schema.AddSchemaElement(new SPSchemaElement(PeopleEditorEntityDataKeys.DisplayName, PickerEntitySchemaDisplayName, SPSchemaElementType.Both));
}
Override the FillSearch method to add your custom search claim.
protected override void FillSearch(Uri context, string[] entityTypes, string searchPattern, string hierarchyNodeID, int maxCount, Microsoft.SharePoint.WebControls.SPProviderHierarchyTree searchTree)
{
// Nodes where we will stick our matches.
// Microsoft.SharePoint.WebControls.SPProviderHierarchyNode matchNode = null;
// Add the match to our node.
// matchNode.AddEntity(pe);
}
Add the SharePoint Feature to this project and set it as Farm level.
Deploy this solution to the site.
Activate the custom Claims Provider using Windows PowerShell script.
- Set the IsEnabled to True for the Claim Provider.
- Add provider association to the Web Application.
Check if the custom Claims Provider is populated in the assigning permission to an item.
Summary
Thus, you have learned how to create a Custom Claims Provider in SharePoint 2013 using the C# Server-Side Object Model.