OpenAM Audit Logging OpenAM writes log messages generated from audit events triggered by its components, instances, and other ForgeRock-based stack products. Audit Log Format This chapter presents the audit log format for each topic-based file, event names, and audit constants used in its log messages. Access Log Format Access Log Format Schema Property Description _id Specifies a universally unique identifier (UUID) for the message object, such as a568d4fe-d655-49a8-8290-bfc02095bec9-491. timestamp Specifies the timestamp when OpenAM logged the message, in UTC format to millisecond precision: yyyy-MM-ddTHH:mm:ss.msZ. For example: 2015-11-14T00:16:04.653Z eventName Specifies the name of the audit event. For example, AM-ACCESS-ATTEMPT and AM-ACCESS-OUTCOME. transactionId Specifies the UUID of the transaction, which identifies an external request when it comes into the system boundary. Any events generated while handling that request will be assigned that transaction ID, so that you may see the same transaction ID even for different audit event topics. For example, 9c9e8d5c-2941-4e61-9c3c-8a990088e801. OpenAM supports a feature where trusted OpenAM deployment with multiple instances, components, and ForgeRock stack products can propagate the transaction ID through each call across the stack. OpenAM reads the `X-ForgeRock-TransactionId` HTTP header and appends an integer to the transaction ID. Note that this feature is disabled by default. When enabled, this feature should filter the `X-ForgeRock-TransactionId` HTTP header for connections from untrusted sources. userid Specifies the universal identifier for authenticated users. For example, id=scarter,ou=user,o=shop,ou=services,dc=example,dc=com. trackingIds Specifies a unique random string generated as an alias for each OpenAM session ID and OAuth 2.0 token. In releases prior to OpenAM 13.0.0, the contextId log property used a random string as an alias for the session ID. The trackingIds property also uses an alias when referring to session IDs, for example, [ "45b17894529cf74301" ]. OpenAM 13.0.0 extends this property to handle OAuth 2.0 tokens. In this case, whenever OpenAM generates an access or grant token, it also generates unique random value and logs it as an alias. In this way, it is possible to trace back an access token back to its originating grant token, trace the grant token back to the session in which it was created, and then trace how the session was authenticated. An example of a `trackingIds` property in an OAuth 2.0/ OpenID Connect 1.0 environment is: `[ "1979edf68543ead001", "8878e51a-f2aa-464f-b1cc-b12fd6daa415", "3df9a5c3-8d1e-4ee3-93d6-b9bbe58163bc" ]` server.ip Specifies the IP address of the OpenAM server. For example, 127.0.0.1. server.port Specifies the port number used by the OpenAM server. For example, 8080. client.ip Specifies the client IP address. client.port Specifies the client port number. request.protocol Specifies the protocol associated with the request operation. Possible values: CREST and PLL. request.operation Specifies the request operation. For CREST operations, possible values: READ, ACTION, QUERY. For PLL operations, possible values: LoginIndex, SubmitRequirements, GetSession, REQUEST_ADD_POLICY_LISTENER. request.detail Specifies the detailed information about the request operation. For example, {"action":"idFromSession"}, {"action":"validateGoto"}, {"action":"validate"}, {"action":"logout"}, {"action":"schema"}, {"action":"template"}. http.request.secure Specifies if the request was sent over secure HTTP. For example, true or false. http.request.method Specifies the HTTP method requested by the client. For example, GET, POST, PUT. http.request.path Specifies the path of the HTTP request. For example, http://forgerock-am0.int.openrock.org:8080/openam/json/authenticate. http.request.queryParameters Specifies the HTTP query parameter string. For example, { "_action": [ "idFromSession" ] }, { "_queryFilter": [ "true" ] }, { "_action": [ "validate" ] }, { "_action": [ "logout" ] }, { "realm": [ "/shop" ] }, { "_action": [ "validateGoto" ] }. http.request.headers Specifies the HTTP header for the request. For example, (Note: Line feeds added for readability purposes): { "accept": [ "application/json, text/javascript, /; q=0.01" ], "Accept-API-Version": [ "protocol=1.0" ], "accept-encoding": [ "gzip, deflate" ], "accept-language": [ "en-US;q=1,en;q=0.9" ], "cache-control": [ "no-cache" ], "connection": [ "Keep-Alive" ], "content-length": [ "0" ], "host": [ "forgerock-am.openrock.org" ], "pragma": [ "no-cache" ], "referer": [ "https://forgerock-am.openrock.org/openam/XUI/" ], "user-agent": [ "Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Firefox/31.0" ], "x-nosession": [ "true" ], "x-requested-with": [ "XMLHttpRequest" ], "x-username": [ "anonymous" ] } http.request.cookies Not used. http.response.headers Specifies the HTTP header for the response. response.status Specifies the response status of the request. Normally, SUCCESS, FAILURE, or null. response.statusCode Specifies the response status code, depending on the protocol. For CREST, HTTP failure codes are displayed but not HTTP success codes. For PLL endpoints, PLL error codes are displayed. response.detail Specifies the message associated with response.statusCode. For example, the response.statusCode of 401 has a response.detail of { "reason": "Unauthorized" }. response.elapsedTime Specifies the time to execute the access event, usually in millisecond precision. response.elapsedTimeUnits Specifies the elapsed time units of the response. For example, MILLISECONDS. component Specifies the OpenAM service utilized. For example, Server Info, Users, Config, Session, Authentication, Policy, OAuth. realm Specifies the realm where the operation occurred. For example, the Top Level Realm ("/“) or the sub-realm name (”/shop"). Activity Log Format Activity Log Format Property Description _id Specifies a universally unique identifier (UUID) for the message object, such as a568d4fe-d655-49a8-8290-bfc02095bec9-487. timestamp Specifies the timestamp when OpenAM logged the message, in UTC format to millisecond precision: yyyy-MM-ddTHH:mm:ss.msZ. For example: 2015-11-14T00:16:04.652Z eventName Specifies the name of the audit event. For example, AM-SESSION_CREATED, AM-SESSION-LOGGED_OUT. transactionId Specifies the UUID of the transaction, which identifies an external request when it comes into the system boundary. Any events generated while handling that request will be assigned that transaction ID, so that you may see the same transaction ID for same even for different audit event topics. For example, 9c9e8d5c-2941-4e61-9c3c-8a990088e801. userId Specifies the universal identifier for authenticated users. For example, id=scarter,ou=user,o=shop,ou=services,dc=example,dc=com. trackingIds Specifies an array containing a random context ID that identifies the session and a random string generated from an OAuth 2.0/OpenID Connect 1.0 flow that could track an access token ID or an grant token ID. For example, [ "45b17894529cf74301" ]. runAs Specifies the user to run the activity as. May be used in delegated administration. For example, id=dsameuser,ou=user,dc=example,dc=com. objectId Specifies the identifier of an object that has been created, updated, or deleted. For OpenAM 13.0.0, only session changes are recorded, so that the session trackingId is used in this field. For example, [ "45b17894529cf74301" ] operation Specifies the state change operation invoked: CREATE, MODIFY, or DELETE. before Not used. after Not used. changedFields Not used. revision Not used. component Specifies the OpenAM service utilized. Normally, SESSION. realm Specifies the realm where the operation occurred. For example, the Top Level Realm ("/“) or the sub-realm name (”/shop"). Authentication Log Format Authentication Log Format Property Description _id Specifies a universally unique identifier (UUID) for the message object, such as a568d4fe-d655-49a8-8290-bfc02095bec9-485. timestamp Specifies the timestamp when OpenAM logged the message, in UTC format to millisecond precision: yyyy-MM-ddTHH:mm:ss.msZ. For example: 2015-11-14T00:16:04.640Z eventName Specifies the name of the audit event. For example, AM-LOGOUT, AM-LOGIN-MODULE-COMPLETED, AM-LOGIN-CHAIN-COMPLETED. transactionId Specifies the UUID of the transaction, which identifies an external request when it comes into the system boundary. Any events generated while handling that request will be assigned that transaction ID, so that you may see the same transaction ID for same even for different audit event topics. For example, 9c9e8d5c-2941-4e61-9c3c-8a990088e801. userId Specifies the universal identifier for authenticated users. For example, id=scarter,ou=user,o=shop,ou=services,dc=example,dc=com. trackingIds Specifies an array containing a random context ID that identifies the session and a random string generated from an OAuth 2.0/OpenID Connect 1.0 flow that could track an access token ID or an grant token ID. For example, [ "45b17894529cf74301" ]. result Specifies the outcome of a single authentication module within a chain, either SUCCESSFUL or FAILED. principal Specifies the array of accounts used to authenticate, such as [ "amadmin" ], [ "scarter" ]. context Not used entries Specifies the JSON representation of the details of an authentication module or chain. OpenAM creates an event as each module completes and a final event at the end of the chain. For example, [ { "moduleId": "DataStore", "info": { "moduleClass": "DataStore", "ipAddress": "127.0.0.1", "moduleName": "DataStore", "authLevel": "0" } } ] component Specifies the OpenAM service utilized. Normally, Authentication. realm Specifies the realm where the operation occurred. For example, the Top Level Realm ("/“) or the sub-realm name (”/shop"). Config Log Format Config Log Format Property Description _id Specifies a universally unique identifier (UUID) for the message object. For example, 6a568d4fe-d655-49a8-8290-bfc02095bec9-843. timestamp Specifies the timestamp when OpenAM logged the message, in UTC format to millisecond precision: yyyy-MM-ddTHH:mm:ss.msZ. For example, 2015-11-14T00:21:03.490Z eventName Specifies the name of the audit event. For example, AM-CONFIG-CHANGE. transactionId Specifies the UUID of the transaction, which identifies an external request when it comes into the system boundary. Any events generated while handling that request will be assigned that transaction ID, so that you may see the same transaction ID for different audit event topics. For example, 301d1a6e-67f9-4e45-bfeb-5e4047a8b432. userId Not used. trackingIds Not used. runAs Specifies the user to run the activity as. May be used in delegated administration. For example, id=amadmin,ou=user,dc=example,dc=com. objectId Specifies the identifier of a system object that has been created, modified, or deleted. For example, ou=SamuelTwo,ou=default,ou=OrganizationConfig,ou=1.0, ou=iPlanetAMAuthSAML2Service,ou=services,o=shop,ou=services, dc=example,dc=com. operation Specifies the state change operation invoked: CREATE, MODIFY, or DELETE. before Specifies the JSON representation of the object prior to the activity. For example, { "sunsmspriority":["0"], "objectclass":["top","sunServiceComponent","organizationalUnit"], "ou":["SamuelTwo"],"sunserviceID":["serverconfig"] } after Specifies the JSON representation of the object after the activity. For example, { "sunKeyValue":["forgerock-am-auth-saml2-auth-level=0", "forgerock-am-auth-saml2-meta-alias=/sp", "forgerock-am-auth-saml2-entity-name=http://", "forgerock-am-auth-saml2-authn-context-decl-ref=", "forgerock-am-auth-saml2-force-authn=none", "forgerock-am-auth-saml2-is-passive=none", "forgerock-am-auth-saml2-login-chain=", "forgerock-am-auth-saml2-auth-comparison=none", "forgerock-am-auth-saml2-req-binding= urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect", "forgerock-am-auth-saml2-binding= urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Artifact", "forgerock-am-auth-saml2-authn-context-class-ref=", "forgerock-am-auth-saml2-slo-relay=http://", "forgerock-am-auth-saml2-allow-create=false", "forgerock-am-auth-saml2-name-id-format= urn:oasis:names:tc:SAML:2.0:nameid-format:persistent"," changedFields Specifies the fields that were changed. For example, [ "sunKeyValue" ]. revision Not used. component Not used. realm Specifies the realm where the operation occurred. For example, the Top Level Realm ("/“) or the sub-realm name (”/shop"). Audit Log Event Names The following section presents the predefined names for the audit events: Audit Log Event Names Topic EventName access AM-ACCESS_ATTEMPT access AM-ACCESS-OUTCOME activity AM-SESSION-CREATED activity AM-SESSION-IDLE_TIME_OUT activity AM-SESSION-MAX_TIMED_OUT activity AM-SESSION-LOGGED_OUT activity AM-SESSION-REACTIVATED activity AM-SESSION-DESTROYED activity AM-SESSION-PROPERTY_CHANGED access AM-LOGIN-MODULE-COMPLETED access AM-LOGIN-COMPLETED access AM-LOGOUT config AM-CONFIG-CHANGE Audit Log Components The following section presents the predefined audit event components that make up the log messages: Audit Log Event Components Event Component OAuth OAuth 2.0, OpenID Connect 1.0, and UMA CTS Core Token Service Policy Agent Web and Java EE policy agents Authentication Authentication service Dashboard Dashboard service Server Info Server information service Users Users component Groups Groups component Oath Mobile authentication Devices Trusted devices Policy Policies Realms Realms and sub-realms Session Session service Script Scripting service Batch Batch service Config Configuration STS Secure Token Service: REST and SOAP Record Recording service Audit Auditing service Radius RADIUS server Audit Log Failure Reasons The following section presents the predefined audit event failure reasons: Audit Log Event Authentication Failure Reasons Failure Description LOGIN_FAILED Incorrect/invalid credentials presented. INVALID_PASSWORD Invalid credentials entered. NO_CONFIG Authentication chain does not exist. NO_USER_PROFILE No user profile found for this user. USER_INACTIVE User is not active. LOCKED_OUT Maximum number of failure attempts exceeded. User is locked out. ACCOUNT_EXPIRED User account has expired. LOGIN_TIMEOUT Login timed out. MODULE_DENIED Authentication module is denied. MAX_SESSION_REACHED Limit for maximum number of allowed sessions has been reached. INVALID_REALM Realm does not exist. REALM_INACTIVE Realm is not active. USER_NOTE_FOUND Role-based authentication: user does not belong to this role. AUTH_TYPE_DENIED Authentication type is denied. SESSION_CREATE_ERROR Cannot create a session. INVALID_LEVEL Level-based authentication: Invalid authentication level. Configuration Reference Ports Used