...
1 package jwt_test
2
3 import (
4 "strings"
5 "testing"
6
7 "github.com/golang-jwt/jwt/v4"
8 )
9
10 var noneTestData = []struct {
11 name string
12 tokenString string
13 alg string
14 key interface{}
15 claims map[string]interface{}
16 valid bool
17 }{
18 {
19 "Basic",
20 "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJmb28iOiJiYXIifQ.",
21 "none",
22 jwt.UnsafeAllowNoneSignatureType,
23 map[string]interface{}{"foo": "bar"},
24 true,
25 },
26 {
27 "Basic - no key",
28 "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJmb28iOiJiYXIifQ.",
29 "none",
30 nil,
31 map[string]interface{}{"foo": "bar"},
32 false,
33 },
34 {
35 "Signed",
36 "eyJhbGciOiJSUzM4NCIsInR5cCI6IkpXVCJ9.eyJmb28iOiJiYXIifQ.W-jEzRfBigtCWsinvVVuldiuilzVdU5ty0MvpLaSaqK9PlAWWlDQ1VIQ_qSKzwL5IXaZkvZFJXT3yL3n7OUVu7zCNJzdwznbC8Z-b0z2lYvcklJYi2VOFRcGbJtXUqgjk2oGsiqUMUMOLP70TTefkpsgqDxbRh9CDUfpOJgW-dU7cmgaoswe3wjUAUi6B6G2YEaiuXC0XScQYSYVKIzgKXJV8Zw-7AN_DBUI4GkTpsvQ9fVVjZM9csQiEXhYekyrKu1nu_POpQonGd8yqkIyXPECNmmqH5jH4sFiF67XhD7_JpkvLziBpI-uh86evBUadmHhb9Otqw3uV3NTaXLzJw",
37 "none",
38 jwt.UnsafeAllowNoneSignatureType,
39 map[string]interface{}{"foo": "bar"},
40 false,
41 },
42 }
43
44 func TestNoneVerify(t *testing.T) {
45 for _, data := range noneTestData {
46 parts := strings.Split(data.tokenString, ".")
47
48 method := jwt.GetSigningMethod(data.alg)
49 err := method.Verify(strings.Join(parts[0:2], "."), parts[2], data.key)
50 if data.valid && err != nil {
51 t.Errorf("[%v] Error while verifying key: %v", data.name, err)
52 }
53 if !data.valid && err == nil {
54 t.Errorf("[%v] Invalid key passed validation", data.name)
55 }
56 }
57 }
58
59 func TestNoneSign(t *testing.T) {
60 for _, data := range noneTestData {
61 if data.valid {
62 parts := strings.Split(data.tokenString, ".")
63 method := jwt.GetSigningMethod(data.alg)
64 sig, err := method.Sign(strings.Join(parts[0:2], "."), data.key)
65 if err != nil {
66 t.Errorf("[%v] Error signing token: %v", data.name, err)
67 }
68 if sig != parts[2] {
69 t.Errorf("[%v] Incorrect signature.\nwas:\n%v\nexpecting:\n%v", data.name, sig, parts[2])
70 }
71 }
72 }
73 }
74
View as plain text