1package jwt_test 2 3import ( 4 "strings" 5 "testing" 6 7 "github.com/golang-jwt/jwt/v4" 8) 9 10var 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 44func 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 59func 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