"github.com/crewjam/saml"
"github.com/crewjam/saml/samlsp"
+
"go.fuhry.dev/runtime/mtls"
"go.fuhry.dev/runtime/mtls/certutil"
"go.fuhry.dev/runtime/utils/hashset"
}
type SAMLBackend struct {
- Host string `yaml:"host"`
- Port int `yaml:"port"`
- Identity string `yaml:"mtls_id"`
+ Host string `yaml:"host"`
+ Port int `yaml:"port"`
+ Identity string `yaml:"mtls_id"`
+ UsernameHeader string `yaml:"username_header"`
client *http.Client
clientOnce sync.Once
if swa, ok := session.(samlsp.SessionWithAttributes); ok {
attrs := swa.GetAttributes()
- sp.logger.V(3).Debugf("setting origin request header: on-behalf-of: %q", attrs.Get("uid"))
- newReq.Header.Set("on-behalf-of", attrs.Get("uid"))
+ oboHeader := vhost.Backend.UsernameHeader
+ if oboHeader == "" {
+ oboHeader = "on-behalf-of"
+ }
+ sp.logger.V(3).Debugf("setting origin request header: %s: %q", oboHeader, attrs.Get("uid"))
+ newReq.Header.Set(oboHeader, attrs.Get("uid"))
}
if jwts, ok := session.(samlsp.JWTSessionClaims); ok {
"syscall"
"time"
+ "github.com/coreos/go-systemd/daemon"
"gopkg.in/yaml.v3"
"go.fuhry.dev/runtime/http"
server.Addr = *listen
go server.ListenAndServeTLS("", "")
+ daemon.SdNotify(false, daemon.SdNotifyReady)
+
<-ctx.Done()
shutdownCtx, shutdownCancel := context.WithTimeout(context.Background(), 5*time.Second)
defer shutdownCancel()