I am trying to build a Security Token, Serialize, Read and Validate it, all inside a Console Application. Following is the code. I am getting an exception while trying to Validate the Token and also while trying to write (serialize) the token. The SharePoint 2013 site I am using here uses FBA Claims and the site is a Multi Tenant site.
string siteUrl = "url of the site";
Uri uri = new Uri(siteUrl);
System.IdentityModel.Tokens.SecurityToken token = SPSecurityContext.SecurityTokenForFormsAuthentication(uri, "CustomMembershipProvider", "CustomRoleProvider", "user1", "password1", SPFormsAuthenticationOption.PersistentSignInRequest);
if (token != null)
{
string assertionXML = ((System.IdentityModel.Tokens.GenericXmlSecurityToken)(token)).TokenXml.OwnerDocument.InnerXml;
using (StringReader sr = new StringReader(assertionXML))
{
using (XmlReader reader = XmlReader.Create(sr))
{
if (!reader.ReadToFollowing("saml:Assertion"))
{
throw new Exception("Assertion not found!");
}
SecurityTokenHandlerCollection collection = SecurityTokenHandlerCollection.CreateDefaultSecurityTokenHandlerCollection();
collection.ElementAt(2).Configuration.AudienceRestriction.AllowedAudienceUris.Add(uri);
//string serializedToken = collection.WriteToken(token); <-- This line also throws exception
System.IdentityModel.Tokens.SecurityToken newToken = collection.ReadToken(reader.ReadSubtree());
ReadOnlyCollection<System.Security.Claims.ClaimsIdentity> claims = collection.ValidateToken(newToken); <-- This line also throws exception
}
}
}
Can anyone please help?


