From a64cc1ed9569005823c010e9dee752c834058d83 Mon Sep 17 00:00:00 2001 From: kkb0318 Date: Thu, 28 Mar 2024 22:25:33 +0900 Subject: [PATCH] discovery configuration --- internal/selfhosted/oidc.go | 4 +-- internal/selfhosted/oidc/id_provider.go | 37 ++++++++++++++++++++----- 2 files changed, 32 insertions(+), 9 deletions(-) diff --git a/internal/selfhosted/oidc.go b/internal/selfhosted/oidc.go index 8f75478..9715b50 100644 --- a/internal/selfhosted/oidc.go +++ b/internal/selfhosted/oidc.go @@ -1,8 +1,8 @@ package selfhosted type OIDCIdProvider interface { - Discovery() []byte - JWK() []byte + Discovery() ([]byte, error) + JWK() ([]byte, error) Endpoint() string } diff --git a/internal/selfhosted/oidc/id_provider.go b/internal/selfhosted/oidc/id_provider.go index e7e23f7..f73b056 100644 --- a/internal/selfhosted/oidc/id_provider.go +++ b/internal/selfhosted/oidc/id_provider.go @@ -8,18 +8,41 @@ import ( ) type MyIdProvider struct { - keyPair *selfhosted.KeyPair - jwk *selfhosted.JWK + jwk *selfhosted.JWK + issuerHostPath string } -func (p *MyIdProvider) Discovery() []byte { - return []byte{} +type OIDCDiscoveryConfiguration struct { + Issuer string `json:"issuer"` + JWKSURI string `json:"jwks_uri"` + AuthorizationEndpoint string `json:"authorization_endpoint"` + ResponseTypesSupported []string `json:"response_types_supported"` + SubjectTypesSupported []string `json:"subject_types_supported"` + IDTokenSigningAlgValuesSupported []string `json:"id_token_signing_alg_values_supported"` + ClaimsSupported []string `json:"claims_supported"` +} + +func (p *MyIdProvider) Discovery() ([]byte, error) { + oidcConfig := OIDCDiscoveryConfiguration{ + Issuer: fmt.Sprintf("https://%s/", p.issuerHostPath), + JWKSURI: fmt.Sprintf("https://%s/keys.json", p.issuerHostPath), + AuthorizationEndpoint: "urn:kubernetes:programmatic_authorization", + ResponseTypesSupported: []string{"id_token"}, + SubjectTypesSupported: []string{"public"}, + IDTokenSigningAlgValuesSupported: []string{"RS256"}, + ClaimsSupported: []string{"sub", "iss"}, + } + jsonData, err := json.MarshalIndent(oidcConfig, "", " ") + if err != nil { + return nil, err + } + return jsonData, nil } 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 nil, err } return jsonData, nil } @@ -28,6 +51,6 @@ func (p *MyIdProvider) Endpoint() []byte { return []byte{} } -func NewMyIdProvider(keyPair *selfhosted.KeyPair, jwk *selfhosted.JWK) *MyIdProvider { - return &MyIdProvider{keyPair, jwk} +func NewMyIdProvider(jwk *selfhosted.JWK, issuerHostPath string) *MyIdProvider { + return &MyIdProvider{jwk, issuerHostPath} }