feature: Improved auth log messages (#476)

This commit is contained in:
James Read 2024-11-14 22:00:08 +00:00 committed by GitHub
parent 13e48dded2
commit 655a7f205d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 49 additions and 8 deletions

View File

@ -155,6 +155,12 @@ message WhoAmIRequest {}
message WhoAmIResponse { message WhoAmIResponse {
string authenticated_user = 1; string authenticated_user = 1;
string usergroup = 2;
string provider = 3;
repeated string acls = 4;
string sid = 5;
} }
message SosReportRequest {} message SosReportRequest {}

View File

@ -30,7 +30,7 @@ type AuthenticatedUser struct {
Provider string Provider string
SID string SID string
acls []string Acls []string
} }
func (u *AuthenticatedUser) IsGuest() bool { func (u *AuthenticatedUser) IsGuest() bool {
@ -166,7 +166,7 @@ func UserFromContext(ctx context.Context, cfg *config.Config) *AuthenticatedUser
"username": ret.Username, "username": ret.Username,
"usergroup": ret.Usergroup, "usergroup": ret.Usergroup,
"provider": ret.Provider, "provider": ret.Provider,
"acls": ret.acls, "acls": ret.Acls,
}).Debugf("UserFromContext") }).Debugf("UserFromContext")
return ret return ret
@ -198,12 +198,12 @@ func UserFromSystem(cfg *config.Config, username string) *AuthenticatedUser {
func buildUserAcls(cfg *config.Config, user *AuthenticatedUser) { func buildUserAcls(cfg *config.Config, user *AuthenticatedUser) {
for _, acl := range cfg.AccessControlLists { for _, acl := range cfg.AccessControlLists {
if slices.Contains(acl.MatchUsernames, user.Username) { if slices.Contains(acl.MatchUsernames, user.Username) {
user.acls = append(user.acls, acl.Name) user.Acls = append(user.Acls, acl.Name)
continue continue
} }
if slices.Contains(acl.MatchUsergroups, user.Usergroup) { if slices.Contains(acl.MatchUsergroups, user.Usergroup) {
user.acls = append(user.acls, acl.Name) user.Acls = append(user.Acls, acl.Name)
continue continue
} }
@ -211,7 +211,7 @@ func buildUserAcls(cfg *config.Config, user *AuthenticatedUser) {
} }
func isACLRelevantToAction(cfg *config.Config, actionAcls []string, acl *config.AccessControlList, user *AuthenticatedUser) bool { func isACLRelevantToAction(cfg *config.Config, actionAcls []string, acl *config.AccessControlList, user *AuthenticatedUser) bool {
if !slices.Contains(user.acls, acl.Name) { if !slices.Contains(user.Acls, acl.Name) {
// If the user does not have this ACL, then it is not relevant // If the user does not have this ACL, then it is not relevant
return false return false

View File

@ -116,6 +116,14 @@ func (api *oliveTinAPI) LocalUserLogin(ctx ctx.Context, req *pb.LocalUserLoginRe
if match { if match {
header := metadata.Pairs("set-user", req.Username) header := metadata.Pairs("set-user", req.Username)
grpc.SendHeader(ctx, header) grpc.SendHeader(ctx, header)
log.WithFields(log.Fields{
"username": req.Username,
}).Info("LocalUserLogin: User logged in successfully.")
} else {
log.WithFields(log.Fields{
"username": req.Username,
}).Warn("LocalUserLogin: User login failed.")
} }
return &pb.LocalUserLoginResponse{ return &pb.LocalUserLoginResponse{
@ -303,7 +311,13 @@ func (api *oliveTinAPI) GetDashboardComponents(ctx ctx.Context, req *pb.GetDashb
res := buildDashboardResponse(api.executor, cfg, user) res := buildDashboardResponse(api.executor, cfg, user)
if len(res.Actions) == 0 { if len(res.Actions) == 0 {
log.Warn("Zero actions found - check that you have some actions defined, with a view permission") log.WithFields(log.Fields{
"username": user.Username,
"usergroup": user.Usergroup,
"provider": user.Provider,
"acls": user.Acls,
"availableActions": len(cfg.Actions),
}).Warn("Zero actions found for user")
} }
log.Tracef("GetDashboardComponents: %v", res) log.Tracef("GetDashboardComponents: %v", res)
@ -364,6 +378,10 @@ func (api *oliveTinAPI) WhoAmI(ctx ctx.Context, req *pb.WhoAmIRequest) (*pb.WhoA
res := &pb.WhoAmIResponse{ res := &pb.WhoAmIResponse{
AuthenticatedUser: user.Username, AuthenticatedUser: user.Username,
Usergroup: user.Usergroup,
Provider: user.Provider,
Sid: user.SID,
Acls: user.Acls,
} }
log.Warnf("usergroup: %v", user.Usergroup) log.Warnf("usergroup: %v", user.Usergroup)

View File

@ -44,9 +44,19 @@ func checkUserPassword(cfg *config.Config, username, password string) bool {
if match { if match {
return true return true
} else {
log.WithFields(log.Fields{
"username": username,
}).Warn("Password does not match for user")
return false
} }
} }
} }
log.WithFields(log.Fields{
"username": username,
}).Warn("Failed to check password for user, as username was not found")
return false return false
} }

View File

@ -24,7 +24,10 @@ func parseLocalUserCookie(req *http.Request) (string, string, string) {
username, ok := localUserSessions[cookieValue] username, ok := localUserSessions[cookieValue]
if !ok { if !ok {
log.Warnf("Could not find local user session: %v", cookieValue) log.WithFields(log.Fields{
"sid": cookieValue,
"provider": "local",
}).Warnf("Stale session")
return "", "", "" return "", "", ""
} }

View File

@ -261,7 +261,11 @@ func parseOAuth2Cookie(r *http.Request) (string, string, string) {
serverState, found := registeredStates[cookie.Value] serverState, found := registeredStates[cookie.Value]
if !found { if !found {
log.Warnf("Failed to find OAuth2 state: %v", cookie.Value) log.WithFields(log.Fields{
"sid": cookie.Value,
"provider": "oauth2",
}).Warnf("Stale session")
return "", "", cookie.Value return "", "", cookie.Value
} }