Made it possible to override certain example IDP endpoints

This commit is contained in:
David J. Allen 2024-04-29 18:45:30 -06:00
parent f10a771db6
commit 73e4e50d44
No known key found for this signature in database
GPG key ID: 717C593FF60A2ACC
4 changed files with 57 additions and 18 deletions

View file

@ -22,7 +22,7 @@ import (
"github.com/lestrrat-go/jwx/v2/jwt"
)
func (s *Server) StartIdentityProvider() error {
func (s *Server) StartIdentityProvider(eps oidc.Endpoints) error {
// NOTE: this example does NOT implement CSRF tokens nor use them
// create an example identity provider
@ -38,6 +38,14 @@ func (s *Server) StartIdentityProvider() error {
callback = "/oidc/callback"
}
// update endpoints that have values set
defaultEps := oidc.Endpoints{
Authorization: "http://" + s.Addr + "/oauth/authorize",
Token: "http://" + s.Addr + "/oauth/token",
JwksUri: "http://" + s.Addr + "/.well-known/jwks.json",
}
oidc.UpdateEndpoints(&eps, &defaultEps)
// generate key pair used to sign JWKS and create JWTs
privateKey, err := rsa.GenerateKey(rand.Reader, 2048)
if err != nil {
@ -72,14 +80,13 @@ func (s *Server) StartIdentityProvider() error {
w.Write(b)
})
// TODO: create .well-known openid configuration
r.HandleFunc("/.well-known/openid-configuration", func(w http.ResponseWriter, r *http.Request) {
// create config JSON to serve with GET request
config := map[string]any{
"issuer": "http://" + s.Addr,
"authorization_endpoint": "http://" + s.Addr + "/oauth/authorize",
"token_endpoint": "http://" + s.Addr + "/oauth/token",
"jwks_uri": "http://" + s.Addr + "/.well-known/jwks.json",
"authorization_endpoint": eps.Authorization,
"token_endpoint": eps.Token,
"jwks_uri": eps.JwksUri,
"scopes_supported": []string{
"openid",
"profile",

View file

@ -18,16 +18,17 @@ import (
type Server struct {
*http.Server
Host string `yaml:"host"`
Port int `yaml:"port"`
Callback string `yaml:"callback"`
State string `yaml:"state"`
Issuer Issuer `yaml:"issuer"`
Host string `yaml:"host"`
Port int `yaml:"port"`
Callback string `yaml:"callback"`
State string `yaml:"state"`
Issuer IdentityProviderServer `yaml:"issuer"`
}
type Issuer struct {
Host string `yaml:"host"`
Port int `yaml:"port"`
type IdentityProviderServer struct {
Host string `yaml:"host"`
Port int `yaml:"port"`
Endpoints oidc.Endpoints `yaml:"endpoints"`
}
type ServerParams struct {