dont include groups in JWT
continuous-integration/drone/push Build is passing

This commit is contained in:
Nathan Coad
2026-04-21 14:54:19 +10:00
parent 35840697fa
commit fb7e9bdca4
3 changed files with 20 additions and 4 deletions
+4 -3
View File
@@ -102,9 +102,10 @@ func (s *JWTService) IssueToken(subject string, roles []string, groups []string)
now := s.now().UTC() now := s.now().UTC()
claims := Claims{ claims := Claims{
Subject: subject, Subject: subject,
Roles: compactTrimmedStrings(roles), Roles: compactTrimmedStrings(roles),
Groups: compactTrimmedStrings(groups), // Intentionally omit LDAP groups from JWTs; role claims are sufficient for authorization.
Groups: nil,
Issuer: s.issuer, Issuer: s.issuer,
Audience: s.audience, Audience: s.audience,
IssuedAt: now.Unix(), IssuedAt: now.Unix(),
+15
View File
@@ -57,6 +57,21 @@ func TestIssueAndVerifyTokenRoundTrip(t *testing.T) {
if issuedClaims.ID == "" { if issuedClaims.ID == "" {
t.Fatal("expected jti to be populated") t.Fatal("expected jti to be populated")
} }
if len(issuedClaims.Groups) != 0 {
t.Fatalf("expected groups to be omitted from issued claims, got %#v", issuedClaims.Groups)
}
parts := strings.Split(token, ".")
if len(parts) != 3 {
t.Fatalf("expected jwt to have 3 parts, got %d", len(parts))
}
payloadJSON, err := base64.RawURLEncoding.DecodeString(parts[1])
if err != nil {
t.Fatalf("failed to decode jwt payload: %v", err)
}
if strings.Contains(string(payloadJSON), `"groups"`) {
t.Fatalf("expected jwt payload to omit groups claim, got payload: %s", string(payloadJSON))
}
verifiedClaims, err := svc.VerifyToken(token) verifiedClaims, err := svc.VerifyToken(token)
if err != nil { if err != nil {
+1 -1
View File
@@ -217,7 +217,7 @@ func (h *Handler) AuthLogin(w http.ResponseWriter, r *http.Request) {
if subject == "" { if subject == "" {
subject = username subject = username
} }
token, claims, err := jwtSvc.IssueToken(subject, roles, identity.Groups) token, claims, err := jwtSvc.IssueToken(subject, roles, nil)
if err != nil { if err != nil {
h.Logger.Error("failed to issue auth token", "username", username, "error", err) h.Logger.Error("failed to issue auth token", "username", username, "error", err)
audit.LogAuthEvent(h.Logger, r, "login", "error", "reason", "token_issue_failed", "username", username, "error", err) audit.LogAuthEvent(h.Logger, r, "login", "error", "reason", "token_issue_failed", "username", username, "error", err)