IDforwarding: forward signed id to plugins (#75651)
* Plugins: Add client middlware that forwards the signed grafana id token if present * DsProxy: Set grafana id header if id token exists * Add util function to apply id token to header * Only add id forwarding middleware if feature toggle is enabled * Add feature toggles to ds proxy and check if id forwarding is enabled * Clean up test setup * Change to use backend.ForwardHTTPHeaders interface * PluginProxy: Forward signed identity when feature toggle is enabled * PluginProxy: forrward signed id header
This commit is contained in:
@@ -10,6 +10,7 @@ import (
|
||||
"github.com/grafana/grafana/pkg/infra/tracing"
|
||||
"github.com/grafana/grafana/pkg/plugins"
|
||||
contextmodel "github.com/grafana/grafana/pkg/services/contexthandler/model"
|
||||
"github.com/grafana/grafana/pkg/services/featuremgmt"
|
||||
"github.com/grafana/grafana/pkg/services/pluginsintegration/pluginsettings"
|
||||
"github.com/grafana/grafana/pkg/services/secrets"
|
||||
"github.com/grafana/grafana/pkg/setting"
|
||||
@@ -29,12 +30,13 @@ type PluginProxy struct {
|
||||
secretsService secrets.Service
|
||||
tracer tracing.Tracer
|
||||
transport *http.Transport
|
||||
features featuremgmt.FeatureToggles
|
||||
}
|
||||
|
||||
// NewPluginProxy creates a plugin proxy.
|
||||
func NewPluginProxy(ps *pluginsettings.DTO, routes []*plugins.Route, ctx *contextmodel.ReqContext,
|
||||
proxyPath string, cfg *setting.Cfg, secretsService secrets.Service, tracer tracing.Tracer,
|
||||
transport *http.Transport) (*PluginProxy, error) {
|
||||
transport *http.Transport, features featuremgmt.FeatureToggles) (*PluginProxy, error) {
|
||||
return &PluginProxy{
|
||||
ps: ps,
|
||||
pluginRoutes: routes,
|
||||
@@ -44,6 +46,7 @@ func NewPluginProxy(ps *pluginsettings.DTO, routes []*plugins.Route, ctx *contex
|
||||
secretsService: secretsService,
|
||||
tracer: tracer,
|
||||
transport: transport,
|
||||
features: features,
|
||||
}, nil
|
||||
}
|
||||
|
||||
@@ -156,6 +159,10 @@ func (proxy PluginProxy) director(req *http.Request) {
|
||||
|
||||
proxyutil.ApplyUserHeader(proxy.cfg.SendUserHeader, req, proxy.ctx.SignedInUser)
|
||||
|
||||
if proxy.features.IsEnabled(featuremgmt.FlagIdForwarding) {
|
||||
proxyutil.ApplyForwardIDHeader(req, proxy.ctx.SignedInUser)
|
||||
}
|
||||
|
||||
if err := addHeaders(&req.Header, proxy.matchedRoute, data); err != nil {
|
||||
proxy.ctx.JsonApiErr(500, "Failed to render plugin headers", err)
|
||||
return
|
||||
|
||||
Reference in New Issue
Block a user