fix(localSigner): simplify Algorithm method to always return RSA algorithm (#4655)

Signed-off-by: maksim.nabokikh <max.nabokih@gmail.com>
This commit is contained in:
Maksim Nabokikh
2026-03-17 14:13:27 +01:00
committed by GitHub
parent 90fd51b81e
commit 1e65dda440
2 changed files with 64 additions and 9 deletions
+4 -9
View File
@@ -105,13 +105,8 @@ func (l *localSigner) ValidationKeys(ctx context.Context) ([]*jose.JSONWebKey, e
return jwks, nil
}
func (l *localSigner) Algorithm(ctx context.Context) (jose.SignatureAlgorithm, error) {
keys, err := l.storage.GetKeys(ctx)
if err != nil {
return "", fmt.Errorf("failed to get keys: %v", err)
}
if keys.SigningKey == nil {
return "", fmt.Errorf("no signing key found")
}
return signatureAlgorithm(keys.SigningKey)
func (l *localSigner) Algorithm(_ context.Context) (jose.SignatureAlgorithm, error) {
// Local signer always uses RSA keys (see rotationStrategy.key).
// TODO(nabokihms): add support for other key types and algorithms in the future.
return jose.RS256, nil
}
+60
View File
@@ -0,0 +1,60 @@
package signer
import (
"context"
"log/slog"
"testing"
"time"
"github.com/go-jose/go-jose/v4"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/dexidp/dex/storage/memory"
)
func newTestLocalSigner(t *testing.T) *localSigner {
t.Helper()
logger := slog.New(slog.DiscardHandler)
s := memory.New(logger)
r := &keyRotator{
Storage: s,
strategy: defaultRotationStrategy(time.Hour, time.Hour),
now: time.Now,
logger: logger,
}
return &localSigner{
storage: s,
rotator: r,
logger: logger,
}
}
func TestLocalSignerAlgorithm(t *testing.T) {
ls := newTestLocalSigner(t)
// Algorithm should return RS256 even before keys are rotated (empty storage).
alg, err := ls.Algorithm(context.Background())
require.NoError(t, err)
assert.Equal(t, jose.RS256, alg)
}
func TestLocalSignerSignAndValidate(t *testing.T) {
ls := newTestLocalSigner(t)
ctx := context.Background()
// Rotate keys so we have a signing key.
require.NoError(t, ls.rotator.rotate())
payload := []byte(`{"sub":"test-user"}`)
signed, err := ls.Sign(ctx, payload)
require.NoError(t, err)
assert.NotEmpty(t, signed)
// Validation keys should be available.
keys, err := ls.ValidationKeys(ctx)
require.NoError(t, err)
assert.NotEmpty(t, keys)
}