mirror of
https://github.com/netbirdio/dex.git
synced 2026-05-22 18:43:53 -07:00
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:
@@ -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
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
Reference in New Issue
Block a user