-
Notifications
You must be signed in to change notification settings - Fork 114
Expand file tree
/
Copy pathJWSSignerTest.cs
More file actions
63 lines (51 loc) · 2.35 KB
/
Copy pathJWSSignerTest.cs
File metadata and controls
63 lines (51 loc) · 2.35 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
using System;
using System.Security.Claims;
using System.Text;
using Microsoft.IdentityModel.JsonWebTokens;
using Microsoft.IdentityModel.Tokens;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using WebPush.Util;
namespace WebPush.Test;
[TestClass]
public class JWSSignerTest
{
private const string TestPublicKey =
@"BCvKwB2lbVUYMFAaBUygooKheqcEU-GDrVRnu8k33yJCZkNBNqjZj0VdxQ2QIZa4kV5kpX9aAqyBKZHURm6eG1A";
private const string TestPrivateKey = @"on6X5KmLEFIVvPP3cNX9kE0OF6PV9TJQXVbnKU2xEHI";
[TestMethod]
public void TestGenerateSignature()
{
var key = ECKeyHelper.GetKeyPair(Base64UrlEncoder.DecodeBytes(TestPrivateKey), Base64UrlEncoder.DecodeBytes(TestPublicKey));
var handler = new JsonWebTokenHandler
{
SetDefaultTimesOnTokenCreation = false
};
var now = DateTime.UtcNow;
var epoch = new DateTime(1970, 1, 1, 0, 0, 1, DateTimeKind.Utc);
var subject = new ClaimsIdentity([new Claim(JwtRegisteredClaimNames.Sub, "subject")]);
string token = handler.CreateToken(new SecurityTokenDescriptor
{
Audience = "aud",
// Expires = now.AddMinutes(1),
Expires = epoch,
// IssuedAt = now,
Subject = subject,
SigningCredentials = new SigningCredentials(new ECDsaSecurityKey(key), SecurityAlgorithms.EcdsaSha256),
});
var tokenParts = token.Split('.');
Assert.HasCount(3, tokenParts);
var encodedHeader = tokenParts[0];
var encodedPayload = tokenParts[1];
var signature = tokenParts[2];
var decodedHeader = Encoding.UTF8.GetString(Base64UrlEncoder.DecodeBytes(encodedHeader));
var decodedPayload = Encoding.UTF8.GetString(Base64UrlEncoder.DecodeBytes(encodedPayload));
Assert.AreEqual(@"{""alg"":""ES256"",""typ"":""JWT""}", decodedHeader);
Assert.Contains(@"""typ"":""JWT""", decodedHeader);
Assert.Contains(@"""alg"":""ES256""", decodedHeader);
Assert.AreEqual(@"{""aud"":""aud"",""exp"":1,""sub"":""subject""}", decodedPayload);
var decodedSignature = Base64UrlEncoder.DecodeBytes(signature);
var decodedSignatureLength = decodedSignature.Length;
var isSignatureLengthValid = decodedSignatureLength == 66 || decodedSignatureLength == 64;
Assert.IsTrue(isSignatureLengthValid);
}
}