Last week I was troubleshooting a farm with ADFS where MySite creation failed. The ULS logs indicated that the user was not licensed to have a MySite.
04/29/2014 17:34:10.15 w3wp.exe (WS12-WFE1:0x031C) 0x1790 SharePoint Portal Server Personal Site Instantiation af1lc High Skipping creation of personal site from MySitePersonalSiteUpgradeOnNavigationWebPart::CreatePersonalSite() because one or more of the creation criteria has not been met. [SPWeb Url=https://mysite.domain1.com/Person.aspx?accountname=i:firstname.lastname@example.org] https://mysite.domain1.com/Person.aspx?accountname=i:email@example.com]Self-Service Site Creation == True Can Create Personal Site == False Is user licensed == False Storage&Social UPA Permission == True Site or Page or Web Part is in design mode == False c0048c9c-234d-700b-502b-52356264cbda
As it turns out, this message was correct, since User License Management had been enabled recently by a colleague of mine, while preparing to roll out Office Web Apps to a subset of users.
It seems that if you enable the licensing functionality in SharePoint 2013, you need to have a license mapping for the “Standard” license in order to have MySite functionality.
I quickly came up with the following script that would add “all authenticated users” to the “Standard” license.
$claimString = "c:0(.s|True"
$cpm = [Microsoft.SharePoint.Administration.Claims.SPClaimProviderManager]::Local
$claim = $cpm.DecodeClaim($claimString)
$lmap = New-SPUserLicenseMapping -Claim $claim -License Standard
$lmap | Add-SPUserLicenseMapping
This adds a mapping as can be seen in the following screen (number #3 is the one relating to the above script)
A big note on this: make sure to have the correct casing! At first I used “c:0(.s|true” but since its value type is String this fails to match.
If you want to get a quick overview of claims for a user you can drop a page in the layouts-folder called claimspy.aspx (body: see below) and have a user navigate to /_layouts/claimspy.aspx. It just outputs all known claims for the current token. Feel free to improve the page and do proper deployment through solution packages and such
<%@ Page Language="C#" %>
<%@ Assembly Name="Microsoft.IdentityModel, Version=126.96.36.199, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" %>
<%@ Import Namespace="Microsoft.IdentityModel.Claims" %>
<script type="text/C#" runat="server">
protected override void OnLoad(EventArgs e)
IClaimsIdentity identity = (IClaimsIdentity)Context.User.Identity;
if (null != identity)
repeater1.DataSource = identity.Claims;
catch (Exception ex)
<asp:Repeater ID="repeater1" runat="server">
<td><nobr><%# Eval("Issuer") %></nobr></td>
<td><nobr><%# Eval("OriginalIssuer") %></nobr></td>
<td><nobr><%# Eval("ClaimType") %></nobr></td>
<td><nobr><%# Eval("Subject") %></nobr></td>
<td><nobr><%# Eval("Value") %></nobr></td>
<td><nobr><%# Eval("ValueType") %></nobr></td>