github.com/brycereitano/goa@v0.0.0-20170315073847-8ffa6c85e265/middleware/security/jwt/jwt_test.go (about)

     1  package jwt_test
     2  
     3  import (
     4  	"crypto/ecdsa"
     5  	"crypto/rsa"
     6  	"fmt"
     7  	"net/http"
     8  	"net/http/httptest"
     9  
    10  	jwtpkg "github.com/dgrijalva/jwt-go"
    11  	"github.com/goadesign/goa"
    12  	"github.com/goadesign/goa/middleware/security/jwt"
    13  	. "github.com/onsi/ginkgo"
    14  	. "github.com/onsi/gomega"
    15  	"golang.org/x/net/context"
    16  )
    17  
    18  var _ = Describe("Middleware", func() {
    19  	var securityScheme *goa.JWTSecurity
    20  	var respRecord *httptest.ResponseRecorder
    21  	var request *http.Request
    22  	var handler goa.Handler
    23  	var middleware goa.Middleware
    24  	var dispatchResult error
    25  	var fetchedToken *jwtpkg.Token
    26  
    27  	BeforeEach(func() {
    28  		respRecord = httptest.NewRecorder()
    29  		request, _ = http.NewRequest("GET", "http://example.com/", nil)
    30  		handler = func(ctx context.Context, w http.ResponseWriter, r *http.Request) error {
    31  			fetchedToken = jwt.ContextJWT(ctx)
    32  			return nil
    33  		}
    34  	})
    35  
    36  	Context("given configuration errors", func() {
    37  		var keyResolver jwt.KeyResolver
    38  
    39  		BeforeEach(func() {
    40  			var err error
    41  			keyResolver, err = jwt.NewResolver(nil, "keyname")
    42  			Ω(err).ShouldNot(HaveOccurred())
    43  		})
    44  
    45  		It("should validate the token location", func() {
    46  			badScheme := &goa.JWTSecurity{
    47  				In:   "your mind",
    48  				Name: "Authorization",
    49  			}
    50  			middleware = jwt.New(keyResolver, nil, badScheme)
    51  			dispatchResult = middleware(handler)(context.Background(), respRecord, request)
    52  			Ω(dispatchResult).Should(HaveOccurred())
    53  		})
    54  
    55  		It("should validate the header name", func() {
    56  			badScheme := &goa.JWTSecurity{
    57  				In:   goa.LocHeader,
    58  				Name: "Accept-Candy-From-Strangers",
    59  			}
    60  			middleware = jwt.New(keyResolver, nil, badScheme)
    61  			dispatchResult = middleware(handler)(context.Background(), respRecord, request)
    62  			Ω(dispatchResult).Should(HaveOccurred())
    63  		})
    64  	})
    65  
    66  	It("should call the scheme's validation func", func() {
    67  		securityScheme = &goa.JWTSecurity{
    68  			In:   goa.LocHeader,
    69  			Name: "Authorization",
    70  		}
    71  
    72  		goAway := func(h goa.Handler) goa.Handler {
    73  			return func(ctx context.Context, rw http.ResponseWriter, req *http.Request) error {
    74  				return fmt.Errorf("go away")
    75  			}
    76  		}
    77  
    78  		keyResolver, _ := jwt.NewResolver(nil, "keyname")
    79  		keyResolver.AddKeys("mykeys", "keys")
    80  		middleware = jwt.New(keyResolver, goAway, securityScheme)
    81  		// HS256 {"scopes":"scope1","admin":true}, signed with "keys"
    82  		request.Header.Set("Authorization", "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzY29wZXMiOiJzY29wZTEiLCJhZG1pbiI6dHJ1ZX0.UCvEfbD_yuS5dCZidxZgogVi2yF0ZVecMsQQbY1HJy0")
    83  		dispatchResult = middleware(handler)(context.Background(), respRecord, request)
    84  		Ω(dispatchResult).Should(HaveOccurred())
    85  	})
    86  
    87  	Context("given a properly-initialized middleware", func() {
    88  		BeforeEach(func() {
    89  			securityScheme = &goa.JWTSecurity{
    90  				In:   goa.LocHeader,
    91  				Name: "Authorization",
    92  			}
    93  		})
    94  
    95  		Context("and a malformed request", func() {
    96  			BeforeEach(func() {
    97  				key := []byte("keys")
    98  				keyResolver := jwt.NewSimpleResolver([]jwt.Key{key})
    99  				middleware = jwt.New(keyResolver, nil, securityScheme)
   100  			})
   101  
   102  			It("should reject unknown authorization schemes", func() {
   103  				request.Header.Set("Authorization", "psychic paper")
   104  				dispatchResult = middleware(handler)(context.Background(), respRecord, request)
   105  				Ω(dispatchResult).Should(HaveOccurred())
   106  			})
   107  
   108  			It("should reject nonsensical scopes", func() {
   109  				// HS256 {"scopes":42}, signed with "keys"
   110  				request.Header.Set("Authorization", "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzY29wZXMiOjQyfQ.IO1-bXNsKlzfOycJeLMvl-17E81bj35-jcwMLKcvwNg")
   111  				dispatchResult = middleware(handler)(context.Background(), respRecord, request)
   112  				Ω(dispatchResult).Should(HaveOccurred())
   113  			})
   114  
   115  			It("should reject missing scopes", func() {
   116  				ctx := goa.WithRequiredScopes(context.Background(), []string{"foo"})
   117  				// HS256 {}, signed with "keys"
   118  				request.Header.Set("Authorization", "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.e30.GzYyHfGzNvErEXwUOI6oS-kszkhv7Ha8enQgv10_bz8")
   119  				dispatchResult = middleware(handler)(ctx, respRecord, request)
   120  				Ω(dispatchResult).Should(HaveOccurred())
   121  			})
   122  		})
   123  
   124  		Context("and a valid, well-formed request", func() {
   125  			JustBeforeEach(func() {
   126  				dispatchResult = middleware(handler)(context.Background(), respRecord, request)
   127  			})
   128  
   129  			Context("with an HS256 token", func() {
   130  				BeforeEach(func() {
   131  					// HS256 {"scopes":"scope1","admin":true}, signed with "keys"
   132  					request.Header.Set("Authorization", "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzY29wZXMiOiJzY29wZTEiLCJhZG1pbiI6dHJ1ZX0.UCvEfbD_yuS5dCZidxZgogVi2yF0ZVecMsQQbY1HJy0")
   133  				})
   134  
   135  				Context("with a single key", func() {
   136  					var err1, err2 error
   137  					BeforeEach(func() {
   138  						keyResolver, err := jwt.NewResolver(nil, "keyname")
   139  						err1 = err
   140  						err2 = keyResolver.AddKeys("mykeys", "keys")
   141  						middleware = jwt.New(keyResolver, nil, securityScheme)
   142  					})
   143  
   144  					It("should go through", func() {
   145  						Ω(err1).ShouldNot(HaveOccurred())
   146  						Ω(err2).ShouldNot(HaveOccurred())
   147  						Ω(dispatchResult).ShouldNot(HaveOccurred())
   148  						Ω(fetchedToken).ShouldNot(BeNil())
   149  					})
   150  				})
   151  
   152  				Context("with a single key and specified jwt keyname field", func() {
   153  					var err1, err2 error
   154  					BeforeEach(func() {
   155  						request.Header.Set("keyname", "mykeys")
   156  						keyResolver, err := jwt.NewResolver(nil, "keyname")
   157  						err1 = err
   158  						err2 = keyResolver.AddKeys("mykeys", "keys")
   159  						middleware = jwt.New(keyResolver, nil, securityScheme)
   160  					})
   161  
   162  					It("should go through", func() {
   163  						Ω(err1).ShouldNot(HaveOccurred())
   164  						Ω(err2).ShouldNot(HaveOccurred())
   165  						Ω(dispatchResult).ShouldNot(HaveOccurred())
   166  						Ω(fetchedToken).ShouldNot(BeNil())
   167  					})
   168  				})
   169  
   170  				Context("with a single key and incorrectly specified jwt keyname field", func() {
   171  					var err1, err2 error
   172  					BeforeEach(func() {
   173  						request.Header.Set("keyname", "notmykeys")
   174  						keyResolver, err := jwt.NewResolver(nil, "keyname")
   175  						err1 = err
   176  						err2 = keyResolver.AddKeys("mykeys", "keys")
   177  						middleware = jwt.New(keyResolver, nil, securityScheme)
   178  					})
   179  
   180  					It("should fail with an error", func() {
   181  						Ω(err1).ShouldNot(HaveOccurred())
   182  						Ω(err2).ShouldNot(HaveOccurred())
   183  						Ω(dispatchResult).Should(HaveOccurred())
   184  					})
   185  				})
   186  
   187  				Context("with keys that didn't the JWT", func() {
   188  					var err1, err2 error
   189  					BeforeEach(func() {
   190  						keyResolver, err := jwt.NewResolver(nil, "keyname")
   191  						err1 = err
   192  						err2 = keyResolver.AddKeys("mykeys", "otherkey")
   193  						middleware = jwt.New(keyResolver, nil, securityScheme)
   194  					})
   195  
   196  					It("should fail with an error", func() {
   197  						Ω(err1).ShouldNot(HaveOccurred())
   198  						Ω(err2).ShouldNot(HaveOccurred())
   199  						Ω(dispatchResult).Should(HaveOccurred())
   200  					})
   201  				})
   202  
   203  				Context("with multiple keys", func() {
   204  					var err1, err2 error
   205  					BeforeEach(func() {
   206  						keyResolver, err := jwt.NewResolver(nil, "keyname")
   207  						err1 = err
   208  						err2 = keyResolver.AddKeys("mykeys", []string{"firstkey", "keys"})
   209  						middleware = jwt.New(keyResolver, nil, securityScheme)
   210  					})
   211  
   212  					It("should go through", func() {
   213  						Ω(err1).ShouldNot(HaveOccurred())
   214  						Ω(err2).ShouldNot(HaveOccurred())
   215  						Ω(dispatchResult).ShouldNot(HaveOccurred())
   216  						Ω(fetchedToken).ShouldNot(BeNil())
   217  					})
   218  				})
   219  			})
   220  
   221  			Context("with an RS256 token", func() {
   222  				BeforeEach(func() {
   223  					// RS256 {"scopes":"scope1 scope2","admin":true}, signed with rsaKey1 below
   224  					request.Header.Set("Authorization", "Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzY29wZXMiOiJzY29wZTEgc2NvcGU"+
   225  						"yIiwiYWRtaW4iOnRydWV9.gT4gSGqXTCUZAJT_TWZ4eknazVo-ulMKwSpHoghWZU8Sm9QXt48ISwFAb_wW2xhR58MUNX95iuiex0bCWvze59r"+
   226  						"35dEQ2SOZixuDvE8srQi2SRk9qqsVV9-R361qf2D8KfLX9jQ7j-UB40bleg0fOyBAjPLPq0ggBigSjQ2yUz8YDKma-n6Ulc3LJ4gyozmb3MjO"+
   227  						"9RV2pdD3N-m6ttwkTkUE2jhsL6a3T8f0Y6xSGTMyZasKc6kHbUyz6NjAeplLhbkBDE8-Ak4GaLGlLnLzZ49oTVrh89yauciW5yLQCXzXt2POD"+
   228  						"qp6zXPC0FFcDr-2USCpA-nqaQQyhliMcgtqVw")
   229  				})
   230  
   231  				Context("with a single key", func() {
   232  					var err1, err2 error
   233  					BeforeEach(func() {
   234  						keyResolver, err := jwt.NewResolver(nil, "keyname")
   235  						err1 = err
   236  						err2 = keyResolver.AddKeys("mykeys", rsaPubKey1)
   237  						middleware = jwt.New(keyResolver, nil, securityScheme)
   238  					})
   239  
   240  					It("should go through", func() {
   241  						Ω(err1).ShouldNot(HaveOccurred())
   242  						Ω(err2).ShouldNot(HaveOccurred())
   243  						Ω(dispatchResult).ShouldNot(HaveOccurred())
   244  						Ω(fetchedToken).ShouldNot(BeNil())
   245  					})
   246  				})
   247  
   248  				Context("with a single key and specified jwt keyname field", func() {
   249  					var err1, err2 error
   250  					BeforeEach(func() {
   251  						request.Header.Set("keyname", "mykeys")
   252  						keyResolver, err := jwt.NewResolver(nil, "keyname")
   253  						err1 = err
   254  						err2 = keyResolver.AddKeys("mykeys", rsaPubKey1)
   255  						middleware = jwt.New(keyResolver, nil, securityScheme)
   256  					})
   257  
   258  					It("should go through", func() {
   259  						Ω(err1).ShouldNot(HaveOccurred())
   260  						Ω(err2).ShouldNot(HaveOccurred())
   261  						Ω(dispatchResult).ShouldNot(HaveOccurred())
   262  						Ω(fetchedToken).ShouldNot(BeNil())
   263  					})
   264  				})
   265  
   266  				Context("with a single key and incorrectly specified jwt keyname field", func() {
   267  					var err1, err2 error
   268  					BeforeEach(func() {
   269  						request.Header.Set("keyname", "notmykeys")
   270  						keyResolver, err := jwt.NewResolver(nil, "keyname")
   271  						err1 = err
   272  						err2 = keyResolver.AddKeys("mykeys", rsaPubKey1)
   273  						middleware = jwt.New(keyResolver, nil, securityScheme)
   274  					})
   275  
   276  					It("should fail with an error", func() {
   277  						Ω(err1).ShouldNot(HaveOccurred())
   278  						Ω(err2).ShouldNot(HaveOccurred())
   279  						Ω(dispatchResult).Should(HaveOccurred())
   280  						Ω(dispatchResult.(error)).Should(HaveOccurred())
   281  					})
   282  				})
   283  
   284  				Context("with keys that didn't the JWT", func() {
   285  					var err1, err2 error
   286  					BeforeEach(func() {
   287  						keyResolver, err := jwt.NewResolver(nil, "keyname")
   288  						err1 = err
   289  						err2 = keyResolver.AddKeys("mykeys", rsaPubKey2)
   290  						middleware = jwt.New(keyResolver, nil, securityScheme)
   291  					})
   292  
   293  					It("should fail with an error", func() {
   294  						Ω(err1).ShouldNot(HaveOccurred())
   295  						Ω(err2).ShouldNot(HaveOccurred())
   296  						Ω(dispatchResult).Should(HaveOccurred())
   297  						Ω(dispatchResult.(error)).Should(HaveOccurred())
   298  					})
   299  				})
   300  
   301  				Context("with multiple keys", func() {
   302  					var err1, err2 error
   303  					BeforeEach(func() {
   304  						keyResolver, err := jwt.NewResolver(nil, "keyname")
   305  						err1 = err
   306  						err2 = keyResolver.AddKeys("mykeys", []*rsa.PublicKey{rsaPubKey1})
   307  						middleware = jwt.New(keyResolver, nil, securityScheme)
   308  					})
   309  
   310  					It("should go through", func() {
   311  						Ω(err1).ShouldNot(HaveOccurred())
   312  						Ω(err2).ShouldNot(HaveOccurred())
   313  						Ω(dispatchResult).ShouldNot(HaveOccurred())
   314  						Ω(fetchedToken).ShouldNot(BeNil())
   315  					})
   316  				})
   317  			})
   318  
   319  			Context("with an ES256 token", func() {
   320  				BeforeEach(func() {
   321  					// ES256 {"scopes":"scope1 scope2","admin":true}, signed with ecKey1 below
   322  					request.Header.Set("Authorization", "Bearer "+
   323  						"eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9."+
   324  						"eyJhZG1pbiI6dHJ1ZSwic2NvcGVzIjoic2NvcGUxIHNjb3BlMiJ9."+
   325  						"7gM4EblP4cvX5C6PBLSBFpKX2FQ9AsLNmOXEm86uvrd4czBfw1zDO24abQ7gtlbMcjuVvxrpIyRa7Nbbn31G7w")
   326  				})
   327  
   328  				Context("with a single key", func() {
   329  					var err1, err2 error
   330  					BeforeEach(func() {
   331  						keyResolver, err := jwt.NewResolver(nil, "keyname")
   332  						err1 = err
   333  						err2 = keyResolver.AddKeys("mykeys", ecPubKey1)
   334  						middleware = jwt.New(keyResolver, nil, securityScheme)
   335  					})
   336  
   337  					It("should go through", func() {
   338  						Ω(err1).ShouldNot(HaveOccurred())
   339  						Ω(err2).ShouldNot(HaveOccurred())
   340  						Ω(dispatchResult).ShouldNot(HaveOccurred())
   341  						Ω(fetchedToken).ShouldNot(BeNil())
   342  					})
   343  				})
   344  
   345  				Context("with a single key and specified jwt keyname field", func() {
   346  					var err1, err2 error
   347  					BeforeEach(func() {
   348  						request.Header.Set("keyname", "mykeys")
   349  						keyResolver, err := jwt.NewResolver(nil, "keyname")
   350  						err1 = err
   351  						err2 = keyResolver.AddKeys("mykeys", ecPubKey1)
   352  						middleware = jwt.New(keyResolver, nil, securityScheme)
   353  					})
   354  
   355  					It("should go through", func() {
   356  						Ω(err1).ShouldNot(HaveOccurred())
   357  						Ω(err2).ShouldNot(HaveOccurred())
   358  						Ω(dispatchResult).ShouldNot(HaveOccurred())
   359  						Ω(fetchedToken).ShouldNot(BeNil())
   360  					})
   361  				})
   362  
   363  				Context("with a single key and incorrectly specified jwt keyname field", func() {
   364  					var err1, err2 error
   365  					BeforeEach(func() {
   366  						request.Header.Set("keyname", "notmykeys")
   367  						keyResolver, err := jwt.NewResolver(nil, "keyname")
   368  						err1 = err
   369  						err2 = keyResolver.AddKeys("mykeys", ecPubKey1)
   370  						middleware = jwt.New(keyResolver, nil, securityScheme)
   371  					})
   372  
   373  					It("should fail with an error", func() {
   374  						Ω(err1).ShouldNot(HaveOccurred())
   375  						Ω(err2).ShouldNot(HaveOccurred())
   376  						Ω(dispatchResult).Should(HaveOccurred())
   377  						Ω(dispatchResult.(error)).Should(HaveOccurred())
   378  					})
   379  				})
   380  
   381  				Context("with keys that didn't sign the JWT", func() {
   382  					var err1, err2 error
   383  					BeforeEach(func() {
   384  						keyResolver, err := jwt.NewResolver(nil, "keyname")
   385  						err1 = err
   386  						err2 = keyResolver.AddKeys("mykeys", ecPubKey2)
   387  						middleware = jwt.New(keyResolver, nil, securityScheme)
   388  					})
   389  
   390  					It("should fail with an error", func() {
   391  						Ω(err1).ShouldNot(HaveOccurred())
   392  						Ω(err2).ShouldNot(HaveOccurred())
   393  						Ω(dispatchResult).Should(HaveOccurred())
   394  						Ω(dispatchResult.(error)).Should(HaveOccurred())
   395  					})
   396  				})
   397  
   398  				Context("with multiple keys", func() {
   399  					var err1, err2 error
   400  					BeforeEach(func() {
   401  						keyResolver, err := jwt.NewResolver(nil, "keyname")
   402  						err1 = err
   403  						err2 = keyResolver.AddKeys("mykeys", []*ecdsa.PublicKey{ecPubKey1})
   404  						middleware = jwt.New(keyResolver, nil, securityScheme)
   405  					})
   406  
   407  					It("should go through", func() {
   408  						Ω(err1).ShouldNot(HaveOccurred())
   409  						Ω(err2).ShouldNot(HaveOccurred())
   410  						Ω(dispatchResult).ShouldNot(HaveOccurred())
   411  						Ω(fetchedToken).ShouldNot(BeNil())
   412  					})
   413  				})
   414  			})
   415  		})
   416  	})
   417  })
   418  
   419  var rsaKey1, _ = jwtpkg.ParseRSAPrivateKeyFromPEM([]byte(`-----BEGIN RSA PRIVATE KEY-----
   420  MIIEogIBAAKCAQEArZIJcPQd7aSGb80wgFpy5SVjzzsGpfIysZ30SdWlTcWMVbAT
   421  XmsDNgw98TzIeoyikSbSHEeORbKWKS2clgNsdLjYKv3XLTBaXfLcU3x9mhnk/kUL
   422  N/AQgyvsRGynPris2oVzGSib7uOZK/9+u+QAKIrp7prcmMmnwvdcjFXjwzx83RTF
   423  1b+iuVGCdV0T4m1XQdm/YtIUh7JNbYrUolkdwZlOxMZuV0FDC+ms02+gyj580Pyl
   424  TuAD4JmtSmmijyWfEx5dsZYtGALyUxcm5Hz15RP3FACrv4B++BHI6smO4sWdrSYV
   425  l3sHJ60Bm6zbwuyB2twJPOdL5nVIGiIDdf+1IwIDAQABAoIBACF3MtLQfqS/QBx2
   426  V4+n4NdFqkTegJ2mYRfV+K/zvXeNS02KMXHW+DuHiLnmmlDmpMGP1psVQN03XbR6
   427  0uIprtOigCtp3f8cf4/1r315V05LB9fuwAb9BnIEGf3nZSe2u702VcbYCZi50WKm
   428  VG0tvMoUXp5exYG//9SblQCJ3uxZf9D8y5RnrUZtP4Pnjkn/3YeJCF+Kked55Cvi
   429  gv56/aiyWp9xEGsSWig5Zt8VNXihgT7D2KZzxcQDQlxw0CR5ECT7/4w7sZVvwc7B
   430  I76JJDvpD0UGvzoUgx928efGKxJBrcjzvTNSKgHJYYCvaa6+qX2tjkmOqdG4xl27
   431  /TaBISECgYEA4YJ32HKaS2ikn5J2C1qlHy4nRuVNhX8T9qvp6OBdbE2BQq3O5IUt
   432  +wdTcjhD88aDdHCZmAd8i3FC4l+CKsQ5sTwRk0vTOZ7axC6+zDHg+na5/+NCq+xm
   433  ffoaZ5jsZFyqfbsFn8NiLWLo2JSFV1AnUxwpPA2jbuylAuZVvVbLYHcCgYEAxQnO
   434  L+U6NwTvN6EJgt3h1jHfXiQnapsj0O0XgK+g2K6vMovpXAf9noO+r3Qbx/aKxuRg
   435  TvRQ08T5yyqysz+sYe0rp8oaMUhYQFMgJOUUBlmUVGxYdARMD6kTy/384B9Azoex
   436  UCosMSEAD909MAsyQWB4X6OJKd+V68QpFYeIx7UCgYBHgaRY6PYOBU92He36abLE
   437  MVFZBKrRMtt0s0yHgGV/SxA6wXxCMAzFdaw7IqZBbWgPiwjZET6nxLFNsLVItFIK
   438  5h44k6mVss5xuNTdUM+i+/S8tCZW964EMkMfKHmE1XFmTuBYqY6/D4b/7hBeAFeH
   439  3f0hQr3ZFYa5Zao4UIZKvwKBgGL8lhUBt8lENVlhEYIpLfeJfomw6AxqfAfN1GzV
   440  zpyMxX9DQqz1ZrhnvzgtwHcoqHda6/c+TgzVfBhRDw12A4f+ulvE8HupuIw4NoHS
   441  g8jc3+O5uoYuUnfbnRJyOsPtb4VSLgXz6deUmI9fugmU1l55tH93jMT4ijyzg2BJ
   442  grGxAoGAWX24Yx9qoasqEQ2rgdTsgylwL28UczKQ5KNHt2PcEfPNw6/GpfK7YmlU
   443  Heef2umEzb1K2ZK95wlMbF8zpNDWBf4PkxgfW+JEE+pO1kb5KXysBymymyXhGHAP
   444  CwH9XHqbjVlsD358AbPeKqLgTCaGo9JgsEZDBpESmBDnIPUahMc=
   445  -----END RSA PRIVATE KEY-----`))
   446  
   447  var rsaPubKey1, _ = jwtpkg.ParseRSAPublicKeyFromPEM([]byte(`-----BEGIN PUBLIC KEY-----
   448  MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArZIJcPQd7aSGb80wgFpy
   449  5SVjzzsGpfIysZ30SdWlTcWMVbATXmsDNgw98TzIeoyikSbSHEeORbKWKS2clgNs
   450  dLjYKv3XLTBaXfLcU3x9mhnk/kULN/AQgyvsRGynPris2oVzGSib7uOZK/9+u+QA
   451  KIrp7prcmMmnwvdcjFXjwzx83RTF1b+iuVGCdV0T4m1XQdm/YtIUh7JNbYrUolkd
   452  wZlOxMZuV0FDC+ms02+gyj580PylTuAD4JmtSmmijyWfEx5dsZYtGALyUxcm5Hz1
   453  5RP3FACrv4B++BHI6smO4sWdrSYVl3sHJ60Bm6zbwuyB2twJPOdL5nVIGiIDdf+1
   454  IwIDAQAB
   455  -----END PUBLIC KEY-----`))
   456  
   457  var rsaKey2, _ = jwtpkg.ParseRSAPrivateKeyFromPEM([]byte(`-----BEGIN RSA PRIVATE KEY-----
   458  MIIEowIBAAKCAQEA4jr/DGbPt0UDGvu6Xo2LV0F6Wf8OnyxF2IFPdG5B4X0YS3DC
   459  9SF3clbbBivDVa2bEXppyj+eLEKlfohCWXTrJK0LxTEcneuDkF4re+BdP3q9cKRz
   460  FtI/ZVhVnD7+PS1wps7OiTM0iOaIDo9+uFrC6zBTRAiPyrdwh1ApttLdoD6i5D9D
   461  7zzvpTXLC/UWaRz/phAaaop6dPPR1YblZEckWgqTMC3KrRX/6QJFFfpgyQzFT09W
   462  DYnmXl2gS7C2sk4UejygqmVg96JxaIaT3WiQSjxXddjR/krcA9EGNNEkpZB2W6Ux
   463  6d63yWsNG9YJUacwI+M2q5ZW964J1s//FiNZZQIDAQABAoIBAQCoqYtU16Gs5Qq3
   464  p0z/CVAFMY/iYMGp8fvwuhdemoULc5QVSnBPCTBgUljgdOggjFm74iPU4TEvllCD
   465  0VqGDyDwKwNHdKH9KoTfsRWCOXfLx9pMjI4xSXZyPDU3U8+AFMyT0EMzDrXwCs8M
   466  6/Zxw1jmtxSc+DUb0T9X4m/3GaaZvDGGShnU8/XnEh2uEHrNwWnGWYPJ/rZjNZPy
   467  PZ9W2VpcHKBMVEowK/cOoouNuflAISoLCCLMNYygr9T4Ylm3HGP9o7JuWL+wGQsa
   468  aXrE5qTOpsxmBqTQ8pglnxnhDEFXmx3O+bwRfIwDSYe+wvCINpdIstWuybh4Ed2i
   469  ZgLTlx8BAoGBAP9LwmfZ/2XNHBzk+f09TnTnhXzVsKkHu5BlXvWoDigVv4Dzl44j
   470  X1Ade5PjiOf0Jti2QCkAaI+CjExdP1zCqDZBQFpKI3QQgvlWoKXHVFV9ziC8gcX+
   471  I6M8wmtIoK8ISnC6A5s1wKIvOPsZyP7aVZgu805BKfVqtFWCK42vnRVRAoGBAOLa
   472  t2pOzVttd3vPgzGovD+Mf3RsPg6ygazj0GiDRspRCnoeopFEoBPFcKIQZlPp8rfT
   473  NLOuwVkW5TqntrCW0UwixZMXicIaPDo0idXInIfP0+f7JxSYb5q7vmbyRt8uAYY9
   474  GU4L/ZIn127JbgQ5n5nuODMvTe7m5Ky+FUYHw43VAoGAE6QOdtLstTZMfWSYXwVC
   475  bfgJ6wq9pqNzqK5D2f5t6GOT8iXLeSH7iTxbb4tH0yCThISw9vaTFMdkZ9OctlQ7
   476  gMEQZGHjzGAg03H4tghZ0qH1I8uc6FCfCUX5ZyuVQSIQKBAHiv9drJyZc6gOMJ03
   477  jJfAHDsjMUBeU13KYAIswaECgYBTYiNSzv5KodTuTFsjsKrpDOJ4T6ULz+88NkyP
   478  bdliWiFou8Pzc28HdWYuG6sRIwfVK6vOc+ibr3+4bJcJF5Z8zrcilt9K2kvS9SbI
   479  zsFCZlC0jytRNaqoDGQzANCuDgH/bovTlTKyOzTDgwSORwP0F4zOu4+AxZu+Juw4
   480  3nextQKBgEAGLuChkztZCVt0W2D8wJYFR7XjezcbsfpoXx9H8htk6u4STu9TwB76
   481  DxoYj3qiTV2kRRBQQZRAli1TbDOnJuqFMnRL0aPsqebuW2sqY9Hx9G6TxokN8Nc6
   482  RlTE+CbPcjBgAx+AANL/X2KYoXLAjOrYY5kQD8Qbt8Wkme7m6hiP
   483  -----END RSA PRIVATE KEY-----`))
   484  
   485  var rsaPubKey2, _ = jwtpkg.ParseRSAPublicKeyFromPEM([]byte(`-----BEGIN PUBLIC KEY-----
   486  MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jr/DGbPt0UDGvu6Xo2L
   487  V0F6Wf8OnyxF2IFPdG5B4X0YS3DC9SF3clbbBivDVa2bEXppyj+eLEKlfohCWXTr
   488  JK0LxTEcneuDkF4re+BdP3q9cKRzFtI/ZVhVnD7+PS1wps7OiTM0iOaIDo9+uFrC
   489  6zBTRAiPyrdwh1ApttLdoD6i5D9D7zzvpTXLC/UWaRz/phAaaop6dPPR1YblZEck
   490  WgqTMC3KrRX/6QJFFfpgyQzFT09WDYnmXl2gS7C2sk4UejygqmVg96JxaIaT3WiQ
   491  SjxXddjR/krcA9EGNNEkpZB2W6Ux6d63yWsNG9YJUacwI+M2q5ZW964J1s//FiNZ
   492  ZQIDAQAB
   493  -----END PUBLIC KEY-----`))
   494  
   495  var ecKey1, _ = jwtpkg.ParseECPrivateKeyFromPEM([]byte(`-----BEGIN EC PRIVATE KEY-----
   496  MHcCAQEEIM4zAVusfF+Xl4Z5a5LaspGk+OIwGQweubphSqC1R9+VoAoGCCqGSM49
   497  AwEHoUQDQgAE3tWSknhfssUVytNbPz3TB7giFfxKtHsFW27Yls+Ohfuui9NW4eEk
   498  fLOxYkTI9tyoKfh9Dan5kJFA7ZYEwZ0zMQ==
   499  -----END EC PRIVATE KEY-----`))
   500  
   501  var ecPubKey1, _ = jwtpkg.ParseECPublicKeyFromPEM([]byte(`-----BEGIN PUBLIC KEY-----
   502  MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE3tWSknhfssUVytNbPz3TB7giFfxK
   503  tHsFW27Yls+Ohfuui9NW4eEkfLOxYkTI9tyoKfh9Dan5kJFA7ZYEwZ0zMQ==
   504  -----END PUBLIC KEY-----`))
   505  
   506  var ecKey2, _ = jwtpkg.ParseECPrivateKeyFromPEM([]byte(`-----BEGIN EC PRIVATE KEY-----
   507  MHcCAQEEIKQ7EyFGaYMuFpMLnqK+mBnT9CrWOqzVxsF8wBlGrTq/oAoGCCqGSM49
   508  AwEHoUQDQgAE8IX3mOtLvBpvrylaRjFpadqGrirXh9dkjJfM/t1dnLu5qPhybMIY
   509  tEr3Xs8vYp2wyaSTVKsyj9y+t344T5Bhdw==
   510  -----END EC PRIVATE KEY-----`))
   511  
   512  var ecPubKey2, _ = jwtpkg.ParseECPublicKeyFromPEM([]byte(`-----BEGIN PUBLIC KEY-----
   513  MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE8IX3mOtLvBpvrylaRjFpadqGrirX
   514  h9dkjJfM/t1dnLu5qPhybMIYtEr3Xs8vYp2wyaSTVKsyj9y+t344T5Bhdw==
   515  -----END PUBLIC KEY-----`))