From 476746b036abcf8814edd68f5360001c6c178e25 Mon Sep 17 00:00:00 2001 From: kkb0318 Date: Thu, 28 Mar 2024 22:18:54 +0900 Subject: [PATCH] JWK --- internal/selfhosted/keys.go | 14 ++++++++++--- internal/selfhosted/keys_test.go | 6 +++--- internal/selfhosted/oidc/id_provider.go | 28 +++++++++++++++++++------ 3 files changed, 36 insertions(+), 12 deletions(-) diff --git a/internal/selfhosted/keys.go b/internal/selfhosted/keys.go index a72c652..db840fb 100644 --- a/internal/selfhosted/keys.go +++ b/internal/selfhosted/keys.go @@ -8,11 +8,11 @@ import ( ) type KeyPair struct { - PublicKey []byte - PrivateKey []byte + publicKey []byte + privateKey []byte } -func createKeyPair() (*KeyPair, error) { +func CreateKeyPair() (*KeyPair, error) { privateKey, err := rsa.GenerateKey(rand.Reader, 2048) if err != nil { return nil, err @@ -38,3 +38,11 @@ func createKeyPair() (*KeyPair, error) { pubPemBytes := pem.EncodeToMemory(&pubPem) return &KeyPair{pubPemBytes, privPemBytes}, nil } + +func (k *KeyPair) PublicKey() []byte { + return k.publicKey +} + +func (k *KeyPair) PrivateKey() []byte { + return k.privateKey +} diff --git a/internal/selfhosted/keys_test.go b/internal/selfhosted/keys_test.go index 1c2c4ec..9f88aa0 100644 --- a/internal/selfhosted/keys_test.go +++ b/internal/selfhosted/keys_test.go @@ -14,13 +14,13 @@ import ( func TestReadKey(t *testing.T) { t.Run("key pair check", func(t *testing.T) { - keyPair, err := createKeyPair() + keyPair, err := CreateKeyPair() assert.NoError(t, err) message := []byte("test message") hashed := sha256.Sum256(message) - block, _ := pem.Decode(keyPair.PrivateKey) + block, _ := pem.Decode(keyPair.PrivateKey()) assert.NotNil(t, block, "failed to decode private key to PEM") privateKey, err := x509.ParsePKCS1PrivateKey(block.Bytes) @@ -29,7 +29,7 @@ func TestReadKey(t *testing.T) { signature, err := rsa.SignPKCS1v15(rand.Reader, privateKey, crypto.SHA256, hashed[:]) assert.NoError(t, err, "failed to create signature") - block, _ = pem.Decode(keyPair.PublicKey) + block, _ = pem.Decode(keyPair.PublicKey()) assert.NotNil(t, block, "failed to decode public key to PEM") pubKey, err := x509.ParsePKIXPublicKey(block.Bytes) diff --git a/internal/selfhosted/oidc/id_provider.go b/internal/selfhosted/oidc/id_provider.go index bf691b5..e7e23f7 100644 --- a/internal/selfhosted/oidc/id_provider.go +++ b/internal/selfhosted/oidc/id_provider.go @@ -1,17 +1,33 @@ package oidc +import ( + "encoding/json" + "fmt" + + "github.com/kkb0318/irsa-manager/internal/selfhosted" +) + type MyIdProvider struct { + keyPair *selfhosted.KeyPair + jwk *selfhosted.JWK } func (p *MyIdProvider) Discovery() []byte { - return []byte{} - + return []byte{} } -func (p *MyIdProvider) JWK() []byte { - return []byte{} +func (p *MyIdProvider) JWK() ([]byte, error) { + jsonData, err := json.MarshalIndent(p.jwk.GetKeys(), "", " ") + if err != nil { + return nil, fmt.Errorf("error marshalling JSON: %s", err.Error()) + } + return jsonData, nil } + func (p *MyIdProvider) Endpoint() []byte { - return []byte{} - + return []byte{} +} + +func NewMyIdProvider(keyPair *selfhosted.KeyPair, jwk *selfhosted.JWK) *MyIdProvider { + return &MyIdProvider{keyPair, jwk} }