Skip to content

Commit 36280d5

Browse files
authored
Merge pull request #332 from twilio/fix-jwts
Remove JWT header
2 parents 70291af + c71902d commit 36280d5

File tree

5 files changed

+285
-244
lines changed

5 files changed

+285
-244
lines changed

src/Twilio/JWT/BaseJwt.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ private string BuildToken(JwtHeader headers, JwtPayload payload)
127127
#else
128128
private Dictionary<string, object> BuildHeaders()
129129
{
130-
return new Dictionary<string, object> { { "typ", "JWT" } };
130+
return new Dictionary<string, object>();
131131
}
132132

133133
private Dictionary<string, object> BuildPayload()
Lines changed: 177 additions & 177 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
1-
#if !NET35
2-
using System;
1+
using System;
32
using System.Collections.Generic;
43
using NUnit.Framework;
54
using Twilio.Jwt;
65
using Twilio.Jwt.AccessToken;
7-
using System.IdentityModel.Tokens.Jwt;
86
using Newtonsoft.Json;
97

108
namespace Twilio.Tests.Jwt.AccessToken
@@ -33,6 +31,8 @@ public override Dictionary<string, object> Headers
3331
[TestFixture]
3432
public class AccessTokenTests
3533
{
34+
private static readonly string Secret = "superdupersecretsecret";
35+
3636
private Dictionary<string, object> ToDict(object o)
3737
{
3838
return JsonConvert.DeserializeObject<Dictionary<string, object>>(o.ToString());
@@ -41,185 +41,185 @@ private Dictionary<string, object> ToDict(object o)
4141
[Test]
4242
public void TestBuildToken()
4343
{
44-
var jwt = new TestToken("AC456", "SK123", "superdupersecretsecret").ToJwt();
44+
var jwt = new TestToken("AC456", "SK123", Secret).ToJwt();
4545

46-
var decoded = new JwtSecurityToken(jwt);
47-
var headers = decoded.Header;
46+
var decoded = new DecodedJwt(jwt, Secret);
4847
var payload = decoded.Payload;
4948
Assert.IsNotNull(payload);
5049

51-
Assert.AreEqual("SK123", payload.Iss);
52-
Assert.AreEqual("AC456", payload.Sub);
53-
Assert.Greater(payload.Exp.Value, BaseJwt.ConvertToUnixTimestamp(DateTime.UtcNow));
54-
50+
Assert.AreEqual("SK123", payload["iss"]);
51+
Assert.AreEqual("AC456", payload["sub"]);
52+
53+
Assert.Greater(Convert.ToInt64(payload["exp"]), BaseJwt.ConvertToUnixTimestamp(DateTime.UtcNow));
5554
Assert.AreEqual("{}", payload["grants"].ToString());
55+
}
56+
57+
58+
[Test]
59+
public void TestHaveNbf()
60+
{
61+
var now = DateTime.UtcNow;
62+
var token = new TestToken("AC456", "SK123", Secret, nbf: now).ToJwt();
63+
Assert.IsNotNull(token);
64+
Assert.IsNotEmpty(token);
65+
66+
var decoded = new DecodedJwt(token, Secret);
67+
var payload = decoded.Payload;
68+
Assert.IsNotNull(payload);
69+
70+
Assert.AreEqual("SK123", payload["iss"]);
71+
Assert.AreEqual("AC456", payload["sub"]);
72+
Assert.AreEqual(BaseJwt.ConvertToUnixTimestamp(now), Convert.ToInt64(payload["nbf"]));
73+
Assert.Greater(Convert.ToInt64(payload["exp"]), BaseJwt.ConvertToUnixTimestamp(DateTime.UtcNow));
74+
75+
Assert.AreEqual("{}", payload["grants"].ToString());
76+
}
77+
78+
[Test]
79+
public void TestAddGrant()
80+
{
81+
var grants = new HashSet<IGrant>
82+
{
83+
{ new ConversationsGrant() }
84+
};
85+
var token = new TestToken("AC456", "SK123", Secret, grants: grants).ToJwt();
86+
Assert.IsNotNull(token);
87+
Assert.IsNotEmpty(token);
88+
89+
var decoded = new DecodedJwt(token, Secret);
90+
var payload = decoded.Payload;
91+
Assert.IsNotNull(payload);
92+
93+
Assert.AreEqual("SK123", payload["iss"]);
94+
Assert.AreEqual("AC456", payload["sub"]);
95+
Assert.Greater(Convert.ToInt64(payload["exp"]), BaseJwt.ConvertToUnixTimestamp(DateTime.UtcNow));
96+
97+
var decodedGrants = ToDict(payload["grants"]);
98+
Assert.AreEqual(1, decodedGrants.Count);
99+
Assert.IsNotNull(decodedGrants["rtc"]);
100+
}
101+
102+
[Test]
103+
public void TestAddGrants()
104+
{
105+
var grants = new HashSet<IGrant>
106+
{
107+
{ new ConversationsGrant() },
108+
{ new IpMessagingGrant() }
109+
};
110+
var token = new TestToken("AC456", "SK123", Secret, grants: grants).ToJwt();
111+
Assert.IsNotNull(token);
112+
Assert.IsNotEmpty(token);
113+
114+
var decoded = new DecodedJwt(token, Secret);
115+
var payload = decoded.Payload;
116+
Assert.IsNotNull(payload);
117+
118+
Assert.AreEqual("SK123", payload["iss"]);
119+
Assert.AreEqual("AC456", payload["sub"]);
120+
Assert.Greater(Convert.ToInt64(payload["exp"]), BaseJwt.ConvertToUnixTimestamp(DateTime.UtcNow));
121+
122+
var decodedGrants = ToDict(payload["grants"]);
123+
Assert.AreEqual(2, decodedGrants.Count);
124+
Assert.IsNotNull(decodedGrants["rtc"]);
125+
Assert.IsNotNull(decodedGrants["ip_messaging"]);
126+
}
127+
128+
[Test]
129+
public void TestCreateVoiceGrant()
130+
{
131+
var grants = new HashSet<IGrant>
132+
{
133+
{
134+
new VoiceGrant
135+
{
136+
OutgoingApplicationSid = "AP123",
137+
OutgoingApplicationParams = new Dictionary<string, string> { { "foo", "bar" } }
138+
}
139+
}
140+
};
141+
var token = new TestToken("AC456", "SK123", Secret, grants: grants).ToJwt();
142+
Assert.IsNotNull(token);
143+
Assert.IsNotEmpty(token);
144+
145+
var decoded = new DecodedJwt(token, Secret);
146+
var payload = decoded.Payload;
147+
Assert.IsNotNull(payload);
148+
149+
Assert.AreEqual("SK123", payload["iss"]);
150+
Assert.AreEqual("AC456", payload["sub"]);
151+
Assert.Greater(Convert.ToInt64(payload["exp"]), BaseJwt.ConvertToUnixTimestamp(DateTime.UtcNow));
152+
153+
var decodedGrants = ToDict(payload["grants"]);
154+
Assert.AreEqual(1, decodedGrants.Count);
155+
156+
var decodedPvg = decodedGrants["voice"];
157+
var outgoing = ToDict(decodedPvg.ToString())["outgoing"];
158+
Assert.AreEqual("AP123", ToDict(outgoing)["application_sid"]);
159+
160+
var decodedParams = ToDict(outgoing)["params"];
161+
Assert.AreEqual("bar", ToDict(decodedParams)["foo"]);
162+
}
163+
164+
[Test]
165+
public void TestCreateSyncGrant()
166+
{
167+
var grants = new HashSet<IGrant>
168+
{
169+
{
170+
new SyncGrant
171+
{
172+
ServiceSid = "IS123",
173+
EndpointId = "foobar"
174+
}
175+
}
176+
};
177+
var token = new TestToken("AC456", "SK123", Secret, grants: grants).ToJwt();
178+
Assert.IsNotNull(token);
179+
Assert.IsNotEmpty(token);
180+
181+
var decoded = new DecodedJwt(token, Secret);
182+
var payload = decoded.Payload;
183+
Assert.IsNotNull(payload);
184+
185+
Assert.AreEqual("SK123", payload["iss"]);
186+
Assert.AreEqual("AC456", payload["sub"]);
187+
Assert.Greater(Convert.ToInt64(payload["exp"]), BaseJwt.ConvertToUnixTimestamp(DateTime.UtcNow));
188+
189+
var decodedGrants = ToDict(payload["grants"]);
190+
Assert.AreEqual(1, decodedGrants.Count);
191+
192+
var decodedSg = ToDict(decodedGrants["data_sync"]);
193+
Assert.AreEqual("IS123", decodedSg["service_sid"]);
194+
Assert.AreEqual("foobar", decodedSg["endpoint_id"]);
195+
196+
}
197+
198+
[Test]
199+
public void TestCreateVideoGrant()
200+
{
201+
var grants = new HashSet<IGrant>
202+
{
203+
{ new VideoGrant { ConfigurationProfileSid = "CP123" } }
204+
};
205+
var token = new TestToken("AC456", "SK123", Secret, grants: grants).ToJwt();
206+
Assert.IsNotNull(token);
207+
Assert.IsNotEmpty(token);
208+
209+
var decoded = new DecodedJwt(token, Secret);
210+
var payload = decoded.Payload;
211+
Assert.IsNotNull(payload);
212+
213+
Assert.AreEqual("SK123", payload["iss"]);
214+
Assert.AreEqual("AC456", payload["sub"]);
215+
Assert.Greater(Convert.ToInt64(payload["exp"]), BaseJwt.ConvertToUnixTimestamp(DateTime.UtcNow));
216+
217+
var decodedGrants = ToDict(payload["grants"]);
218+
Assert.AreEqual(1, decodedGrants.Count);
219+
220+
var decodedVg = ToDict(decodedGrants["video"]);
221+
Assert.AreEqual("CP123", decodedVg["configuration_profile_sid"]);
56222
}
57223

58-
[Test]
59-
public void TestHaveNbf()
60-
{
61-
var now = DateTime.UtcNow;
62-
var token = new TestToken("AC456", "SK123", "superdupersecretsecret", nbf: now).ToJwt();
63-
Assert.IsNotNull(token);
64-
Assert.IsNotEmpty(token);
65-
66-
var decoded = new JwtSecurityToken(token);
67-
var payload = decoded.Payload;
68-
Assert.IsNotNull(payload);
69-
70-
Assert.AreEqual("SK123", payload.Iss);
71-
Assert.AreEqual("AC456", payload.Sub);
72-
Assert.AreEqual(BaseJwt.ConvertToUnixTimestamp(now), payload.Nbf);
73-
Assert.Greater(payload.Exp.Value, BaseJwt.ConvertToUnixTimestamp(DateTime.UtcNow));
74-
75-
Assert.AreEqual("{}", payload["grants"].ToString());
76-
}
77-
78-
[Test]
79-
public void TestAddGrant()
80-
{
81-
var grants = new HashSet<IGrant>
82-
{
83-
{ new ConversationsGrant() }
84-
};
85-
var token = new TestToken("AC456", "SK123", "superdupersecretsecret", grants: grants).ToJwt();
86-
Assert.IsNotNull(token);
87-
Assert.IsNotEmpty(token);
88-
89-
var decoded = new JwtSecurityToken(token);
90-
var payload = decoded.Payload;
91-
Assert.IsNotNull(payload);
92-
93-
Assert.AreEqual("SK123", payload.Iss);
94-
Assert.AreEqual("AC456", payload.Sub);
95-
Assert.Greater(payload.Exp.Value, BaseJwt.ConvertToUnixTimestamp(DateTime.UtcNow));
96-
97-
var decodedGrants = ToDict(payload["grants"]);
98-
Assert.AreEqual(1, decodedGrants.Count);
99-
Assert.IsNotNull(decodedGrants["rtc"]);
100-
}
101-
102-
[Test]
103-
public void TestAddGrants()
104-
{
105-
var grants = new HashSet<IGrant>
106-
{
107-
{ new ConversationsGrant() },
108-
{ new IpMessagingGrant() }
109-
};
110-
var token = new TestToken("AC456", "SK123", "superdupersecretsecret", grants: grants).ToJwt();
111-
Assert.IsNotNull(token);
112-
Assert.IsNotEmpty(token);
113-
114-
var decoded = new JwtSecurityToken(token);
115-
var payload = decoded.Payload;
116-
Assert.IsNotNull(payload);
117-
118-
Assert.AreEqual("SK123", payload.Iss);
119-
Assert.AreEqual("AC456", payload.Sub);
120-
Assert.Greater(payload.Exp.Value, BaseJwt.ConvertToUnixTimestamp(DateTime.UtcNow));
121-
122-
var decodedGrants = ToDict(payload["grants"]);
123-
Assert.AreEqual(2, decodedGrants.Count);
124-
Assert.IsNotNull(decodedGrants["rtc"]);
125-
Assert.IsNotNull(decodedGrants["ip_messaging"]);
126-
}
127-
128-
[Test]
129-
public void TestCreateVoiceGrant()
130-
{
131-
var grants = new HashSet<IGrant>
132-
{
133-
{
134-
new VoiceGrant
135-
{
136-
OutgoingApplicationSid = "AP123",
137-
OutgoingApplicationParams = new Dictionary<string, string> { { "foo", "bar" } }
138-
}
139-
}
140-
};
141-
var token = new TestToken("AC456", "SK123", "superdupersecretsecret", grants: grants).ToJwt();
142-
Assert.IsNotNull(token);
143-
Assert.IsNotEmpty(token);
144-
145-
var decoded = new JwtSecurityToken(token);
146-
var payload = decoded.Payload;
147-
Assert.IsNotNull(payload);
148-
149-
Assert.AreEqual("SK123", payload.Iss);
150-
Assert.AreEqual("AC456", payload.Sub);
151-
Assert.Greater(payload.Exp.Value, BaseJwt.ConvertToUnixTimestamp(DateTime.UtcNow));
152-
153-
var decodedGrants = ToDict(payload["grants"]);
154-
Assert.AreEqual(1, decodedGrants.Count);
155-
156-
var decodedPvg = decodedGrants["voice"];
157-
var outgoing = ToDict(decodedPvg.ToString())["outgoing"];
158-
Assert.AreEqual("AP123", ToDict(outgoing)["application_sid"]);
159-
160-
var decodedParams = ToDict(outgoing)["params"];
161-
Assert.AreEqual("bar", ToDict(decodedParams)["foo"]);
162-
}
163-
164-
[Test]
165-
public void TestCreateSyncGrant()
166-
{
167-
var grants = new HashSet<IGrant>
168-
{
169-
{
170-
new SyncGrant
171-
{
172-
ServiceSid = "IS123",
173-
EndpointId = "foobar"
174-
}
175-
}
176-
};
177-
var token = new TestToken("AC456", "SK123", "superdupersecretsecret", grants: grants).ToJwt();
178-
Assert.IsNotNull(token);
179-
Assert.IsNotEmpty(token);
180-
181-
var decoded = new JwtSecurityToken(token);
182-
var payload = decoded.Payload;
183-
Assert.IsNotNull(payload);
184-
185-
Assert.AreEqual("SK123", payload.Iss);
186-
Assert.AreEqual("AC456", payload.Sub);
187-
Assert.Greater(payload.Exp.Value, BaseJwt.ConvertToUnixTimestamp(DateTime.UtcNow));
188-
189-
var decodedGrants = ToDict(payload["grants"]);
190-
Assert.AreEqual(1, decodedGrants.Count);
191-
192-
var decodedSg = ToDict(decodedGrants["data_sync"]);
193-
Assert.AreEqual("IS123", decodedSg["service_sid"]);
194-
Assert.AreEqual("foobar", decodedSg["endpoint_id"]);
195-
196-
}
197-
198-
[Test]
199-
public void TestCreateVideoGrant()
200-
{
201-
var grants = new HashSet<IGrant>
202-
{
203-
{ new VideoGrant { ConfigurationProfileSid = "CP123" } }
204-
};
205-
var token = new TestToken("AC456", "SK123", "superdupersecretsecret", grants: grants).ToJwt();
206-
Assert.IsNotNull(token);
207-
Assert.IsNotEmpty(token);
208-
209-
var decoded = new JwtSecurityToken(token);
210-
var payload = decoded.Payload;
211-
Assert.IsNotNull(payload);
212-
213-
Assert.AreEqual("SK123", payload.Iss);
214-
Assert.AreEqual("AC456", payload.Sub);
215-
Assert.Greater(payload.Exp.Value, BaseJwt.ConvertToUnixTimestamp(DateTime.UtcNow));
216-
217-
var decodedGrants = ToDict(payload["grants"]);
218-
Assert.AreEqual(1, decodedGrants.Count);
219-
220-
var decodedVg = ToDict(decodedGrants["video"]);
221-
Assert.AreEqual("CP123", decodedVg["configuration_profile_sid"]);
222-
}
223224
}
224-
}
225-
#endif
225+
}

0 commit comments

Comments
 (0)