public ISimpleWebToken CreateTokenFromRaw(string rawToken)
{
if (string.IsNullOrEmpty(rawToken)) throw new ArgumentNullException(nameof(rawToken));
var token = new SimpleWebToken { RawToken = rawToken, Properties = new Dictionary<string, string>() };
foreach (var rawNameValue in rawToken.Split(new[] { '&' }, StringSplitOptions.RemoveEmptyEntries))
{
var nameValue = rawNameValue.Split('=');
if (nameValue.Length != 2)
{
throw new FormatException(
string.Format(
CultureInfo.InvariantCulture,
"Invalid token contains a name/value pair missing an = character: '{0}'",
rawNameValue));
}
var key = WebUtility.UrlDecode(nameValue[0]);
var values = WebUtility.UrlDecode(nameValue[1]);
switch (key)
{
case SimpleWebTokenConstants.Issuer:
token.Issuer = values;
break;
case SimpleWebTokenConstants.Audience:
token.Audience = values;
break;
case SimpleWebTokenConstants.ExpiresOn:
token.ExpiresOn = GetTimeAsDateTime(string.IsNullOrEmpty(values) ? "0" : values);
break;
case SimpleWebTokenConstants.Signature:
token.Signature = values;
break;
default:
token.Properties[key] = values;
break;
}
}
return token;
}