Skip to content

Commit

Permalink
updated packaging and bug fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
johnsheehan committed Jul 12, 2011
1 parent ea61226 commit 24589bc
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 25 deletions.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -27,4 +27,5 @@ obj/
[Rr]elease*/
_ReSharper*/
[Tt]est[Rr]esult*
download/
package/
*.nupkg
35 changes: 19 additions & 16 deletions JWT/JWT.cs
Original file line number Diff line number Diff line change
Expand Up @@ -33,16 +33,19 @@ public static string Encode(object payload, string key, JwtHashAlgorithm algorit
var segments = new List<string>();
var header = new { typ = "JWT", alg = algorithm.ToString() };

segments.Add(Base64UrlEncode(JsonConvert.SerializeObject(header, Formatting.Indented)));
segments.Add(Base64UrlEncode(JsonConvert.SerializeObject(payload, Formatting.Indented)));
byte[] headerBytes = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(header, Formatting.None));
byte[] payloadBytes = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(payload, Formatting.None));

segments.Add(Base64UrlEncode(headerBytes));
segments.Add(Base64UrlEncode(payloadBytes));

var stringToSign = string.Join(".", segments.ToArray());

var bytesToSign = Encoding.UTF8.GetBytes(stringToSign);
var keyBytes = Encoding.UTF8.GetBytes(key);

var signature = HashAlgorithms[algorithm](keyBytes, bytesToSign);
segments.Add(Base64UrlEncode(Encoding.UTF8.GetString(signature)));
byte[] signature = HashAlgorithms[algorithm](keyBytes, bytesToSign);
segments.Add(Base64UrlEncode(signature));

return string.Join(".", segments.ToArray());
}
Expand All @@ -57,12 +60,12 @@ public static string Decode(string token, string key, bool verify)
var parts = token.Split('.');
var header = parts[0];
var payload = parts[1];
var crypto = Base64UrlDecode(parts[2]);

var json = new JsonSerializer();
byte[] crypto = Base64UrlDecode(parts[2]);

var headerData = JObject.Parse(Encoding.UTF8.GetString(Base64UrlDecode(header)));
var payloadData = JObject.Parse(Encoding.UTF8.GetString(Base64UrlDecode(payload)));
var headerJson = Encoding.UTF8.GetString(Base64UrlDecode(header));
var headerData = JObject.Parse(headerJson);
var payloadJson = Encoding.UTF8.GetString(Base64UrlDecode(payload));
var payloadData = JObject.Parse(payloadJson);

if (verify)
{
Expand All @@ -71,12 +74,12 @@ public static string Decode(string token, string key, bool verify)
var algorithm = (string)headerData["alg"];

var signature = HashAlgorithms[GetHashAlgorithm(algorithm)](keyBytes, bytesToSign);
var decodedCrypto = Encoding.UTF8.GetString(crypto);
var decodedSignature = Encoding.UTF8.GetString(signature);
var decodedCrypto = Convert.ToBase64String(crypto);
var decodedSignature = Convert.ToBase64String(signature);

if (decodedCrypto != decodedSignature)
{
throw new ApplicationException("Invalid signature");
throw new ApplicationException(string.Format("Invalid signature. Expected {0} got {1}", decodedCrypto, decodedSignature));
}
}

Expand All @@ -95,10 +98,9 @@ private static JwtHashAlgorithm GetHashAlgorithm(string algorithm)
}

// from JWT spec
private static string Base64UrlEncode(string input)
private static string Base64UrlEncode(byte[] input)
{
var inputBytes = Encoding.UTF8.GetBytes(input);
var output = Convert.ToBase64String(inputBytes);
var output = Convert.ToBase64String(input);
output = output.Split('=')[0]; // Remove any trailing '='s
output = output.Replace('+', '-'); // 62nd char of encoding
output = output.Replace('/', '_'); // 63rd char of encoding
Expand All @@ -118,7 +120,8 @@ private static byte[] Base64UrlDecode(string input)
case 3: output += "="; break; // One pad char
default: throw new System.Exception("Illegal base64url string!");
}
return Convert.FromBase64String(output); // Standard base64 decoder
var converted = Convert.FromBase64String(output); // Standard base64 decoder
return converted;
}
}

Expand Down
15 changes: 7 additions & 8 deletions package.cmd
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
if not exist download mkdir download
if not exist download\package mkdir download\package
if not exist download\package\lib mkdir download\package\lib
if not exist download\package\lib\3.5 mkdir download\package\lib\3.5
tools\nuget.exe update -self

copy JWT\bin\Release\*.dll download
copy LICENSE.txt download
if not exist package mkdir package
if not exist package mkdir package
if not exist package\lib mkdir package\lib
if not exist package\lib\3.5 mkdir package\lib\3.5

copy JWT\bin\Release\JWT.dll download\package\lib\3.5\
copy JWT\bin\Release\JWT.dll package\lib\3.5\

tools\nuget.exe pack JWT.nuspec -b download\package -o download
tools\nuget.exe pack JWT.nuspec -BasePath package

0 comments on commit 24589bc

Please sign in to comment.