Path: blob/main/components/public-api-server/pkg/jws/rsa256_test.go
2506 views
// Copyright (c) 2023 Gitpod GmbH. All rights reserved.1// Licensed under the GNU Affero General Public License (AGPL).2// See License.AGPL.txt in the project root for license information.34package jws_test56import (7"testing"8"time"910"github.com/gitpod-io/gitpod/public-api-server/pkg/jws"11"github.com/gitpod-io/gitpod/public-api-server/pkg/jws/jwstest"12"github.com/golang-jwt/jwt/v5"13"github.com/stretchr/testify/require"14)1516func TestRSA256SignVerify(t *testing.T) {17keyset := jwstest.GenerateKeySet(t)18rsa256, err := jws.NewRSA256(keyset)19require.NoError(t, err)2021claims := &jwt.RegisteredClaims{22Subject: "user-id",23Issuer: "test-issuer",24ExpiresAt: jwt.NewNumericDate(time.Now().Add(time.Hour)),25IssuedAt: jwt.NewNumericDate(time.Now()),26}27token := jwt.NewWithClaims(jwt.SigningMethodRS256, claims)2829signed, err := rsa256.Sign(token)30require.NoError(t, err)31require.Equal(t, keyset.Signing.ID, token.Header[jws.KeyIDName], "signer must add key ID header")3233verified, err := rsa256.Verify(signed, &jwt.RegisteredClaims{})34require.NoError(t, err)35require.Equal(t, claims, verified.Claims)36}3738func TestRSA256VerifyWithOlderKey(t *testing.T) {39keyset := jwstest.GenerateKeySet(t)4041// manually sign with older key42// this simulates a scenario where we issued a token with an older key, which we've since moved into our Validating keys43validating := keyset.Validating[0]44claims := &jwt.RegisteredClaims{45Subject: "user-id",46Issuer: "test-issuer",47ExpiresAt: jwt.NewNumericDate(time.Now().Add(time.Hour)),48IssuedAt: jwt.NewNumericDate(time.Now()),49}50token := jwt.NewWithClaims(jwt.SigningMethodRS256, claims)51token.Header[jws.KeyIDName] = validating.ID5253signed, err := token.SignedString(validating.Private)54require.NoError(t, err)5556// use our "newer" setup with a new signing key57rsa256, err := jws.NewRSA256(keyset)58require.NoError(t, err)5960verified, err := rsa256.Verify(signed, &jwt.RegisteredClaims{})61require.NoError(t, err)62require.Equal(t, claims, verified.Claims)63}646566