[v11.0.x] JWT: Find login and email claims with JMESPATH (#86357)
JWT: Find login and email claims with JMESPATH (#85305)
* add function to static function to static service
* find email and login claims with jmespath
* rename configuration files
* Replace JWTClaims struct for map
* check for subclaims error
(cherry picked from commit e4250a72db)
Co-authored-by: linoman <2051016+linoman@users.noreply.github.com>
This commit is contained in:
co-authored by
linoman
parent
ca94886e18
commit
6f6667d89c
@@ -65,7 +65,7 @@ func sanitizeJWT(jwtToken string) string {
|
||||
return strings.ReplaceAll(jwtToken, string(base64.StdPadding), "")
|
||||
}
|
||||
|
||||
func (s *AuthService) Verify(ctx context.Context, strToken string) (JWTClaims, error) {
|
||||
func (s *AuthService) Verify(ctx context.Context, strToken string) (map[string]any, error) {
|
||||
s.log.Debug("Parsing JSON Web Token")
|
||||
|
||||
strToken = sanitizeJWT(strToken)
|
||||
@@ -84,7 +84,7 @@ func (s *AuthService) Verify(ctx context.Context, strToken string) (JWTClaims, e
|
||||
|
||||
s.log.Debug("Trying to verify JSON Web Token using a key")
|
||||
|
||||
var claims JWTClaims
|
||||
var claims map[string]any
|
||||
for _, key := range keys {
|
||||
if err = token.Claims(key, &claims); err == nil {
|
||||
break
|
||||
|
||||
@@ -2,28 +2,24 @@ package jwt
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/grafana/grafana/pkg/util"
|
||||
)
|
||||
|
||||
type JWTClaims util.DynMap
|
||||
|
||||
type JWTService interface {
|
||||
Verify(ctx context.Context, strToken string) (JWTClaims, error)
|
||||
Verify(ctx context.Context, strToken string) (map[string]any, error)
|
||||
}
|
||||
|
||||
type FakeJWTService struct {
|
||||
VerifyProvider func(context.Context, string) (JWTClaims, error)
|
||||
VerifyProvider func(context.Context, string) (map[string]any, error)
|
||||
}
|
||||
|
||||
func (s *FakeJWTService) Verify(ctx context.Context, token string) (JWTClaims, error) {
|
||||
func (s *FakeJWTService) Verify(ctx context.Context, token string) (map[string]any, error) {
|
||||
return s.VerifyProvider(ctx, token)
|
||||
}
|
||||
|
||||
func NewFakeJWTService() *FakeJWTService {
|
||||
return &FakeJWTService{
|
||||
VerifyProvider: func(ctx context.Context, token string) (JWTClaims, error) {
|
||||
return JWTClaims{}, nil
|
||||
VerifyProvider: func(ctx context.Context, token string) (map[string]any, error) {
|
||||
return map[string]any{}, nil
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
@@ -52,7 +52,7 @@ func (s *AuthService) initClaimExpectations() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *AuthService) validateClaims(claims JWTClaims) error {
|
||||
func (s *AuthService) validateClaims(claims map[string]any) error {
|
||||
var registeredClaims jwt.Claims
|
||||
for key, value := range claims {
|
||||
switch key {
|
||||
|
||||
Reference in New Issue
Block a user