diff --git a/lib/events/api.go b/lib/events/api.go index fd53f60c56165..bd246b2dbb2cb 100644 --- a/lib/events/api.go +++ b/lib/events/api.go @@ -643,6 +643,11 @@ const ( // Tokens are spent in exchange for a single on-behalf-of device // authentication attempt. DeviceWebTokenCreateEvent = "device.webtoken.create" + // DeviceAuthenticateConfirmEvent is emitted when a device web authentication + // attempt is confirmed (via the ConfirmDeviceWebAuthentication RPC). + // A confirmed web authentication means the WebSession itself now holds + // augmented TLS and SSH certificates. + DeviceAuthenticateConfirmEvent = "device.authenticate.confirm" // BotJoinEvent is emitted when a bot joins BotJoinEvent = "bot.join" diff --git a/lib/events/codes.go b/lib/events/codes.go index d0f9d79fd8ae9..8be9e27432fd8 100644 --- a/lib/events/codes.go +++ b/lib/events/codes.go @@ -466,6 +466,8 @@ const ( DeviceUpdateCode = "TV007I" // DeviceWebTokenCreateCode is the device web token creation code. DeviceWebTokenCreateCode = "TV008I" + // DeviceAuthenticateConfirmCode is the device authentication confirm code. + DeviceAuthenticateConfirmCode = "TV009I" // LoginRuleCreateCode is the login rule create code. LoginRuleCreateCode = "TLR00I" diff --git a/lib/events/dynamic.go b/lib/events/dynamic.go index bca00c00ffa1f..05dcc25e7b453 100644 --- a/lib/events/dynamic.go +++ b/lib/events/dynamic.go @@ -251,7 +251,8 @@ func FromEventFields(fields EventFields) (events.AuditEvent, error) { DeviceEnrollEvent, DeviceAuthenticateEvent, DeviceEnrollTokenCreateEvent, - DeviceWebTokenCreateEvent: + DeviceWebTokenCreateEvent, + DeviceAuthenticateConfirmEvent: e = &events.DeviceEvent2{} case LockCreatedEvent: e = &events.LockCreate{} diff --git a/web/packages/teleport/src/Audit/EventList/EventTypeCell.tsx b/web/packages/teleport/src/Audit/EventList/EventTypeCell.tsx index 7895cd9dbf71f..332efffedb31c 100644 --- a/web/packages/teleport/src/Audit/EventList/EventTypeCell.tsx +++ b/web/packages/teleport/src/Audit/EventList/EventTypeCell.tsx @@ -200,6 +200,7 @@ const EventIconMap: Record = { [eventCodes.DEVICE_ENROLL_TOKEN_SPENT]: Icons.Info, [eventCodes.DEVICE_UPDATE]: Icons.Info, [eventCodes.DEVICE_WEB_TOKEN_CREATE]: Icons.Info, + [eventCodes.DEVICE_AUTHENTICATE_CONFIRM]: Icons.Info, [eventCodes.MFA_DEVICE_ADD]: Icons.Info, [eventCodes.MFA_DEVICE_DELETE]: Icons.Info, [eventCodes.BILLING_CARD_CREATE]: Icons.CreditCard, diff --git a/web/packages/teleport/src/Audit/__snapshots__/Audit.story.test.tsx.snap b/web/packages/teleport/src/Audit/__snapshots__/Audit.story.test.tsx.snap index f9df398c52daa..4a4703479b05f 100644 --- a/web/packages/teleport/src/Audit/__snapshots__/Audit.story.test.tsx.snap +++ b/web/packages/teleport/src/Audit/__snapshots__/Audit.story.test.tsx.snap @@ -406,12 +406,12 @@ exports[`list of all events 1`] = ` - - 234 + 237 of - 234 + 237 + + + + +
+ + + + + + + + Device Web Authentication Confirmed +
+ + + User [llama] has failed to confirm device web authentication + + + 2024-04-08T19:35:48.1Z + + + + + + + +
+ + + + + + + + Device Authenticated +
+ + + User [llama] has successfully authenticated their device + + + 2024-04-08T19:34:48.1Z + + + + + + success || (status && status.success) + ? `User [${user}] has confirmed device web authentication` + : `User [${user}] has failed to confirm device web authentication`, + }, [eventCodes.X11_FORWARD]: { type: 'x11-forward', desc: 'X11 Forwarding Requested', diff --git a/web/packages/teleport/src/services/audit/types.ts b/web/packages/teleport/src/services/audit/types.ts index b7acfcaa780db..15ec80def7e90 100644 --- a/web/packages/teleport/src/services/audit/types.ts +++ b/web/packages/teleport/src/services/audit/types.ts @@ -125,6 +125,7 @@ export const eventCodes = { DEVICE_AUTHENTICATE: 'TV006I', DEVICE_UPDATE: 'TV007I', DEVICE_WEB_TOKEN_CREATE: 'TV008I', + DEVICE_AUTHENTICATE_CONFIRM: 'TV009I', EXEC_FAILURE: 'T3002E', EXEC: 'T3002I', GITHUB_CONNECTOR_CREATED: 'T8000I', @@ -1248,6 +1249,9 @@ export type RawEvents = { [eventCodes.DEVICE_WEB_TOKEN_CREATE]: RawDeviceEvent< typeof eventCodes.DEVICE_WEB_TOKEN_CREATE >; + [eventCodes.DEVICE_AUTHENTICATE_CONFIRM]: RawDeviceEvent< + typeof eventCodes.DEVICE_AUTHENTICATE_CONFIRM + >; [eventCodes.UNKNOWN]: RawEvent< typeof eventCodes.UNKNOWN, {