Merge branch 'eliquious-fix-multiple-audience-bug'
diff --git a/README.md b/README.md index 8443db9..52e31d7 100644 --- a/README.md +++ b/README.md
@@ -1,6 +1,7 @@ JOSE ============ [](https://travis-ci.org/SermoDigital/jose) +[](https://godoc.org/github.com/SermoDigital/jose) JOSE is a comprehensive set of JWT, JWS, and JWE libraries.
diff --git a/jwt/claims.go b/jwt/claims.go index 2f4f2e1..cc135d8 100644 --- a/jwt/claims.go +++ b/jwt/claims.go
@@ -118,7 +118,9 @@ return []string{t}, true case []string: return t, true - case interface{}, []interface{}: + case []interface{}: + return stringify(t...) + case interface{}: return stringify(t) } return nil, false
diff --git a/jwt/claims_test.go b/jwt/claims_test.go index e22cb07..c5edd70 100644 --- a/jwt/claims_test.go +++ b/jwt/claims_test.go
@@ -1 +1,85 @@ -package jwt +package jwt_test + +import ( + "testing" + + "github.com/SermoDigital/jose/crypto" + "github.com/SermoDigital/jose/jws" +) + +func TestMultipleAudienceBug_AfterMarshal(t *testing.T) { + + // Create JWS claims + claims := jws.Claims{} + claims.SetAudience("example.com", "api.example.com") + + token := jws.NewJWT(claims, crypto.SigningMethodHS256) + serializedToken, _ := token.Serialize([]byte("abcdef")) + + // Unmarshal JSON + newToken, _ := jws.ParseJWT(serializedToken) + + c := newToken.Claims() + + // Get Audience + aud, ok := c.Audience() + if !ok { + + // Fails + t.Fail() + } + + t.Logf("aud Value: %s", aud) + t.Logf("aud Type : %T", aud) +} + +func TestMultipleAudienceFix_AfterMarshal(t *testing.T) { + // Create JWS claims + claims := jws.Claims{} + claims.SetAudience("example.com", "api.example.com") + + token := jws.NewJWT(claims, crypto.SigningMethodHS256) + serializedToken, _ := token.Serialize([]byte("abcdef")) + + // Unmarshal JSON + newToken, _ := jws.ParseJWT(serializedToken) + + c := newToken.Claims() + + // Get Audience + aud, ok := c.Audience() + if !ok { + + // Fails + t.Fail() + } + + t.Logf("aud len(): %d", len(aud)) + t.Logf("aud Value: %s", aud) + t.Logf("aud Type : %T", aud) +} + +func TestSingleAudienceFix_AfterMarshal(t *testing.T) { + // Create JWS claims + claims := jws.Claims{} + claims.SetAudience("example.com") + + token := jws.NewJWT(claims, crypto.SigningMethodHS256) + serializedToken, _ := token.Serialize([]byte("abcdef")) + + // Unmarshal JSON + newToken, _ := jws.ParseJWT(serializedToken) + c := newToken.Claims() + + // Get Audience + aud, ok := c.Audience() + if !ok { + + // Fails + t.Fail() + } + + t.Logf("aud len(): %d", len(aud)) + t.Logf("aud Value: %s", aud) + t.Logf("aud Type : %T", aud) +}