feat: enable JWT auth from a header (#547)
This commit is contained in:
parent
709d6ac2ad
commit
8865331da2
|
|
@ -107,6 +107,7 @@ type Config struct {
|
||||||
ShowNewVersions bool
|
ShowNewVersions bool
|
||||||
EnableCustomJs bool
|
EnableCustomJs bool
|
||||||
AuthJwtCookieName string
|
AuthJwtCookieName string
|
||||||
|
AuthJwtHeader string
|
||||||
AuthJwtAud string
|
AuthJwtAud string
|
||||||
AuthJwtDomain string
|
AuthJwtDomain string
|
||||||
AuthJwtCertsURL string
|
AuthJwtCertsURL string
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@ import (
|
||||||
"google.golang.org/protobuf/encoding/protojson"
|
"google.golang.org/protobuf/encoding/protojson"
|
||||||
"google.golang.org/protobuf/reflect/protoreflect"
|
"google.golang.org/protobuf/reflect/protoreflect"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"strings"
|
||||||
|
|
||||||
apiv1 "github.com/OliveTin/OliveTin/gen/grpc/olivetin/api/v1"
|
apiv1 "github.com/OliveTin/OliveTin/gen/grpc/olivetin/api/v1"
|
||||||
|
|
||||||
|
|
@ -53,6 +54,12 @@ func parseRequestMetadata(ctx context.Context, req *http.Request) metadata.MD {
|
||||||
provider := "unknown"
|
provider := "unknown"
|
||||||
sid := ""
|
sid := ""
|
||||||
|
|
||||||
|
if cfg.AuthJwtHeader != "" {
|
||||||
|
// JWTs in the Authorization header are usually prefixed with "Bearer " which is not part of the JWT token.
|
||||||
|
username, usergroup = parseJwt(strings.TrimPrefix(req.Header.Get(cfg.AuthJwtHeader), "Bearer "))
|
||||||
|
provider = "jwt-header"
|
||||||
|
}
|
||||||
|
|
||||||
if cfg.AuthJwtCookieName != "" {
|
if cfg.AuthJwtCookieName != "" {
|
||||||
username, usergroup = parseJwtCookie(req)
|
username, usergroup = parseJwtCookie(req)
|
||||||
provider = "jwt-cookie"
|
provider = "jwt-cookie"
|
||||||
|
|
|
||||||
|
|
@ -137,7 +137,11 @@ func parseJwtCookie(request *http.Request) (string, string) {
|
||||||
return "", ""
|
return "", ""
|
||||||
}
|
}
|
||||||
|
|
||||||
claims, err := getClaimsFromJwtToken(cookie.Value)
|
return parseJwt(cookie.Value)
|
||||||
|
}
|
||||||
|
|
||||||
|
func parseJwt(token string) (string, string) {
|
||||||
|
claims, err := getClaimsFromJwtToken(token)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Warnf("jwt claim error: %+v", err)
|
log.Warnf("jwt claim error: %+v", err)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue