mirror of
https://github.com/zitadel/zitadel.git
synced 2024-12-13 19:44:21 +00:00
fix: correctly set user agent / fingerprint id on user sessions (#8231)
# Which Problems Are Solved
When we switched to V2 tokens (#7822), the user agent was incorrectly
set for sessions created though the login UI.
Additionally, when calling the ListMyUserSessions from the AuthService,
any session without the fingerprint ID (e.g. created through the session
API) would be listed.
# How the Problems Are Solved
- Use the intended ID of the user agent (fingerprint)
- Ignore empty user agent IDs when listing the user sessions
# Additional Changes
None.
# Additional Context
- relates #7822
- closes #8213
(cherry picked from commit 08a75635d2
)
This commit is contained in:
parent
9a9753a911
commit
d04f208486
@ -555,7 +555,7 @@ func (s *Server) authResponseToken(authReq *AuthRequest, authorizer op.Authorize
|
||||
authReq.AuthTime,
|
||||
authReq.GetNonce(),
|
||||
authReq.PreferredLanguage,
|
||||
authReq.BrowserInfo.ToUserAgent(),
|
||||
authReq.ToUserAgent(),
|
||||
domain.TokenReasonAuthRequest,
|
||||
nil,
|
||||
slices.Contains(scope, oidc.ScopeOfflineAccess),
|
||||
|
@ -81,7 +81,7 @@ func (s *Server) codeExchangeV1(ctx context.Context, client *Client, req *oidc.A
|
||||
authReq.AuthTime,
|
||||
authReq.GetNonce(),
|
||||
authReq.PreferredLanguage,
|
||||
authReq.BrowserInfo.ToUserAgent(),
|
||||
authReq.ToUserAgent(),
|
||||
domain.TokenReasonAuthRequest,
|
||||
nil,
|
||||
slices.Contains(scope, oidc.ScopeOfflineAccess),
|
||||
|
@ -162,7 +162,7 @@ func (l *Login) handleDeviceAuthAction(w http.ResponseWriter, r *http.Request) {
|
||||
action := mux.Vars(r)["action"]
|
||||
switch action {
|
||||
case deviceAuthAllowed:
|
||||
_, err = l.command.ApproveDeviceAuth(r.Context(), authDev.DeviceCode, authReq.UserID, authReq.UserOrgID, authReq.UserAuthMethodTypes(), authReq.AuthTime, authReq.PreferredLanguage, authReq.BrowserInfo.ToUserAgent())
|
||||
_, err = l.command.ApproveDeviceAuth(r.Context(), authDev.DeviceCode, authReq.UserID, authReq.UserOrgID, authReq.UserAuthMethodTypes(), authReq.AuthTime, authReq.PreferredLanguage, authReq.ToUserAgent())
|
||||
case deviceAuthDenied:
|
||||
_, err = l.command.CancelDeviceAuth(r.Context(), authDev.DeviceCode, domain.DeviceAuthCanceledDenied)
|
||||
default:
|
||||
|
@ -23,14 +23,15 @@ func BrowserInfoFromRequest(r *net_http.Request) *BrowserInfo {
|
||||
}
|
||||
}
|
||||
|
||||
func (b *BrowserInfo) ToUserAgent() *UserAgent {
|
||||
if b == nil {
|
||||
return nil
|
||||
func (a *AuthRequest) ToUserAgent() *UserAgent {
|
||||
agent := &UserAgent{
|
||||
FingerprintID: &a.AgentID,
|
||||
}
|
||||
return &UserAgent{
|
||||
FingerprintID: &b.UserAgent,
|
||||
IP: b.RemoteIP,
|
||||
Description: &b.UserAgent,
|
||||
Header: b.Header,
|
||||
if a.BrowserInfo == nil {
|
||||
return agent
|
||||
}
|
||||
agent.IP = a.BrowserInfo.RemoteIP
|
||||
agent.Description = &a.BrowserInfo.UserAgent
|
||||
agent.Header = a.BrowserInfo.Header
|
||||
return agent
|
||||
}
|
||||
|
@ -22,6 +22,6 @@ FROM auth.user_sessions s
|
||||
LEFT JOIN projections.users13 u ON s.user_id = u.id AND s.instance_id = u.instance_id
|
||||
LEFT JOIN projections.users13_humans h ON s.user_id = h.user_id AND s.instance_id = h.instance_id
|
||||
LEFT JOIN projections.login_names3 l ON s.user_id = l.user_id AND s.instance_id = l.instance_id AND l.is_primary = true
|
||||
WHERE (s.user_agent_id = $1)
|
||||
WHERE (s.user_agent_id = $1 and s.user_agent_id <> '')
|
||||
AND (s.instance_id = $2)
|
||||
;
|
Loading…
Reference in New Issue
Block a user