Agilicus Product Guide: Streamline Your Workflow and Boost Productivity. Illustration of a person happily managing tasks on a digital to-do list.

Authentication Audit

The Authentication audit provides a trail of all attempts by users (or service accounts) to prove their identity. This authentication process can have multiple steps, depending on authentication rules and upstream identity providers.

Authentication Audit

c3d3c97a-image

The Authentication audit provides a trail of all attempts by users (or service accounts) to prove their identity. This authentication process can have multiple steps, depending on authentication rules and upstream identity providers.

Not all stages will have all fields available. Each step has a timestamp (in UTC), an ‘Email’ (user), ‘Source IP’, Stage, Event, and Application Name (authentication client).

Authentication audits are also available via the API where additional columns may be extracted.

For the meaning of each stage and result, see How do I read the authentication audit?.

Authentication audit and Access audit

The Authentication audit records identity events: who signed in, how they proved the identity, and whether the sign-in succeeded. It is not a record of resource usage. A successful sign-in creates a session, and each application or resource the user opens receives its own access token, scoped to that resource. The Authentication audit records the sign-in and the token issuance steps. The Access audit records what the user did with those tokens.

Use the Authentication audit to answer who signed in. Use the Access audit to answer who reached which resource, from where, and whether it was allowed. The Access audit carries the resource name and resource type, the user, the token, the session and the source address, and, for sessions through a connector, the connector itself.

QuestionAuditAPI
Who signed in, and how?Authentication audit/v1/auth_audits
Who reached which resource, and was it allowed?Access audit/v1/audits
Which sessions are active, and can I revoke one?Sessions/v1/sessions

Why the source IP changes within one sign-in

Each record’s source_ip is the address of the host that made that particular request. Opening an application is a short pipeline, not a single request: the browser starts an OpenID Connect flow, Agilicus evaluates policy and issues an authorisation code, then a client exchanges that code for a token. When the exchange happens in the browser, the record carries the user’s address. When a connector or the Agilicus edge performs the exchange on the user’s behalf, the record carries that component’s address.

Both records belong to the same sign-in. Correlate them with request_id, which groups the steps of one attempt, and with session, which ties every token back to the original sign-in. A change of address does not indicate a second user or a second login.

This is the authorisation code grant from OAuth 2.0, often called three-legged OAuth. The three parties are the user, the client and the authorisation server. For a web application, the Connector runs the OpenID Connect proxy and acts as the client, so the final leg, the code exchange at the token endpoint, is a server-to-server request from the Connector. That is why the Token record carries the Connector’s address while the earlier records carry the user’s. For the protocol details, see section 3 of OpenID Connect Core.

Application name is the authentication client

The application_name and client_id fields identify the OpenID Connect client of the application being opened, not an arbitrary resource. Agilicus creates one client per web application automatically, and names it after the application, so a client identifier can look like a resource name. The built-in clients are profile, agilicus-builtin-portal and agilicus-builtin-wscat.

A desktop or Secure Shell (SSH) resource launched from Profile does not have its own OpenID Connect client, so it does not appear in this audit. Profile asks the Applications service for a client configuration. Applications mints a token scoped to that one resource, and the resulting session is recorded in the Access audit.

Why one user produces many authentication records

A web application is an OpenID Connect client, so opening it starts a sign-in flow. When the user already holds a valid session, Agilicus completes that flow without sending the user back to the upstream identity provider. The flow still writes Authentication Request, Policy Evaluation, CodeIssued and Token records, which is why one user can produce many records in a day without re-entering credentials. The upstream identity provider appears only when policy requires it, for example when the session has expired or when an application client is configured not to share sessions.

QuestionAuditAPI
Who signed in, and how?Authentication audit/v1/auth_audits
Who reached which resource, and was it allowed?Access audit/v1/audits
Which sessions are active, and can I revoke one?Sessions/v1/sessions

user_id: stringThe system-local id of the user performing the action.
upstream_user_id: stringThe id of the user in the upstream system, if available.
org_id: stringThe id of the organisation of the issuer against which the user is authenticating.
org_name: stringThe name of the organisation of the issuer against which the user is authenticating.
time: date-timethe time at which the record was generated.
event: stringThe event which generated the record. The meaning of the event depends on the stage where it occured.
source_ip: stringThe IP address of the host initiating the action
token_id: stringThe id of the token issued or reissued as part of the authentication.
trace_id: stringA correlation ID associated with requests related to this event
session: stringThe session associated with tokens related to this event. This can be used to tie the actions undertaking by requests bearing tokens with the same session back to the authentication events which created the tokens.
issuer: stringThe issuer the user logged in to.
client_id: stringThe client id of the web application, client, etc. that the user is logging in with. Note that this is not the id of the IssuerClient, but rather the id presented to the authentication system to identify that client. This corresponds to name in the IssuerClient.
application_name: stringThe name of the application within the system the user is logging in to.
login_org_id: stringThe id of the organisation that the user is logging in to. Note that this is disctinct from the org_id field, which is tied to the issuer. This id is tied to the application.
login_org_name: stringThe name of the organisation that the user is logging in to. This corresponds to login_org_id.
upstream_idp: stringThe name of the identity provider proving the identity of the user.
stage: stringThe stage of the login process. This identifies where in the pipeline the event was generated.
user_agent: stringThe user agent of the client used to perform the login.