[v10.1.x] Auth: id response header (#78883)
Auth: id response header (#77871)
* Add config options for identity id response header
* Add feature to add identity id response header to all responses
* Use util.SplitString
(cherry picked from commit 21f94c5b78)
This commit is contained in:
@@ -249,6 +249,11 @@ func (h *ContextHandler) Middleware(next http.Handler) http.Handler {
|
||||
}
|
||||
}
|
||||
|
||||
if h.Cfg.IDResponseHeaderEnabled && reqContext.SignedInUser != nil {
|
||||
namespace, id := getNamespaceAndID(reqContext.SignedInUser)
|
||||
reqContext.Resp.Before(h.addIDHeaderEndOfRequestFunc(namespace, id))
|
||||
}
|
||||
|
||||
next.ServeHTTP(w, r)
|
||||
})
|
||||
}
|
||||
@@ -584,6 +589,42 @@ func (h *ContextHandler) initContextWithToken(reqContext *contextmodel.ReqContex
|
||||
return true
|
||||
}
|
||||
|
||||
// TODO(kalleep): Refactor to user identity.Requester interface and methods after we have backported this
|
||||
func getNamespaceAndID(user *user.SignedInUser) (string, string) {
|
||||
var namespace, id string
|
||||
if user.UserID > 0 && user.IsServiceAccount {
|
||||
id = strconv.Itoa(int(user.UserID))
|
||||
namespace = "service-account"
|
||||
} else if user.UserID > 0 {
|
||||
id = strconv.Itoa(int(user.UserID))
|
||||
namespace = "user"
|
||||
} else if user.ApiKeyID > 0 {
|
||||
id = strconv.Itoa(int(user.ApiKeyID))
|
||||
namespace = "api-key"
|
||||
}
|
||||
|
||||
return namespace, id
|
||||
}
|
||||
|
||||
func (h *ContextHandler) addIDHeaderEndOfRequestFunc(namespace, id string) web.BeforeFunc {
|
||||
return func(w web.ResponseWriter) {
|
||||
if w.Written() {
|
||||
return
|
||||
}
|
||||
|
||||
if namespace == "" || id == "" {
|
||||
return
|
||||
}
|
||||
|
||||
if _, ok := h.Cfg.IDResponseHeaderNamespaces[namespace]; !ok {
|
||||
return
|
||||
}
|
||||
|
||||
headerName := fmt.Sprintf("%s-Identity-Id", h.Cfg.IDResponseHeaderPrefix)
|
||||
w.Header().Add(headerName, fmt.Sprintf("%s:%s", namespace, id))
|
||||
}
|
||||
}
|
||||
|
||||
func (h *ContextHandler) deleteInvalidCookieEndOfRequestFunc(reqContext *contextmodel.ReqContext) web.BeforeFunc {
|
||||
return func(w web.ResponseWriter) {
|
||||
if h.features.IsEnabled(featuremgmt.FlagClientTokenRotation) {
|
||||
|
||||
Reference in New Issue
Block a user