External authentication
The External Authentication Interface (EAI) provides a mechanism for a resource server to handle the authentication process.
Conceptually, the resource server application will handle the authentication user experience and can return HTTP headers containing identity information which IAG will use to establish a credential.
Configuring external authentication
To configure external authentication, IAG must be provided with a list of trigger URLs. These trigger URLs indicate to IAG which resources can return the external authentication HTTP headers which contain identity information.
For example, consider the following configuration:
version: "26.06.0"
resource_servers:
- path: /auth_app
connection_type: ssl
servers:
- host: 10.10.10.200
port: 9443
identity:
auth_challenge_redirect:
url: /auth_app/login
parameters:
- name: originalUrl
source: macro
value: URL
eai:
triggers:
- /auth_app/login_complete
- /auth_app/login_complete_v2
policies:
authorization:
- name: eai_unauth
paths:
- "/auth_app/*"
rule: anyauth
action: permit
-
Our external authentication application is defined as the resource server
/auth_app. -
Unauthenticated clients will be redirected to
/auth_app/login. This is the login page for the external authentication application. The originally requested URL will be included as a query string parameter namedoriginalUrl. -
The trigger URLs
/auth_app/login_completeand/auth_app/login_complete_v2are registered. IAG will inspect responses for these resources for identity information headers. -
An authorization policy which will allow all clients (authenticated and unauthenticated) is applied to the external authentication application.
External Authentication Headers
| Header Name | Purpose | Example |
|---|---|---|
AM-EAI-USER-ID
|
The value of this header is interpreted as the username. |
testuser@ibm.com
|
AM-EAI-XATTRS
|
This header contains a comma separated list of other header names which should be interpreted as credential attributes. (Optional) |
firstName,lastName,accessGroup
|
AM-EAI-REDIR-URL
|
This header can be used to specify a URL that the client should be redirected to. (Optional) |
/app1/welcome
|
IAG will examine responses to requests sent to any of the configured trigger URLs for external authentication headers. If external authentication headers are found, IAG will create a new credential using the information contained in these headers.
At a minimum, the AM-EAI-USER-ID (username) header must be provided to trigger
external authentication.
Consider the following example response to a configured trigger URL:
> POST /auth_app/login_complete
> ...
< HTTP/1.1 200 OK
< ...
< AM-EAI-USER-ID: testuser@ibm.com
< AM-EAI-XATTRS: firstName,lastName,accessGroup
< firstName: John
< lastName: Smith
< accessGroup: regularUsers
< AM-EAI-REDIR-URL: /app1/welcome
< ...
This response:
-
Will trigger external authentication as the request URL matches a trigger URL and contains the
AM-EAI-USER-IDHTTP header. -
A credential will be created with the username
testuser@ibm.comfrom theAM-EAI-USER-IDHTTP header. -
The
AM-EAI-XATTRSis present and indicates that thefirstName,lastNameandaccessGroupHTTP headers should be interpreted as credential attributes. -
The
AM-EAI-REDIR-URLindicates that the client should be redirected to/app1/welcome.
The resulting credential will look like:
| Attribute Name | Attribute Value(s) |
|---|---|
| AZN_CRED_AUTHNMECH_INFO | EAI Authentication |
| AZN_CRED_AUTHZN_ID | testuser@ibm.com |
| AZN_CRED_AUTH_EPOCH_TIME | (time the credential was created) |
| AZN_CRED_AUTH_METHOD | ext-auth-interface |
| AZN_CRED_BROWSER_INFO | (client user-agent) |
| AZN_CRED_IP_FAMILY | (client IP family) |
| AZN_CRED_MECH_ID | ext-auth-interface |
| AZN_CRED_NETWORK_ADDRESS_STR | (client IP address) |
| AZN_CRED_PRINCIPAL_NAME | testuser@ibm.com |
| AZN_CRED_QOP_INFO | (client QOP info) |
| AZN_CRED_REGISTRY_ID | testuser@ibm.com |
| AZN_CRED_USER_INFO | testuser@ibm.com |
| accessGroup | regularUsers |
| firstName | John |
| lastName | Smith |
| tagvalue_login_user_name | testuser@ibm.com |
| tagvalue_session_index | (session index) |
| tagvalue_user_session_id | (session identifier) |
The response from the external authentication application will be intercepted by IAG and not
returned to the client. The client will instead receive a 302 redirect to the URL
/app1/welcome.
Using External Authentication and OIDC
External authentication can be used in conjunction with an OIDC identity.
If both OIDC and EAI are configured, by default IAG will redirect unauthenticated clients to
start the OIDC login. To change this behavior, use the auth_challenge_redirect to
specify a location where unauthenticated clients should be sent to start authentication.
### Example 1
### Unauthenticated clients will be redirected to start OIDC authentication.
identity:
oidc:
discovery_endpoint: https://www.test.com/mga/sps/oauth/oauth20/metadata/oidc_def
...
eai:
triggers:
- /auth_app/login_complete
...
### Example 2
### Unauthenticated clients will be redirected to `/auth_app/login`.
identity:
auth_challenge_redirect:
url: /auth_app/login
oidc:
discovery_endpoint: https://www.test.com/mga/sps/oauth/oauth20/metadata/oidc_def
...
eai:
triggers:
- /auth_app/login_complete
...
When using auth_challenge_redirect to control the initial authentication
challenge, clients can later be redirected to start the OIDC authentication process by sending them
to the OIDC kick-off URL /pkmsoidc?iss=default.
Additionally, auth_challenge_redirect can include parameters describing the
original request which was redirected. See the YAML reference for Default Authentication Challenge
for further information.
Sign-out with External Authentication
The External Authentication Interface can also be used to sign-out an active session or all active sessions for a given user. The mechanism works in a similar way to the sign-on process, where the external authentication application responds to a requests on any of the matching trigger URLs with headers indicating the action to take place.
Sign-out for a Single User Session
An external authentication application can indicate to IAG that a session should be terminated by providing a terminate session header and indicating the identifier for the session to terminate.
| Header Name | Format | Purpose | Example |
|---|---|---|---|
AM-EAI-SERVER-TASK
|
terminate session <session_id>
|
The session corresponding to <session_id> will be destroyed. |
terminate session abc...:default
|
tagvalue_user_session_id.Sign-out for all Sessions Belonging to a User
An external authentication application can indicate to IAG that all sessions belonging to a particular user should be terminated by providing a terminate all_sessions header and indicating the username whose sessions should be terminated.
| Header Name | Format | Purpose | Example |
|---|---|---|---|
AM-EAI-SERVER-TASK
|
terminate all_sessions <username>
|
All sessions belonging to <username> will be destroyed. |
terminate all_sessions testuser@ibm.com
|