Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion service/internal/auth/token_verifier.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import (
"time"

"github.com/lestrrat-go/jwx/v2/jwk"
"github.com/lestrrat-go/jwx/v2/jws"
"github.com/lestrrat-go/jwx/v2/jwt"

"github.com/opentdf/platform/service/logger"
Expand Down Expand Up @@ -89,7 +90,7 @@ func (v *TokenVerifier) VerifyAccessToken(ctx context.Context, tokenRaw string)
}

token, err := jwt.Parse([]byte(tokenRaw),
jwt.WithKeySet(v.cachedKeySet),
jwt.WithKeySet(v.cachedKeySet, jws.WithInferAlgorithmFromKey(true)),
jwt.WithValidate(true),
jwt.WithIssuer(v.oidcConfiguration.Issuer),
jwt.WithAudience(v.oidcConfiguration.Audience),
Expand Down
26 changes: 25 additions & 1 deletion service/internal/auth/token_verifier_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,10 @@ type tokenVerifierFixture struct {
}

func newTokenVerifierFixture(t *testing.T) *tokenVerifierFixture {
return newTokenVerifierFixtureWithOptions(t, true)
}

func newTokenVerifierFixtureWithOptions(t *testing.T, includeAlgorithm bool) *tokenVerifierFixture {
t.Helper()

privateKey, err := rsa.GenerateKey(rand.Reader, 2048)
Expand All @@ -33,7 +37,9 @@ func newTokenVerifierFixture(t *testing.T) *tokenVerifierFixture {
publicKeyJWK, err := jwk.FromRaw(privateKey.PublicKey)
require.NoError(t, err)
require.NoError(t, publicKeyJWK.Set(jws.KeyIDKey, "test-key"))
require.NoError(t, publicKeyJWK.Set(jwk.AlgorithmKey, jwa.RS256))
if includeAlgorithm {
require.NoError(t, publicKeyJWK.Set(jwk.AlgorithmKey, jwa.RS256))
}

keySet := jwk.NewSet()
require.NoError(t, keySet.AddKey(publicKeyJWK))
Expand Down Expand Up @@ -149,6 +155,24 @@ func TestTokenVerifier_VerifyAccessToken(t *testing.T) {
_, err = verifier.VerifyAccessToken(t.Context(), token)
require.Error(t, err)
})

t.Run("valid token with JWKS key missing alg", func(t *testing.T) {
missingAlgFixture := newTokenVerifierFixtureWithOptions(t, false)

missingAlgVerifier, err := NewTokenVerifier(t.Context(), AuthNConfig{
Issuer: missingAlgFixture.server.URL,
Audience: "test-audience",
CacheRefresh: "15m",
TokenSkew: time.Minute,
}, logger.CreateTestLogger())
require.NoError(t, err)

token := missingAlgFixture.signToken(t, missingAlgFixture.server.URL, "test-audience", missingAlgFixture.privateKey)

verifiedToken, err := missingAlgVerifier.VerifyAccessToken(t.Context(), token)
require.NoError(t, err)
assert.Equal(t, "user-123", verifiedToken.Subject())
})
}

func TestTokenVerifier_NilHandling(t *testing.T) {
Expand Down
Loading