Milan Pavlik d069f76edc
[public-api] Refactor JWT Sign/Verify to be reusable for OIDC - WEB-206 (#17327)
* [public-api] Refactor JWT Sign/Verify to be reusable for OIDC

* fix
2023-04-24 15:14:45 +08:00

63 lines
1.6 KiB
Go

// Copyright (c) 2023 Gitpod GmbH. All rights reserved.
// Licensed under the GNU Affero General Public License (AGPL).
// See License.AGPL.txt in the project root for license information.
package auth
import (
"testing"
"time"
"github.com/gitpod-io/gitpod/public-api-server/pkg/jws"
"github.com/gitpod-io/gitpod/public-api-server/pkg/jws/jwstest"
"github.com/golang-jwt/jwt/v5"
"github.com/google/uuid"
"github.com/stretchr/testify/require"
)
func TestNewSessionJWT(t *testing.T) {
var (
subject = uuid.New()
issuer = "some-issuer"
issuedAt = time.Now()
expiry = issuedAt.Add(time.Hour)
)
token := NewSessionJWT(subject, issuer, issuedAt, expiry)
require.Equal(t, &SessionClaims{
RegisteredClaims: jwt.RegisteredClaims{
Issuer: issuer,
Subject: subject.String(),
ExpiresAt: jwt.NewNumericDate(expiry),
IssuedAt: jwt.NewNumericDate(issuedAt),
},
}, token.Claims)
}
func TestVerifySessionJWT(t *testing.T) {
var (
subject = uuid.New()
issuer = "some-issuer"
issuedAt = time.Now()
expiry = issuedAt.Add(time.Hour)
)
token := NewSessionJWT(subject, issuer, issuedAt, expiry)
keyset := jwstest.GenerateKeySet(t)
rsa256, err := jws.NewRSA256(keyset)
require.NoError(t, err)
signed, err := rsa256.Sign(token)
require.NoError(t, err)
claims, err := VerifySessionJWT(signed, rsa256, issuer)
require.NoError(t, err)
require.Equal(t, &SessionClaims{
RegisteredClaims: jwt.RegisteredClaims{
Issuer: issuer,
Subject: subject.String(),
ExpiresAt: jwt.NewNumericDate(expiry),
IssuedAt: jwt.NewNumericDate(issuedAt),
},
}, claims)
}