Previous Topic: Configure the Realm Based Max Failures ParameterNext Topic: User Directories: Schema, Storage and Capabilities


Verify That Attempt Failure Thresholds for OTP and Other Authentication Do Not Aggregate to Lock Out Users

Verify that the separate maximum attempt failure threshold that you have defined for a realm that is configured with OTP authentication is correctly configured.

The following procedure assumes the following conditions:

Follow these steps:

  1. Attempt to access a resource that is secured with OTP authentication using an incorrect password N-1 times.

    The account should not be locked.

  2. Attempt to access a resource that is secured with non-OTP authentication using an incorrect password M-1 times.

    The account should not be locked.

  3. Attempt to access a resource this is secured with OTP authentication using an incorrect password one more time (for a total on N times).

    The account should be locked.

  4. Reenable the locked out account.

You have successfully configured a separate maximum attempt threshold for one-time password authentication.

Expiring Password

Password Expiration

Range: 0 or 30-180 days

Default: 0

Recommended: 90

Complexity Level: Basic

If a security breach does occur because a password becomes known, the breach is immediately closed when the password changes. By requiring your users to periodically change their passwords, you can close any breaches that you don't even know about.

This setting controls how often users must change their passwords.

When a password fully expires, the user is disabled and the configured action taken (email, redirection).

This setting controls the amount of time that can pass between when the user last changed his password (or was created) and when the password must be changed. Related settings, described below, control warnings and grace periods.

For users stored in a Windows NT Directory, Expiration Delay is not honored. APS honors the password expiration date set in the NT User record. Expiration Warning is honored as described below, though it is relative to the expiration date set in the NT user record. Expiration Grace and Grace Logins are not honored for NT users, thus, when an NT user's password expires, that user is immediately disabled.

Password Expiration=90
Password Expiration={@Employees} 60

Note: For users stored in LDAP or ODBC directories, the administrator can modify some of the behavior of APS when doing a password expiration check. Before using this setting, APS will check the user's record for a value for the attribute smapsExpirePasswordDays. If set, APS will use the number of days so specified. This feature should be rarely, if ever, used, since it causes a performance hit and creates maintenance problems. It is intended to override specific users, such as administrators, whose password should never expire.

Expiration Warning

Range: 0-99 days

Default: 0

Recommended: 7

Complexity Level: Basic

When a password expires, the user's access to the system is revoked. It is far user-friendlier to warn the user that their password will expire shortly. This setting determines how long before a password expires should the user be warned.

The warning takes the form of email and/or redirection (which must be configured for this setting to work) occurring each time that the user logs in during this period.

Expiration Warning=7
Expiration Warning={@Customers} 10
Offline Expiration Warning

Range: 0-99 days

Default: 0

Recommended: 7

Complexity Level: Basic

If a user logs in during the Expiration Warning period, defined as the Password Expiration Date less the number of days specified by the Expiration Warning setting above, an event fires and the system takes immediate action (redirection and/or mail sent). However, this process is triggered by an actual authentication attempt.

This setting allows a site to send email warning users of password expiration even if the user does not authenticate. The APSExpire utility will send email to users before their password expires using this setting.

Note that this setting may appear more than once. If so, APSExpire will send the email each time within the period that it is run. Thus, a site can send email 15, 10 and 5 days before the password actually expires.

Offline Expiration Warning=15
Offline Expiration Warning=10
Offline Expiration Warning=5
Expiration Grace

Range: 0-99 days

Default: 0

Recommended: 7-14 days

Complexity Level: Intermediate

Once password expiration is reached, APS no longer treats password changes as optional (it becomes required). How many days after the password expires should APS actually disable the user?

This setting is not honored for users in a Windows NT Domain Directory.

Expiration Grace=30
Expiration Grace={@Employees} 7
Grace Logins

Range: 0-5

Default: 0

Recommended: no

Complexity Level: Advanced

Once password expiration is reached, APS no longer treats password changes as optional (it becomes required). This setting indicates how many times the user will be allowed to login after the password expires and before the user is disabled.

All but the last grace login are optional. The last grace login will not be optional (using the default form and AZRedirect).

If both Grace Logins and Expiration Grace settings are used, the first value to be used up will cause the user to be disabled. In other words, if the Expiration Grace period expires before the user has consumed all of the available Grace Logins, the user is disabled. If all Grace Logins are consumed, the user is disabled, even if the Expiration Grace period has not expired.

Note that the user will be allowed to login when this value is reached. However, if the password is not changed, the next login attempt will cause the user to be disabled.

This setting is not honored for users in a Windows NT Domain Directory.

Grace Logins=3
Grace Logins={@Employees} 2

Account Expiration & Purge

Max Inactivity

Range: 0-365 days

Default: 0

Recommended: 90 days

Complexity Level: Basic

This setting controls the maximum amount of time that can occur between user logins. A user attempting to log into an account that has remained dormant for more than this amount of time will cause the account to become disabled. Thus, an old, dormant account that may have been overlooked will be less of a security threat.

For example, one of your employees leaves the company to join one of your competitors. Your Human Resources department does not notify you of the separation. Since the account remains unused for 30 days (before the employee attempts to reconnect), when the attempt is made, the account is disabled (and, optionally, mail can be sent to the administrator).

By default, this setting is reactive, meaning that the account is not actually disabled until it is used, not when the time limit expires. To be proactive, that is, to have APS disable users (LDAP and ODBC users only) when the account actually expires, use the APSExpire utility.

When APSExpire is used, if the user eventually logs in (after being disabled), APS cannot do special redirection to notify the user that he has been disabled due to inactivity, only that the user is disabled.

If APSExpire is used, then you can send warning mail to expiring users several days before the account actually expires. This functionality is controlled by the Inactivity Warning setting below.

For Windows NT Directories, APS honors the Account Expiration date set in the NT User record rather than this setting.

Max Inactivity=90
Max Inactivity={@Admins} 180

Note: For users stored in LDAP and ODBC directories, the administrator can modify some of the behavior of APS when doing this check. Before using this setting, APS will check the user's record for a value for the attribute smapsAccountInactivityDays. If set, APS will use the number of days so specified. This feature should be rarely, if ever, used, since it causes a performance hit and creates maintenance problems. It is intended to override specific users, such as administrators, that are accessed rarely and should never be disabled due to inactivity.

Inactivity Warning

Range: 0-99 days

Default: 0

Recommended: 7-10 days

Complexity Level: Intermediate

If the APSExpire utility is used, then you can send warning mail to expiring users several days before the account actually expires. This setting controls how long before the user record expires such mail is sent.

The mail may not actually be sent this number of days before expiration, since the APSExpire utility may not run. The utility will generate mail when a user's record will expire within this number of days and such mail has not already been sent.

Since APSExpire can only be used for LDAP or ODBC users, this setting does not apply to users in a Windows NT directory.

Inactivity Warning=5
Inactivity Warning={@Customers} 10
Purge After

Range: 0-730 days

Default: 0

Recommended: 30 days

Complexity Level: Advanced

An account disabled due to inactivity will remain in the User Directory, theoretically forever. The APSAdmin utility will report all users that have been disabled (due to Account Inactivity) for this many days as "eligible for purge". Note that APS will never actually delete a user.

Since APSExpire can only be used for LDAP or ODBC users, this setting does not apply to users in a Windows NT directory.

Purge After=30
Purge After={@Customers} 365

Event Redirection

When events occur during the authentication process, APS can redirect the user to specific pages (URLs). This section contains descriptions of the settings that specify the URLs to redirect users for each event.

During authentication, APS records the fact that the event has occurred and which event it was. It cannot perform the redirection at that time.

In order to actually perform the redirection, additional configuration settings must be created within the Policy Database. This configuration is described in the configuration section of this document.

Two different actions can be taken for each event:

Various notes apply to redirection when used as an action associated with an event:

Active Expression Parameters

The parameter field for the Active Expressions used for redirection (SmApsRedirect and AZRedirect) can be used for some very powerful functionality.

The parameter field is in the form:

<key>=<value>;<key2>=<value>;...;<default redirect>

All fields are optional and the system works fine without specifying any parameters.

The <default redirect> parameter, if required, must be the last section in the parameter list. It cannot contain an equal sign or a semicolon (it is possible to escape such characters with a backslash "\"). If no redirection is to be performed by APS, this is where the user will be redirected to instead. This is used when you want to use one of the redirect events, but it would conflict with APS.

You can specify as many Key/Value pairs as required. APS will save these values. The character case for keys is ignored. If the same key is specified more than once, only the last value will be used.

Values may contain user attribute names surrounded by curly braces ("{" and "}"). Such attribute names (and the braces) will be replaced by the attribute value from the user's directory entry. If the first part of the value will reference an attribute in this way and a setting override is not to be used, you must specify an override of "{TRUE}" in order not to confuse the APS.cfg parser (so it recognizes the attribute reference and can differentiate it from an override).

Event redirection can be overridden using the standard override syntax. In addition, context macros are also available. The <key> values passed through the Active Expression are used as context macros whose values are the <value> passed for the key. Some other event-specific context macros are also available (discussed with each event definition).

When a redirect must be determined, APS will evaluate all redirects of the correct type in the order in which they appear. The last one that applies will be used.

To override a redirection setting, specify a Key/Value pair after the equal sign, within square brackets, such as:

Failure Redirect={%LANG="EN"}http:/EnglishFailure.htm

If the parameter of the redirect response defined in the Policy were LANG={preferredLanguage}, then there will be a key called LANG with a value of the user's preferred language (from their LDAP entry). If the value from the user's entry were EN (for English), then the LANG key will have a value of EN, thus this setting would be selected (assuming it is not superceded by another setting later).

This is most useful to select redirections based on Realm. APS does not support this directly, but it can easily be performed using this feature by specifying a Key called REALM in each response, with a value appropriate for that realm. Overrides can then be defined in this file for each Realm. Realize that this is not truly tied to the realm, it is only a key supplied as a parameter to the redirect.

For example:

Failure Redirect={%Realm="AppA"} http:/AppA.htm

Will be fired if invoked by an active expression such as the following (presumably defined only in the ApplicationA realm):

<@ lib="smaps" func="SmApsRedirect" param="Realm=AppA" @>

But would not be fired in other realms where the REALM keyword was not set to AppA.

URL Translation

Once a redirection URL has been selected, APS will perform additional translations on that URL. In addition to the keys supplied in the Active Expression parameter, the following Keys will also be defined:

Server

The server component of the requested Resource URL.

Resource

The resource component of the requested Resource URL.

Action

The action component of the requested Resource URL.

Target

The full URL of the requested resource.

If the user context is defined (the user is authenticated), these keys will be defined as well:

UserName

The user's full DN

UserPath

The user's full path, including directory type and name.

DirPath

The path to the directory server.

DirServer

The directory server.

DirNamespace

LDAP:, ODBC: or WinNT:, depending on the origin of the user.

APS will take the resulting URL (or the default one specified in the parameter field) and replace any references to any key with its value. References to keys should be placed in the URL surrounded by angle brackets ("<" and ">"). To continue the example above:

http://www.mysite.com/TargetPage?Language=<LANG>

would be translated to:

http://www.mysite.com/TargetPage?Language=EN

Key names are NOT case-sensitive and values will be URL-encoded (so TARGET will be encoded).

In addition, any text between curly braces ("{" and "}") will be replaced (along with the braces) with equivalent values from the user's directory entry. Note that this processing is only possible if the user has been successfully authenticated. An example might be:

http://www.mysite.com/TargetPage? Language=<LANG>&Name={FirstName}

would translate (for me) to:

http://www.mysite.com/TargetPage? Language=EN&Name=Eric
SmCPW

For some of these redirects, the setting will probably be SmCPW, that component of APS that allows users to change their passwords. SmCPW recognizes many arguments in its URL (as described on page 272), including:

Target=<target>
DaysLeft=<DaysLeft>
Optional

Multiple arguments should be separated by an ampersand ("&"), thus a warning redirect might be:

/CPW/SmCPW.exe?DaysLeft=<DaysLeft>&Target=<Target>

Additional arguments (either from keys or hard-coded) may be supplied. SmCPW will ignore them, but will pass them on to its own target in the same manner.

Failure Redirect

Default: none

Recommended: no

Complexity Level: Intermediate

When the user reaches Max Failures consecutive failures, where should APS send the user? This must be an unprotected page, since the user will not be allowed to login. It is not recommended that this redirect be used (use the mail notification instead), since by using it, your site acknowledges that a valid user id has been discovered and thus you open yourself to a denial of service attack.

Failure Redirect= http://www.yoursite.com/maxfails.htm
Disable Redirect

Default: none

Recommended: no

Complexity Level: Intermediate

If a user is already disabled when a login attempt occurs, APS will send the user to the specified page. This must be an unprotected page, since the user will not be allowed to login. This redirect should not be used for the same reasons as stated for the Failure Redirect setting above.

This redirection supports an additional macro called DisabledReason. This contains the reason code(s) associated with why the user is disabled.

Disable Redirect= http://www.yoursite.com/disabled.htm? Disabled=<DisabledReason>
Inactive Redirect

Default: none

Recommended: Yes

Complexity Level: Intermediate

If a user has not logged in for Max Inactive days (or the number of days specified by smapsAccountExpirationDays), where should APS redirect the user (after disabling him)? This must be an unprotected page, since the user will not be allowed to login.

This redirection is safe to use. In order for this event to occur, the user has supplied a valid user id and password (he just has not done it for too long). Using this setting does not open a security hole.

If the APSExpire utility is utilized, this redirection may never occur (it may occur if the user attempts to log in on the same day as he would expire and APSExpire has not yet run). APSExpire will disable the user in its batch process instead, so this event does not occur. Instead, the Disabled Redirect setting would apply.

Inactive Redirect= http://www.yoursite.com/inactive.htm
Expired Redirect

Default: none

Recommended: Yes

Complexity Level: Intermediate

If a user has not changed his password for Password Expiration (or the value stored in smapsPasswordExpirationDays) plus Expiration Grace days or has used up all available Grace Logins, where should APS redirect the user (after disabling him)? This must be an unprotected page, since the user will not be allowed to login.

This redirection is safe to use. In order for this event to occur, the user has supplied a valid user ID and password (he just has not changed it for too long). Using this setting does not open a security hole.

Expired Redirect= http://www.yoursite.com/expired.htm
Force Change Redirect

Default: none

Recommended: [path]SmCPW[.exe]?Target=<target>

Complexity Level: Basic

If a user is required to change his password immediately because the Force Password Change flag is set, where should APS redirect the user? This should be a protected page (probably the change password page).

This page may also be used if the Expire Change Redirect is needed but not specified.

Force Change Redirect= http://www.yoursite.com/CPW/SmCPW.exe? Target=<target>
Warning Redirect

Default: none

Recommended: [path]SmCPW[.exe]?Target=<target>& DaysLeft=<daysleft>

Complexity Level: Basic

If the user is being warned that his password will expire (starting Expiration Warning days before Password Expiration), where should APS redirect the user? This should be a protected page (probably the change password page).

Warning Redirect= http://www.yoursite.com/CPW/SmCPW.exe? Target=<target>&DaysLeft=<daysleft>
Expire Change Redirect

Default: none

Recommended: [path]SmCPW[.exe]?Target=<target>

Complexity Level: Basic

If a user is required to change his password immediately because his password has expired and he is still in the grace period, where should APS redirect the user? This should be a protected page (probably the change password page).

If this setting is not specified, but needed, the Force Change Redirect will be used.

Expire Change Redirect= http://www.yoursite.com/CPW/SmCPW.exe?
Target=<target>

Generational & Other Automatic Redirection

Generational Redirects only apply to LDAP and ODBC User Directories.

Starting with Version 3.0, APS supports Generational Redirects. This type of redirect is distinctly different from the event redirects described in the previous section.

While Generational Redirects are not strictly in the purvey of APS, APS already has the infrastructure in place to provide this useful functionality.

Generational Redirects are redirections that are to be applied to the user base at least once. The generational nature is because there can be multiple generations for a specific URL, each user is required to "see" all known generations of that target.

Each generational redirect has a name that is used as a key to describe that redirect. Two typical uses of generation redirects might use PROFILE and LICENSE, in order to force each user to see the user profile and the on-line access agreement.

In addition to a name, each redirect also needs a generation, which is a number and a URL.

Generational Redirect

Default: none

Complexity Level: Advanced

When a user accesses a site, APS looks at values stored in the smapsGenerationalRedirects attribute of the user. This attribute is multi-valued (on LDAP) and will contain key/value pairs, such as:

LICENSE=2 <comment info, usually date & IP>
PROFILE=1 <comment info, usually date & IP>

APS compares the number associated with a specific key with the generation specified in the APS configuration file. If the number is less in the user record (or the key does not exist), the user will be redirected to the URL specified in the configuration file and the user's value for the smapsGenerationalRedirects attribute is updated with the new value.

Under normal conditions, only version 1 would ever be used. However, some sites might require, for example, that all users see an On-Line Access Agreement every time changes. In this case, merely update the version number in APS.cfg and all users will be sent to the associated URL (since new users have no value and existing users will have a stored generation of 1 instead of the new value, 2).

Unlike most settings in APS.CFG, all generational redirects will be processed, in the order in which they appear in the file.

Note that APS can only redirect the user to the URL, it cannot force the user to actually take an action once there.

APS will redirect the user to any applicable generational redirection pages after processing any applicable events. If multiple generational redirects are triggered, the user will be redirected to each, in the order that they appear in the APS.cfg file.

Generational Redirect=LICENSE=1 http://www.yoursite.com/Profile.jsp
Generational Redirect=PROFILE=1 http://www.yoursite.com/Profile.jsp
Message of the Day

Default: none

Complexity Level: Advanced

This setting will show the designated page to all applicable users the first (and only the first) time that they log in each day.

This setting uses the smapsGenerationalRedirects attribute to "remember" whether a user has been redirected on any given day, with a key value of APS_MOTD. The generation number will be the current date.

The user will be redirected to the message of the day after all APS events and all applicable generational redirects.

If multiple Message of the Day settings exist, the last which applies will be used.

Message Of The Day = http://www.yoursite.com/motd.htm
Message Of The Day ={@Employees} http://www.yoursite.com/EmpMotd.htm
Message Of The Day ={@Customers} http://www.yoursite.com/CustMotd.htm
Always Redirect

Default: none

Complexity Level: Advanced

This setting will show the designated page to all applicable users every time that the user authenticates.

This setting does not use the smapsGenerationalRedirects attribute.

If multiple Always Redirect settings exist, the last that applies will be used.

Always Redirect=http://www.yoursite.com/notices.htm
Always Redirect={@Employees} http://www.yoursite.com/EmpNotices.htm
Always Redirect={@Customers} http://www.yoursite.com/CstNotices.htm
Always Redirect AZ

Default: none

Complexity Level: Advanced

This setting will show the designated page to all applicable users every time that the user accesses a page. This setting should be used very carefully, since users will be unable to access all or part of your site.

It is often used to temporarily present a page to users that are trying to access part of your site that is being upgraded.

This setting does not use the smapsGenerationalRedirects attribute.

If multiple Always Redirect settings exist, the last that applies will be used.

This setting requires the use of the AZRedirect Active Expression.

Always Redirect AZ = {NOT @Tester AND %Realm="AppA"} http://www.yoursite.com/offline.htm

Sending Mail

These settings specify the files that are to be sent by APS when the associated event occurs. There is no such thing as "most restrictive" setting in these cases; the last applicable setting will be used.

File names may contain full or relative paths or no path at all. APS will use the Directory setting in the [MAIL] section to locate files, if required.

File names may contain attribute replacement specifications, such as /Mail/{preferredLanguage}/Disabled.email.

Multiple files may be specified, separated by a semicolon (";"). If so, APS will send all of them, if possible. This is useful when one file should be sent to the user and another to an administrator.

The format of these files is described in the section entitled Email Templates.

If no mail is to be sent for a specific event, comment out or leave the setting blank.

If your User Directory does not have valid email addresses, you should not use these settings, except to send mail to internal personnel (fixed email addresses).

For Windows NT users, APS looks at the Description field in the user's entry. Within that field, APS looks for the string Email:. The text immediately following, up to the end of the description field or the next space, will be used as the user's email address.

Disabled User Mail

Default: none

Recommended: Yes, to user

Complexity Level: Intermediate

This setting specifies the file(s) to send when a disabled user tries to authenticate. This is useful to tell the user that they have entered correct information, but their user record is currently disabled. Note that if passwords are reset (see the Reset Passwords setting on page 71) users will fail authentication and not see this mail. This is only sent when they successfully authenticate, then are rejected by APS because the record is disabled.

This event supports a macro called DisabledReason. This will contain the reason code(s) associated with why the user is disabled.

Disabled User Mail=Disabled.email
Max Failures Mail

Default: none

Recommended: Yes, to user and administrator

Complexity Level: Intermediate

This setting specifies the file(s) to send when the maximum failure count is exceeded and the user is not going to be allowed to login. This is a very secure way to notify a user (or administrator) of a possible attack on the system, since a hacker will not receive the mail (and thus the user id is not confirmed and the hacker will continue attempts that can never succeed). The user will be notified why his mistaken logins do not work and that his account is disabled.

Administrators can be notified of the attack. This is often very usefully overridden for Administrator accounts, since it can be used to notify system or security administrators of attempts to access the system (most sites will not want System Administrator notification for all Max Failure events, only attacks on administrator accounts).

When this mail is sent, a macro called FailureCount can be included in the mail text itself. Its value is the actual number of failed attempts.

Max Failures Mail=MaxFailures.email
Max Failures Mail={@Administrators} MaxFailures.email; AdminMaxFailures.email
Ongoing Failures Mail

Default: none

Recommended: Yes, to administrator

Complexity Level: Advanced

When an account is under programmatic attack and the Max Failures setting is in effect, APS disables the user and sends the Max Failures Mail when the failure count first reaches the value of Max Failures. Presumably, Max Failures Mail will be sent to the user.

This setting, Ongoing Failures Mail, specifies the file(s) to send as the attack continues. Each Max Failures attempts will trigger the sending of the file(s) indicated in this setting. Under normal circumstances, this mail is sent to an internal administrator to notify that person that the attack continues.

Often, sites will configure this mail to go through an SMTP/Pager gateway so that the administrator is notified in real-time.

When this mail is sent, a macro called FailureCount can be included in the mail text itself. Its value is the actual number of failed attempts. It is often useful to include {SM_USERSESSIONIP} (note the braces) in the body of the mail so that the client IP address (the source of the attack) can be identified. This address is not necessarily trustworthy; it can be spoofed.

Ongoing Failures Mail=MoreAttacks.email
Inactive User Mail

Default: none

Recommended: Yes, to user and administrator

Complexity Level: Intermediate

If the user is disabled because he is inactive, this setting is used to find the file to send as mail. This setting is used during the authentication process and by the APSExpire utility.

Inactive User Mail=InactiveOnline.email
Inactive User Mail={%APSExpire="YES"} NotifyInactiveUsers.email
Expired Password Mail

Default: none

Recommended: no

Complexity Level: Advanced

This setting controls the mail file sent when a user's password actually expires (not when he enters the grace period). This is sent when the user is disabled because of password expiration. It can be used both for online expiration and by APSExpire.

Expired Password Mail= ExpiredPasswordOnline.email
Expired Password Mail={%APSExpire="YES"} NotifyExpiredPassword.email
Force Change Mail

Default: none

Recommended: no

Complexity Level: Advanced

If the user will be forced to change his password, this setting specifies the file that will be sent as email. It is not very useful, since redirection will actually force the password to be changed. It is not used by APSExpire.

Force Change Mail=ForceChangePassword.email
Password Warning Mail

Default: none

Recommended: Yes

Complexity Level: Intermediate

If the user must be warned that his password will expire, but does not yet have to change the password, the file specified by this setting is sent.

This is actually a very useful setting. Consider, for your site, using this setting instead of redirecting the user. By using email (presumably either containing the URL that the user can use to change their password or instructions as to where a link can be located on your site), you will not interrupt the user's workflow to request an optional password change.

This setting can be used by APSExpire. If, for example, a typical user of your site only is expected to log in quarterly, but password expiration warnings are given 10 days before expiration, users will rarely ever actually see such a warning at login time. You can use this setting with APSExpire to warn users even when they are not logging in frequently.

Password Warning Mail={%APSAdmin!="YES"} PasswordWarningOnline.email
Password Warning Mail={%APSAdmin="YES"} NotifyPasswordWarning.email
Inactivity Warning Mail

Default: none

Recommended: Yes

Complexity Level: Intermediate

If the Max Inactivity and Inactivity Warning settings are specified, APSExpire can send a user email before the user's account actually expires. For very important customers, mail could be sent to an administrator instead of (or in addition to) the user. This setting specifies the file(s) to send.

This mail is only sent by APSExpire and only if a user will expire and warnings are to be sent.

Inactivity Warning Mail=InactivityWarning.email
Inactivity Disabled Mail

Default: none

Recommended: Yes

Complexity Level: Advanced

If APSExpire actually disables a user for inactivity, this setting specifies the mail file(s) that it should send. This is a separate setting from the mail sent if user expiration is detected during the login process, but is often the same file.

Inactivity Disabled Mail=InactivityDisabled.email
Change Confirmation Mail

Default: none

Recommended: No

Complexity Level: Advanced

When a user changes their password, the change is confirmed on the screen. As an option, APS can also send mail to confirm the password change. This is generally unnecessary.

A special macro is available for this mail only. This macro contains the user's new password and may be inserted into the mail using the text %PASSWORD%. It is generally not a good idea to do this, however.

Change Confirmation Mail=ChangeConfirmation.email

Mail Settings

When Advanced Password Services needs to send mail, it must communicate with a Simple Mail Transfer Protocol (SMTP) mail server.

The original design of APS used Microsoft's MAPI to send mail. This had advantages and disadvantages. The biggest advantages included the fact that you could use your existing mail address book and that you could send mail internally when an SMTP gateway server did not exist. However, MAPI is limited to interfacing to Microsoft Exchange servers only when server programs are sending mail. Also, MAPI does not exist within the Unix environment.

Since an SMTP interface is used to send mail, addresses must be Internet mail addresses in the form of username@domain.com, rather than an internal mail system address. Multiple addresses may be the target of email, separated by commas. White space (spaces) is ignored.

To control the message sent for each event, create a file for the event, and identify that file (or files) in the APS configuration file using the settings detailed in the previous section. In APSMail parlance, these are called mail templates.

Email is sent to the SMTP server immediately. However, the SMTP server may not send the mail to the target address right away. Thus, if a delivery error occurs, such as the target address is invalid, APS is not notified (since it has long since moved on). To detect and process these cases, a site should either regularly check the SMTP error logs or use a Reply On Error address so that sending errors are returned to the sender

The template file format is described starting on page 287.

[Mail]

All of the Mail Settings appear in a special Mail section in the APS Configuration File. The section starts when the text [MAIL] (case does not matter) appears in the file and continues until the end of the file or another section starts. All of the previously described keywords do not appear in a section and therefore must appear in the file before any other section starts.

No keywords in this section support overrides.

Server

Default: none

Recommended: Yes

Complexity Level: Basic

This is the name or IP address of your SMTP gateway. APS will communicate with this server using port 25, which is assigned to SMTP. This can be either the name (such as MAIL.MYDOMAIN.COM) or the IP address (performance will be slightly faster using the IP address). You may need to obtain this information from your mail administrator.

If this field is blank or not supplied, APSMail will determine the applicable mail server using its own methods. If no server can be determined, no mail will be sent.

APSMail looks up the port number for the smtp service. If it is not explicitly configured for your machine, it will use port 25. To use a different port, configure the smtp service in your protocols file to the correct port number.

The SMTP server must support mail relaying.

Server=127.0.0.1
Log Path

Default: none

Recommended: During testing or for auditing purposes

Complexity Level: Intermediate

APSMail can log all mail files to a log file, along with the result returned by the SMTP server at the time that the mail was submitted. This setting specifies if and where such logging should occur. Just because a message is logged does not mean that it was sent. It is useful for testing where either a mail server is not available or mail should not really be sent, such as in a development environment that uses production data.

APSMail supports a number of alternate ways to set this value if it is not specified here. See the chapter entitled Using Email for complete details.

Log Path=APSMail.Log
Directory

Default: none

Recommended: Yes

Complexity Level: Advanced

The Directory setting is similar to the PATH environment variable; it can contain one or more directories on which mail files can reside.

Multiple directories are separated by semicolons on Windows NT, colons on Unix.

Directory names can contain replacement/lookup references. One of the easiest ways to internationalize email is to specify a directory like:

/mail/{preferredLanguage}

In this case, the current (LDAP) user's value for the attribute called preferredLanguage will replace the reference in the path.

Directory=/mail/{preferredLanguage}
Directory=/mail

APSMail supports a number of alternate ways to set this value if it is not specified here. See the chapter entitled Using Email for complete details.

Custom Logging

APS supports two different extension libraries, SmAPSEx and SmAPSLog. These libraries allow the extension of APS functionality without modifying the base APS modules.

SmAPSLog is a library that can be used to provide custom logging of APS activity. It might be useful, for example, to produce summarized statistics. The source code for the SmAPSLog library is supplied with the installation kit. However, this code is provided "as is", without warranty and without support.

The APS Configuration File can contain settings for SmAPSLog. Any such settings are automatically passed to SmAPSLog for use by that library.

[Logging]

All of the SmAPSLog settings appear in a special Logging section in the APS Configuration File. The section starts when the text [Logging] (case does not matter) appears in the file and continues until the end of the file or another section starts. All general keywords do not appear in a section and therefore must appear in the file before any sections start.

Custom logging settings appear after this keyword in the same type of format supported in the rest of the file.

No setting in this section supports overrides.

Custom Extensions

APS supports two different extension libraries, SmAPSEx and SmAPSLog. These libraries allow the extension of APS functionality without modifying the base APS modules.

SmAPSEx is a library that can be used to provide custom functionality for APS. It can be used to change the behavior of APS without modifying APS itself. However, SmAPSEx must be a secure module, since it can see passwords in clear text (so, for example, it can implement custom password content rules). Thus the library is not made directly available to developers outside of CA. Contact CA Professional Services for information if you think that you need a custom SmAPSEx module.

The APS Configuration File can contain settings for SmAPSEx. Any such settings are automatically passed to SmAPSEx for use by that library. See the documentation provided with your version of SmAPSEx to determine what the valid settings are if you have a copy of SmAPSEx.

[Custom]

All of the SmAPSEx settings appear in a special Custom section in the APS Configuration File. The section starts when the text [Custom] (case does not matter) appears in the file and continues until the end of the file or another section starts. All general keywords do not appear in a section and therefore must appear in the file before any sections start.

Custom logging settings appear after this keyword in the same type of format supported in the rest of the file

No custom setting support overrides.

Invalid Password Dictionary

Dictionary checking is used to prevent common words from being embedded in passwords. Administrators often put words in the dictionary that are common to the type of business of the site. For example, a bank may wish to disallow words like "Account", "Savings", "Checking", and "Money".

[Dictionary]

All of the dictionary words appear in a special Dictionary section in the APS Configuration File. The section starts when the text [Dictionary] (case does not matter) appears in the file and continues until the end of the file or another section starts. All general keywords do not appear in a section and therefore must appear in the file before any sections start.

All entries in this section are disallowed words (all comparisons are case-insensitive and checked both forwards and backwards). Comments and blank lines ARE allowed in this section. Note that words less than four (4) characters will be ignored.

Example:

[Dictionary]

		Customers
		Accounts
		Baseball
		Password

Password Complexity

APS can calculate a password's complexity and compare it to a specified threshold to determine if the password should be allowed.

There are three metrics that APS uses to evaluate password complexity:

APS has a utility called APSComplexity that calculates the complexity of a given password. It may be useful to try various passwords to get a feel for these calculations.

The weight of each metric can be adjusted in the complexity section of the APS.cfg file. This section begins with a single line in the configuration file that looks like:

It is very unusual for sites to make changes to this section. The defaults are suitable for most sites. This section exists so that a site can fine-tune the calculations still further.

[Complexity]

Normally, this section is not needed, since there are default values for all possible complexity settings. This section can be used to fine-tune the weightings used for these calculations.

Note that no settings in this section can be overridden by user.

Sorted

Default: not sorted

Recommended: Yes

Complexity Level: Advanced

When calculating the character values, APS ignores repeating characters. If this keyword appears, the characters will be sorted before this calculation. For example, without the Sorted keyword, "Passwords" gets credit for the letter "s" twice (the second appearance does not count, since it repeats the prior character). If Sorted appears, "Passwords" receives credit for the letter "s" only once.

To turn this setting off, comment it out of the configuration file.

Sorted
Case Switch

Default: 2

Recommended: use the default

Complexity Level: Advanced

When calculating complexity, APS will add this value to the complexity score each time that the case switches from lower to upper or upper to lower case. Thus, using the default value of 2, "Passwords" would receive 2 points for a case switch and "PassWords" would receive 6. Intervening non-alphabetic characters are ignored in these calculations, so "Pass2W4ords" still received 6 points.

If case switching should not be considered during complexity calculations, set this value to zero.

Case Switch=0
Case Switch=4
Length

Default: +2

Recommended: use the default

Complexity Level: Advanced

This is actually 29 different keywords: Length4, Length5, through Length32. Each value specifies the score applied to passwords of that length. If no length values are specified, length is scored at zero for length 4, plus two points for each additional character (length 5=2, length 7=6, etc.).

If only some length values are specified, the default ("+2") is used up to the first specified value, then the specified value is used for all lengths up to the next specified value and so on. For example, if the following is specified:

Length4=0
Length8=4
Length12=6

Would be the same as:

Length4=0
Length5=0
Length6=0
Length7=0
Length8=4
Length9=4
Length10=4
Length11=4
Length12=8
Length13=8

(and so on).

Character Values

Default: 0-10

Recommended: Yes

Complexity Level: Advanced

There are 256 characters in the ASCII character set. Every character can have its own score and these scores can be overridden in APS.cfg. The default scores are:

Letter scores are shown in the following table. Lower case characters, by default, have the same value as their upper-case equivalents.

A

1

 

J

8

 

S

1

B

3

 

K

5

 

T

1

C

3

 

L

1

 

U

1

D

2

 

M

3

 

V

4

E

1

 

N

1

 

W

4

F

4

 

O

1

 

X

8

G

2

 

P

3

 

Y

3

H

4

 

Q

10

 

Z

10

I

1

 

R

1

 

 

 

There are three ways to set the score for a specific character. For displayable characters, either of the following methods will work. The examples below set the score for the capital letter "A":

A=5
'A'=5

Obviously, this mechanism does not work for non-displayable characters. Instead, the hexadecimal value of the character can be specified. For example, the score for Control-Z could be set to 5 using:

\x1A=5

If only one case of a character is explicitly set, then the other case will automatically be set to the same value.

Default scores for international (multibyte) characters are:

Field Mappings

APS supports Windows NT, LDAP and ODBC User Directories. For LDAP and ODBC User Directories, APS requires that certain attributes or columns be available in each user entry so that it can store operational information.

Internally, APS knows each of these attributes by a certain name (described in the chapter entitled User Directories: Schema, Storage and Capabilities). However, CA recognizes that, in some cases, these names cannot be used in a directory, either because of the implementation or because of column naming policies required by the site.

An additional problem is that some attributes/columns will have a different name in different directories. It is highly desirable to be able to reference only a single name when building mail templates, settings overrides and performing attribute replacement within the APS.cfg file.

This section, the [Mappings] section, is used to remap a "known" name of an attribute (or column) to the underlying name.

Every setting in this section can be overridden. However, the expressions that can be used are restricted in that they cannot reference any user information, such as attribute values or group membership (the IsInGroup function). Attempts to do so will be rejected.

Mapping is rarely required. If a "known" name does not exist (at all) within this section, APS will assume that the name in the underlying User Directory is the same as the "known" name.

Note: Certain remappings are required in the APS.cfg file to identify and process Microsoft Active Directories. The following two lines are the minimum required to support an Active Directory as a user store (in the [Mapping] section of the APS.cfg file):

userPassword={IsInDirectory("<dirname>")} unicodePwd
inetOrgPerson={IsInDirectory("<dirname>")} user
smapsPassword ={ IsInDirectory("<dirname>") }

Note: <dirname> is the name of the User Directory entry in your Policy Store.

Note: If the only User Directory is an Active Directory, then the following two lines can be used:

userPassword=unicodePwd
inetOrgPerson=user
smapsPassword=

Attribute Mapping

To map a standard attribute, use the format:

<logical-name>={<restricted-override>} <physical-name>

Where <logical name> is the name by which the attribute/column is know to APS by. <physical-name> is the underlying LDAP attribute or ODBC column name and <restricted-expression> is an override expression that is expressed in User Directory, not user or context, terms.

For example, under LDAP, users' full names are stored in an attribute called cn. Under ODBC, this is often a column called FullName. These can be mapped to a common name:

Name={IsLDAP()} cn
Name={IsODBC()} FullName0

Now, Name can be referenced in mail templates and override expressions without worrying about the differences between User Directories.

Attribute Suppression

Some of the information maintained by APS is purely informational; it exists simply for reporting purposes. Sites can suppress this information by mapping the "known" name to a blank name. The descriptions of the APS attributes starting on page 140 tell which of these attributes can be suppressed in this way.

Supressing attributes this way does not significantly improve write performance. APS groups all writes into a single server request. For writes, the performance hits are primarily in the network portion of the request, in the record (index) lookup, and in the fault tolerance (journaling) portion of the update. The difference between updating two attributes and four, for example, is normally not even measurable, as long as the updates are performed on the same request.

However, for very large directories, the savings in disk space may be significant enough to be desirable. For example, with 100 million users, not saving smapsPreviousLogin, which might average 24 characters, would save at least 2.4 GB of disk space.

Of course, the saving of this storage should be balanced against the loss of this information for reporting purposes.

smapsPreviousLogin=

Renaming LDAP Groups

This section must be used to rename LDAP groups so that they can be used by APSAdmin as described on page 157. APSAdmin cannot use full DN names in its references, it needs a single name. This section is used to map a single name to a full LDAP DN for those purposes.

FailureGrp=cn=FailureCount,o=Airius.com

This is only used by APSAdmin. You cannot change the name of a group that APS will use as a disable group.

LDAP Reverse Groups

If LDAP Reverse Groups are required (as described on page 164), they are defined in this section.

To have APS treat all LDAP groups as reverse groups, use:

LDAP.ReverseGroups=*

An asterisk should not be considered a wildcard. It can only be used in the above manner to indicate that all groups are reverse groups.

To specify a single group as a reverse group:

LDAP.ReverseGroups=cn=Disabled-NoCredit, o=nds.com

Multiple such lines can exist, one for each reverse group.

ODBC Queries

Wherever possible, APS will use the queries defined in the SiteMinder ODBC Query Scheme associated with the User Directory. However, there are some additional queries that APS needs and there will be times that it is not appropriate for APS to use queries defined to SiteMinder.

In addition to the APS-specific queries, every query defined in the SiteMinder Query Scheme can be overridden for use by APS.

Each query has replacement parameters, or placeholders, embedded within them that indicate where APS (or SiteMinder) is to place values before using the query. Each query will replace these parameters with specific values in the order defined by the query. Thus, the first parameter for a given query may be replaced by the User's ID. It is not possible to change the order of the parameters (the choice of placeholders and their order is defined by SiteMinder's Query Schemes). Placeholders are indicated in a query by "%s".

[ODBC]

All of these queries are defined or overridden in the APS.cfg file in this section.

Replace Quote With

Default: ' + CHAR(39) + '

Recommended: not used

Complexity Level: Advanced

This keyword can be used to specify the exact sequence that single quotes (apostrophes) should be replaced with when embedded inside of other quotes in a SQL query. By default, APS will use

' + CHAR(39) + '

This is the standard supported by SQL. However, some SQL implementations may use other sequences (Microsoft Access, for example, wants CHR instead of CHAR).

Test Handle

Default: off

Recommended: If needed

Complexity Level: Advanced

This setting was created to work around a problem with the base release of SiteMinder 5 and only affects ODBC User Directories. If you are getting "Invalid Handle" errors in your Authentication Log, put this setting into your APS.cfg file. APS will then test any handle passed to it from SiteMinder. If the handle is invalid, APS will open its own handle to the ODBC directory.

Enumerate

Default: n/a

Recommended: not used

Complexity Level: Advanced

The Enumerate query overrides the query by the same name defined to SiteMinder. APS does not use this query at this time.

Get Object Info

Default: n/a

Recommended: not used

Complexity Level: Advanced

The Get Object Info query overrides the query by the same name defined to SiteMinder. APS does not use this query at this time.

Lookup

Default: n/a

Recommended: not used

Complexity Level: Advanced

The Lookup query overrides the query by the same name defined to SiteMinder. APS does not use this query at this time.

Init User

Default: n/a

Recommended: not used

Complexity Level: Advanced

The Init User query overrides the query by the same name // defined to SiteMinder. APS does not use this query at this time.

Authenticate User

Default: SELECT Name FROM SmUser

WHERE Name='%s' AND Password='%s'

Recommended: Defaults from SiteMinder, required

Complexity Level: Basic

The Authenticate User query overrides the query by the same name defined to SiteMinder. APS uses this query to determine if the old password entered during a password change is valid.

The first parameter is the user's name (entered to SiteMinder) and the second value is the (clear-text) old password as entered during the change password process.

This query can be a stored procedure, but the replacement parameters must retain their order and meaning. If the password is encrypted, then this query almost must be a stored procedure.

Get User Property

Default: SELECT %s FROM SmUser

WHERE Name='%s'

Recommended: Defaults from SiteMinder, required

Complexity Level: Basic

The Get User Property query overrides the query by the same name defined to SiteMinder. APS uses this query to retrieve the attribute values defined for the user.

The first parameter is always replaced with an asterisk (retrieve all defined columns), the second parameter is the user's id. If all columns should not be returned, this query should be overridden to reference a stored view in the database that returns fewer columns. Note that only columns returned on this query can be used in overrides or as macros in mail or redirections.

The first parameter is always replaced as a constant asterisk. A query could be defined with this, but then APS could not use the query defined to SiteMinder (which contains a replacement parameter in this position).

This query can be a stored procedure (if the underlying RDBMS supports rows returned from stored procedures), but the replacement parameters must retain their order and meaning.

Set User Property

Default: UPDATE SmUser

SET %s='%s'

WHERE Name='%s'

Recommended: Defaults from SiteMinder, required

Complexity Level: Intermediate

The Set User Property query overrides the query by the same name defined to SiteMinder. APS uses this query to set attribute values for the user.

The first parameter is the (mapped) name of the attribute (column) to modify, the second is the value to set it to. The third parameter is the user's name.

APS does special processing when using this query. If the query defined to APS (or SiteMinder) uses UPDATE, then APS will build a query to update all columns at once, using standard SQL syntax.

If, however, a stored procedure is used for this query, APS will call the stored procedure for each change. Parameters must appear in the same order for stored procedures.

The use of the UPDATE query is for higher performance.

If column access is to be restricted, create a stored VIEW in the database and use an UPDATE query to the stored view.

Get User Properties

Default: n/a

Recommended: not used

Complexity Level: Advanced

The Get User Properties query overrides the query by the same name defined to SiteMinder. APS does not use this query at this time.

User Properties

Default: n/a

Recommended: not used

Complexity Level: Advanced

The User Properties setting overrides the setting by the same name defined to SiteMinder. APS does not use this query at this time.

Lookup User

Default: SELECT Name, 'User' AS Class

FROM SmUser

WHERE %s

Recommended: Defaults from SiteMinder, required

Complexity Level: Basic

The Lookup User query overrides the query by the same name defined to SiteMinder. FPS and APSExpire use this query to locate users in the directory.

The parameter is the WHERE clause built up by FPS or APSExpire.

Get User Groups

Default: See Description

Recommended: Defaults from SiteMinder, required

Complexity Level: Basic

The Get User Groups query overrides the query by the same name defined to SiteMinder. APS uses it to return the list of group in which the current user is a member. The default query is:

SELECTSmGroup.Name
FROMSmGroup, SmUser, SmUserGroup
WHERE SmUser.Name='%s' AND
	SmUser.UserID=SmUserGroup.UserID
	AND
		SmGroup.GroupID=SmUserGroup.GroupID

The parameter is the user's name.

Each row returned represents a group name of which the user is a member.

Is Group Member

Default: See Description

Recommended: Defaults from SiteMinder, required

Complexity Level: Basic

The Is Group Member query overrides the query by the same name defined to SiteMinder. APS uses it to determine if the user is in a specific group, both for internal purposes and to determine the result of IsInGroup() calls in an override expression. The default query is:

SELECT ID FROMSmUserGroup
		WHERE UserID=
			(SELECT UserID FROM SmUser
			WHERE Name='%s')
		AND GroupID=
			(SELECT GroupID FROM SmGroup
			WHERE Name='%s')

The first parameter is the user's name, the second is the name of the group of interest.

If the result of the query contains any rows or data, the user is considered a member of the group.

Set Password

Default: See Description

Recommended: Defaults from SiteMinder, required

Complexity Level: Basic

The Set Password query overrides the query by the same name defined to SiteMinder. APS uses it to actually change the user's password. Typically, it is a stored procedure, but it need not be. The default query is:

UPDATE SmUser SET Password='%s' WHERE Name='%s'

The first parameter is the new password, the second is the name of the user.

Note that the password may be encrypted, if SmAPSEx encrypted it.

This query can be a stored procedure (and should be), but the replacement parameters must retain their order and meaning.

Passwords will always be set using this query, never the Set User Properties query above.

Get Login History

Default: None

Recommended: Required if login history to be kept

Complexity Level: Intermediate

The Get Login History query does not exist in the SiteMinder Query Scheme and has no default. Therefore, a query must be defined if Login History is to be maintained.

Login History contains an entry for each login attempt by a user. Typically, it will be a separate table containing two fields, the history entry and the user's name.

The next three queries are also used to manipulate login history.

The query has one parameter that is the user's name.

The Get Login History query must return a single column with the login history entry. Its name is irrelevant. The entries should be returned in date order.

The actual names of the table and columns are defined by the query and do not matter to APS.

An example query might be:

SELECT smapsLoginHistory
		FROM LoginHistory
		WHERE Name='%s'
		ORDER BY smapsLoginHistory
Set Login History

Default: None

Recommended: Required if login history to be kept

Complexity Level: Intermediate

The Set Login History query does not exist in the SiteMinder Query Scheme and has no default. Therefore, a query must be defined if Login History is to be maintained.

Login History contains an entry for each login attempt by a user. Typically, it will be a separate table containing two fields, the history entry and the user's name.

The query has two parameters. The first is the Login History value and the second is the user's name.

The actual names of the table and columns are defined by the query and do not matter to APS.

An example query might be:

INSERT INTO LoginHistory (smapsLoginHistory, Name) VALUES ('%s','%s')
Delete Login History

Default: None

Recommended: Required if login history to be kept

Complexity Level: Intermediate

Note: The Delete Login History query does not exist in the SiteMinder Query Scheme and has no default. Therefore, a query must be defined if Login History is to be maintained.

Login History contains an entry for each login attempt by a user. Typically, it will be a separate table containing two fields, the history entry and the user's name.

Delete Login History query is used by APS to clean out old history values (before a specific date and time).

The query has two parameters. The first is the date and time to delete before and the second is the user's name.

The actual names of the table and columns are defined by the query and do not matter to APS.

An example query might be:

DELETE FROM LoginHistory WHERE LEFT(smapsLoginHistory, 15)<'%s' AND Name='%s'
Clear Login History

Default: None

Recommended: Required if login history to be kept

Complexity Level: Intermediate

The Clear Login History query does not exist in the SiteMinder Query Scheme and has no default. Therefore, a query must be defined if Login History is to be maintained.

Login History contains an entry for each login attempt by a user. Typically, it will be a separate table containing two fields, the history entry and the user's name.

The Clear Login History query is used by APSAdmin to clean out all of the login history for a specific user.

The query has a single parameter used to identify the user.

The actual names of the table and columns are defined by the query and do not matter to APS.

An example query might be:

DELETE FROM LoginHistory WHERE Name='%s'
Get FPS Log

Default: None

Recommended: Required if FPS log to be kept

Complexity Level: Advanced

The Get FPS Log query does not exist in the SiteMinder Query Scheme and has no default. Therefore, a query must be defined if FPS Logging is to be maintained.

The FPS Log contains an entry for each FPS usage attempt by a user. Typically, it will be a separate table containing two fields, the log entry and the user's name.

The next two queries defined are also used to manipulate the FPS Log.

The query has one parameter that is the user's name.

The Get FPS Log query must return a single column with the log entry. Its name is irrelevant. The entries should be returned in date order.

The actual names of the table and columns are defined by the query and do not matter to APS.

An example query might be:

SELECT smfpsLog FROM FPSHistory

WHERE Name='%s'

ORDER BY smfpsLog

Add FPS Log

Default: None

Recommended: Required if FPS log to be kept

Complexity Level: Advanced

The Add FPS Log query does not exist in the SiteMinder Query Scheme and has no default. Therefore, a query must be defined if FPS Logging is to be maintained.

The FPS Log contains an entry for each FPS usage attempt by a user. Typically, it will be a separate table containing two fields, the log entry and the user's name.

The query has two parameters. The first is the FPS Log value and the second is the user's name.

The actual names of the table and columns are defined by the query and do not matter to APS.

An example query might be:

INSERT INTO FPSHistory (smfpsLog, Name) VALUES ('%s','%s')
Clear FPS Log

Default: None

Recommended: Required if FPS log to be kept

Complexity Level: Advanced

The Clear FPS Log query does not exist in the SiteMinder Query Scheme and has no default. Therefore, a query must be defined if FPS Logging is to be maintained.

The FPS Log contains an entry for each FPS usage attempt by a user. Typically, it will be a separate table containing two fields, the log entry and the user's name.

The query has a single parameter used to identify the user.The Clear FPS Log query is used by APSAdmin to clean out all of the FPS Log entries for a specific user.

The actual names of the table and columns are defined by the query and do not matter to APS.

An example query might be:

DELETE FROM FPSHistory WHERE Name='%s'
Set Password Checksum

Default: None

Recommended: Required if Auto Force Change used

Complexity Level: Advanced

Note: The Set Password Checksum query does not exist in the SiteMinder Query Scheme and has no default. Therefore, a query must be defined if Auto Force Change functionality is required.

The Auto Force Change keyword in this file tells APS to check for password changes outside of APS and, if detected, force the user to change their password at next login. It is used to automatically treat external (administrative) password changes as Force Immediate Change situations without requiring changes to the administration utility.

Under LDAP, APS uses the smapsPassword attribute to handle this functionality. Under ODBC, this is not necessarily possible. Databases are typically protected so that passwords cannot be read back.

If Auto Force Change is to be used, this and the following query must be defined. They are almost always stored procedures.

The query has a single parameter used to identify the user (the user's password has already been changed).

Typically, the implementation of this functionality uses some special attribute to store the checksum (or the entire password value, for that matter).

An example query might be:

CALL SetPasswordChecksum('%s')
Test Password Checksum

Default: None

Recommended: Required if Auto Force Change used

Complexity Level: Advanced

Note: The Test Password Checksum query does not exist in the SiteMinder Query Scheme and has no default. Therefore, a query must be defined if Auto Force Change functionality is required.

The Auto Force Change keyword in this file tells APS to check for password changes outside of APS and, if detected, force the user to change their password at next login. It is used to automatically treat external (administrative) password changes as Force Immediate Change situations without requiring changes to the administration utility.

Under LDAP, APS uses the smapsPassword attribute to handle this functionality. Under ODBC, this is not necessarily possible. Databases are typically protected so that passwords cannot be read back.

If Auto Force Change is to be used, this and the previous query must be defined. They are almost always stored procedures.

The query has a single parameter used to identify the user. The function should return a numeric or boolean value, where non-zero indicates that the checksum is invalid.

Typically, the implementation of this functionality uses some special attribute to store the checksum (or the entire password value, for that matter).

An example query might be:

?=CALL TestPasswordChecksum('%s')
Compare FPS Answer

Default: None

Recommended: Required if FPS Answers are encrypted

Complexity Level: Advanced

Note: The Compare FPS Answer query does not exist in the SiteMinder Query Scheme and has no default. Therefore, a query must be defined if FPSí ODBC Encrypt functionality is required.

The answers to FPS questions can be encrypted in an ODBC database. This is indicated to APS using the ODBC Encrypt keyword in the [FPS-Verify] section of the APS.cfg file. This query is one way that sites can implement this encryption.

There is no default for this query. If not defined and ODBC Encrypt was specified in APS.cfg, FPS will generate an error, since it won't know how to compare an encrypted answer (this is assuming that the encryption is not being performed by SmAPSEx).

The query must be a stored procedure that takes three arguments (or, at least, three substitution parameters) and return a numeric or boolean value (non-zero indicates that the compare is true).

The first parameter is the user name. The second parameter is the name of the attribute, as configured to APS. The third parameter is the user-entered answer (in clear text).

The implementation of this function usually encrypts (or hashes) the user supplied value (the third parameter) and compares it to the value stored in the user entry.

An example query might be:

?=CALL CompareFPSAnswer('%s', '%s', '%s')
Add To Group

Default: None

Recommended: Required if groups maintained by APSAdmin

Complexity Level: Advanced

Note: The Add To Group query does not exist in the SiteMinder Query Scheme and has no default. Therefore, a query must be defined if the APSAdmin API is to be used to maintain group memberships.

The APSAdmin API functions use this query to add users to an existing group (creation of groups is not supported).

There is no default query for this purpose. If not specified and a user must be added to a group, an error will be logged and the update will fail.

An example query might be:

INSERT INTO SmUserGroup (UserID, GroupID) VALUES ('%s', '%s')
Remove From Group

Default: None

Recommended: Required if groups maintained by APSAdmin

Complexity Level: Advanced

Note: The Remove From Group query does not exist in the SiteMinder Query Scheme and has no default. Therefore, a query must be defined if the APSAdmin API is to be used to maintain group memberships.

The APSAdmin API functions use this query to remove users from an existing group.

There is no default query for this purpose. If not specified and a user must be removed from a group, an error will be logged and the update will fail.

An example query might be:

DELETE FROM SmUserGroup

WHERE UserID='%s' AND

GroupID='%s'APSAdmin

Admin Translation

Default: None

Recommended: Required in certain APSAdmin scenarios.

Complexity Level: Advanced

Note: The Admin Translation query does not exist in the SiteMinder Query Scheme and has no default. Therefore, a query must be defined if the APSAdmin API is to be used in certain scenarios.

This query takes a single parameter that is the value entered by the administrator on the APSAdmin user selection form. The query is expected to return a single record with at least one column that is the user's name (the one used in all of the other queries). If not specified, then the query is not used and the data entered is expected to be the user's name. If multiple records or no records are returned, a "User record could not be found" error is displayed to the administrator. If multiple records are returned, an error is issued to the console log as well.

This query is typically used if the administrator is expected to identify users to APSAdmin using something other than userid, such as membership number.

An example query might be:

SELECT Name FROM Users WHERE MemberID='%s'

APSExpire

The [APSExpire] section of the APS configuration file controls the operation of the APSExpire utility, described in the chapter entitled Daily Processing (APSExpire).

In the APS Configuration File, a site defines jobs by name. Each setting is the name of a job and the values define the criteria for the job. When APSExpire executes, a job name must be specified on its command line. The program will look for the definition of this job in this section of the configuration file.

Each job defines a user directory or subset of a user directory. The syntax is different for ODBC and LDAP directories.

Overrides are not supported in this section.

LDAP Directories

For LDAP directories, jobs are defined using this syntax:

<job name>= <LDAP directory>
			READ(<ip>)
			BASE(<base DN>)
			SCOPE(<scope>)
			FILTER(<filter>)

<job name> is an arbitrary name for the job.

<ip of LDAP directory> is the ip address, the network name, or the SiteMinder User Directory name of an LDAP directory defined to SiteMinder through the Policy Interface (it cannot contain spaces if used here). If it is an ip address, it may contain the port address as well. This must match up with the definition of a User Directory in the SiteMinder Policy Store (APSExpire will attempt to look up the directory using this value).

READ(<ip>) is an optional clause that tells APSExpire to read from a different directory than the base directory. In some cases, much higher performance can be achieved by reading from a dedicated replicant directory that either SiteMinder does not use at all or is the last directory in a failover chain. If specified, however, the alternate directory must be a replicant of the "real" directory.

BASE(<search Base>) defines the scope of the search. It is entire optional. If not specified, APSExpire will search the entire directory using the search base defined in the SiteMinder User directory entry. This is useful when an entire LDAP directory is not to be processed as a single job. Sites do this when the LDAP directory is very large and APSExpire processing is to be spread over multiple servers or jobs.

SCOPE(<scope>) is optional and is generally used with the BASE option above. <scope> can either be "base" or "sub" (without quotes). It specifies how the LDAP search should be processed.

FILTER(<extra filter>) is another optional setting that allows a site to further refine a job. This filter is ANDed with any filters that APSExpire uses for its own operations. Once again, this is intended to segregate an LDAP directory into smaller jobs for performance reasons.

When using BASE, SCOPE and FILTER, it is the responsibility of the site to make sure that every user will be processed. APSExpire does not examine the sum of all defined jobs to ensure that all users get processed.

ODBC Directories

For ODBC directories, jobs are defined using this syntax:

<job name>= <ODBC directory>

WHERE(<extra WHERE clause>)

<job name> is an arbitrary name for the job.

<ODBC directory> is the DSN name or the SiteMinder User Directory name of an ODBC user directory (neither can have embedded spaces in this context) defined to SiteMinder through the Policy Interface. This must match up with the definition of a User Directory in the SiteMinder Policy Store (APSExpire will attempt to look up the directory using this value).

WHERE(<extra WHERE clause>) is another optional setting that allows a site to further refine a job. This clause is ANDed with any WHERE clause that APSExpire uses for its own operations. This is intended to segregate an ODBC directory into smaller jobs for performance purposes.

When using WHERE, it is the responsibility of the site to make sure that every user will be processed. APSExpire does not examine the sum of all defined jobs to ensure that all users will be processed.

General FPS Settings

All FPS settings appear in the APS configuration file after the keyword [FPS]:

Audit Log

Value: File Path

Default: off

Recommended: yes

Complexity Level: Basic

FPS can log all attempts, successful or failed, to an audit log. This log is written to a flat file in comma-delimited format (suitable for import into many database and spreadsheet applications).

To specify the location of this log file, use this setting.

There is no way to control the format or content of this log, nor is there provision for wrapping or deleting the file. If this setting does not appear in the configuration file, no audit log will be written. Please be sure that the user under which the SiteMinder Policy Server processes are running can create and write to this file.

This file is not terribly useful. A site should check its contents to determine if the information is worth keeping.

Audit Log=/usr/Netegrity/SiteMinder/Logs/FPS.log
Directory

Value: Server name or ip address for LDAP,

SN name for ODBC

Default: 127.0.0.1:389

Recommended: required

Complexity Level: Basic

This keyword tells FPS which directories to search when FPS is invoked.

Each instance specifies one or more SiteMinder user directories.

After the list of directories, an optional condition can be defined that tells FPS when that particular set of directories should be searched. This condition is surrounded by square brackets ("[" and "]") and can contain a partial URL (or stem) of the Forgot stub This URL must contain the port number, if other than 80, and cannot contain the "http:" or "https:" prefix. FPS will use the full URL of the FORGOT stub that invoked the process and, if the specified stem is included entirely, that directory or set of directories will be used.

If multiple lines exist with the Directory keyword and apply, all lines will be used.

If the same directory appears in more than one line, it will only be searched once.

Directories are specified as the ip address and port of an LDAP directory server or servers OR the DSN name of an ODBC directory.

If a nonstandard LDAP port (not 389) is used, it must be appended to each ip address in the list that it applies to, separated from the ip address by a colon.

Directory=127.0.0.1
Directory=DSN_CNA DSN_SCA [//www.acme-calif.com]
Directory=DSN_TX [//www.acme-texas.com]

If the user requesting FPS came in from www.acme-calif.com, FPS will search the local LDAP directory (127.0.0.1) and the ODBC directories with the DSN's of DSN_NCA and DSN_SCA.

If the user arrived from www.acme-texas.com, then the LDAP directory and DSN_TX will be searched.

The directories will be searched in the order that they appear.

FPS looks into the list of User Directories stored in the SiteMinder Policy Store, looking for an entry that references the server identified by this setting. FPS will use the first entry that matches to obtain administrator credentials and the search base (for LDAP directories).

Some sites will define multiple User Directory entries that reference the same physical LDAP server, each User Directory defining a different search base (or, in rare situations, credentials). This can confuse FPS, causing it to read the wrong portion of these LDAP directories.

To get around this problem, a site should trick SiteMinder (and FPS) into thinking that the multiple User Directory entries are implemented on separate servers. This is easily done using the hosts file on the Policy Server (it can be done using DNS as well, though that is a little more complicated) to define multiple names for the same physical IP address. Each User Directory should then reference a different alias for the same physical LDAP server. In the APS.cfg file, this setting, Directory, can then uniquely identify the proper User Directories.

Allowed

Value: Standard override expression

Recommended: If required

Complexity Level: Basic

The Allowed keyword is used to define which users in a directory are allowed to use FPS. If no Allowed keyword exists in this section, all users in the directory will be allowed to use FPS. If a single instance of this keyword exists, then rights must be explicitly granted to this functionality.

The Allowed keyword may appear as many times as necessary.

Allowed=true

FPS LDAP Settings

Under APS 3.0, there was a section called [LDAP] that was used to define the LDAP directory to be processed by FPS. This entire section has been eliminated from the APS Configuration File in APS Version 4.0.

The Server keyword has been replaced with the Directory keyword in the prior section. If APS finds the Server keyword, its value will be used as though presented in the [FPS] section using the Directory keyword and a warning will be issued.

The Administrator, Password, Search Base, ObjectClass and Lockout Group DN keywords are ignored. A warning is issued if these settings are encountered. APS now gets this information from the SiteMinder User Directory definition.

The Disallowed keyword is no longer supported. If encountered, it will be processed as though it appeared in the [FPS] section with the Allowed keyword, with a prefixed NOT operator and a warning will be issued.

The Allowed keyword is no longer supported in this section. If encountered, it will be processed as though it appeared in the [FPS] section and a warning will be issued.

FPS Identify Process

The first thing that FPS must do when invoked by a user is to attempt to identify the user. All of the information that FPS needs to do this is defined in a section headed by a single line in the FPS configuration file containing the text:

[FPS-Identify]

Everything appearing after this line and before the start of another section is considered part of the identification section.

Prior to APS Version 4.0, this section was called [Identify]. In Version 4, this was renamed to [FPS-Identify]. The old name is still recognized and will be processed correctly, but a warning will be issued about the use of the deprecated name.

This section specifies the form(s) required to identify the user, how the forms are to be used, and how to handle various typical error conditions.

Collecting Identification Information

URL

Value: URL

Default: none

Recommended: required

Code Description: URL

Complexity Level: Basic

When FPS is first invoked by a user, this is the page that FPS will first cause to be displayed. It is expected to present a form to the user. It must be a page that is not protected by SiteMinder. It need not be on the same directory as the Forgot stub.

URL=/FPS/Identify.jsp
Missing URL

Value: URL

Default: the value of URL above

Recommended: yes

Code Description: Missing URL

Complexity Level: Intermediate

If the user fails to fill in all of the required fields or one or more of the fields contain an invalid character, FPS will redirect the user to this URL. The URL will have a list of this missing or invalid fields appended to it, separated with ampersands ("&"). A question mark will be appended before the field names, if required.

There is currently no way to tell if the fields in error were empty but required, or if they contained invalid data.

Missing URL=/FPS/Identify-Missing.jsp
Multiple URL

Value: URL

Default: the value of Missing URL above, with ?MoreData
appended

Recommended: yes

Code Description: Multiple URL

Complexity Level: Intermediate

If the user filled out the form presented by the URL, but multiple users were found matching the input criteria, this page is displayed. Depending upon your site, one of two cases may be in effect, in which case, this form must handle the correct case.

First, if the required fields on the identify form must absolutely define a single user, then you have a data or login error in your flow and this page must handle the error case.

If, on the other hand, your identify form has optional fields on it, this page might just request further information. For example, if your identification form requires first name and last name, but mail is optional, there may be more than one "Bill Smith" on file. This page could then request that one or more of the optional fields be supplied to further refine the search.

Multiple URL=/FPS/Identify.jsp?MoreData

Error Cases

Not Found URL

Value: URL

Default: the value of Missing URL above, with ?NotFound appended

Recommended: yes

Code Description: Not Found URL

Complexity Level: Intermediate

If no user matches the input criteria, this page will be presented to the user. This is a terminating case (the FPS process is done, since no user can be identified).

If not supplied, the value of Missing URL is used, with ?NotFound appended.

Not Found URL=/FPS/Unknown.jsp
Disabled URL

Value: URL

Default: none

Recommended: yes

Code Description: Disabled URL

Complexity Level: Basic

If the user is properly identified, but it turns out that the user is disabled for any reason, the user will be redirected to this page. This is a terminating case, since the FPS process cannot continue.

Note that this case is different, but related to, the Lockout case. Typically, this page refers the user to a customer server center.

Disabled URL=/FPS/Disabled.jsp
Disabled Mail

Value: Mail file(s)

Default: none

Recommended: if your site has email addresses on file

Complexity Level: Advanced

If the user is properly identified, but it turns out that the user is disabled for any reason, FPS can send mail. This setting specifies the files to send. If possible, mail should be sent to the actual user, since the user accessing FPS might not be the owner of the account.

This setting is optional and has no default.

Disabled Mail=Disabled.email

Form Processing

These settings describe the identification form, its fields, and its requirements. FPS uses these settings to ensure that the entered data is valid.

It may seem possible to perform these edits using JavaScript. In fact, it is highly recommended that a site do so to reduce round trips to the server. However, JavaScript processing can be turned off by some browsers and can be modified by a savvy user, so FPS performs these edits as well.

Required

Value: HTML field names

Default: none

Recommended: required

Complexity Level: Basic

This setting contains a list of the HTML fields on the identify (and missing and multiple) forms that are required. If any field identified by this setting is posted without a value, FPS will redirect the user to the page identified by the Missing URL setting above.

Names are not case sensitive, may appear in any order and are separated by semicolons. Multiple fields with the same name are not supported.

An FPS configuration error will occur if a field is posted that is neither required nor optional.

Required=FirstName;LastName
Optional

Value: HTML field names

Default: none

Recommended: if needed

Complexity Level: Intermediate

Some fields on the identification forms can be optional; that is, the user need not provide a value. Usually, these fields are only used to further refine the user identification process (see the example under the description for the Multiple URL setting).

This setting contains a list of HTML fields that are optional.

Names are not case sensitive, may appear in any order and are separated by semicolons. Multiple fields with the same name are not supported.

An FPS configuration error will occur if a field is posted that is neither required nor optional.

If the Submit button has a name (is renamed), then its value will be posted. In this case, its name must be defined as an Optional field.

Optional=Phone;City;State;UserID;phonenow;Mail
Lookup

Value: special (see text)

Default: none

Recommended: required

Complexity Level: Basic

Once the identify form is posted and all of the fields validated (required fields not blank and no fields contain invalid characters), this setting is used to determine how to look up the user.

This setting consists of HTML Field/attribute mappings, separated by either an equal sign ("=") or a equal sign/tilde ("=~"). Each pair is separated from the others by a semicolon. Names are not case-sensitive, but the order that they appear can have a significant performance impact.

A pair is only used if there is non-blank input for the HTML field.

For each combination, FPS builds a search string for the user, comparing the attribute/column with the value supplied on the form. If an equal sign is used, then the value must compare exactly (but may be subject to the comparison rules of the underlying Directory). If the tilde ("~") is used, then a case-insensitive match is performed.

Basically, you want the most specific items first in the list, with less specific items appearing later.

Multiple attributes can be specified for the same HTML field, separated from each other by commas. This indicates that the value of the field could be in any of the supplied attributes. This is typically used for phone numbers, where the supplied number could be in the telephone, homePhone, or mobile attributes. FPS will create an OR condition in this case that will be ANDed with all other clauses.

Not all fields need to appear in the Lookup setting, but a field in this setting that is neither Required nor Optional will never be used for lookup. A field that does not appear in this setting could be used in mail, for example (in some examples, the user can enter a "Phone number where you can be reached right now" that could be sent as mail to a customer service desk in the event of an error case).

Lookup=UserID=uid;FirstName=givenname;
			  LastName=sn;Mail=mail;
			  Phone=telephoneNumber,homePhone;
			  City=~l;State=st

Controlling Frequency of Use

Max Success Frequency

Value: number of days

Default: none

Recommended: 7

Complexity Level: Advanced

Some sites may wish to limit the use of FPS to prevent misuse. Some users may use FPS instead of their password, if the password content policies make memorable passwords too difficult. This setting can be used to prevent a user from successfully using FPS too frequently.

This setting specifies, in days, how much time must elapse after a successful use of FPS before a user can use FPS again.

For example, if the user uses FPS today to recover his password, he cannot use FPS again for a week if this value is seven. If he attempt to do so, he will be redirected to the Too Recently Used URL below.

For this feature to work with ODBC correctly, the FPS Logging queries (starting on page 107) must be defined.

Max Success Frequency=7
Too Recently Used URL

Value: URL

Default: none

Recommended: required if Max Success Frequency is set above

Code Description: Too Recently Used URL

Complexity Level: Advanced

If a user attempts to use FPS too soon after he has already recovered a password (based on the Max Success Frequency above), the user will be sent to this page.

For this feature to work with ODBC correctly, the FPS Logging queries (starting on page 107) must be defined.

Too Recently Used URL=/FPS/TRU.jsp
Too Recently Used Mail

Value: mail file(s)

Default: none

Recommended: ignored unless Max Success Frequency is set above

Complexity Level: Advanced

If the user is sent to the Too Recently Used URL above, any mail files specified in this setting are also sent, if possible.

For this feature to work with ODBC correctly, the FPS Logging queries (starting on page 107) must be defined.

Too Recently Used Mail=TRU.email
Max Attempts Frequency

Value: number

Default: none

Recommended: 1

Complexity Level: Advanced

FPS is a weak link in your site's security. A user's account can be attacked and entered without using a password using FPS. If a site uses questions to verify the user, the answers to those questions can often be socially engineered or obtained from other sources.

In order to improve security against such a hacker attack, this setting can control how often APS can be used by an account. It specifies, in days, how much time must elapse after any use of FPS (success or failure) before a user can use FPS again.

For example, if Jane Doe uses FPS today to recover John Smith's password today, but either fails to answer the question correctly or leaves the process without answering the question, nobody can use FPS against John Smith's account again for a day if this value is one. If someone attempts to do so, they will be redirected to the Too Recently Attempted URL below.

For this feature to work with ODBC correctly, the FPS Logging queries (starting on page 107) must be defined.

Max Attempts Frequency=1
Too Recently Attempted URL

Value: URL

Default: none

Recommended: required if Max Attempts Frequency is set above

Code Description: Too Recently Attempted URL

Complexity Level: Advanced

If a user attempts to use FPS too soon after any attempt to recover a password (based on the Max Attempts Frequency above), the user will be sent to this page.

For this feature to work with ODBC correctly, the FPS Logging queries (starting on page 107) must be defined.

Too Recently Attempted URL=/FPS/TRA.jsp
Too Recently Attempted Mail

Value: mail file(s)

Default: none

Recommended: ignored unless Max Attempts Frequency is set

Complexity Level: Advanced

If the user is sent to the Too Recently Attempted URL above, any mail files specified in this setting are also sent, if possible.

For this feature to work with ODBC correctly, the FPS Logging queries (starting on page 107) must be defined.

Too Recently Attempted Mail=TRA.email

Preventing Attacks

Lockout Count

Value: number

Default: none

Recommended: 3

Complexity Level: Intermediate

Adept hackers will attempt to access your system using FPS. Even if your site uses validation questions, a hacker can gain access by socially engineering the answers to questions.

This setting essentially sets a "3 strikes, you're out" policy on FPS. This setting identifies the number of failed attempts to use FPS that occur before FPS is locked out for that account.

Each time that a user fails to complete an FPS session, this counter is incremented by one. Once the count reaches Lockout Count, FPS is no longer available for this account.

This number is only reset upon successful completion of an FPS session. Note that this means that if the account is locked out, there is no way for the user to reset this value. The only way for this value to be reset is for an administrator to clear smfpsLockoutCounter using a User Administration tool such as APSAdmin or CA Identity Manager.

This setting can automatically be reset upon successful SiteMinder authentication if the Reset FPS Lockout setting is turned on.

Lockout Count=3
Lockout URL

Value: URL

Default: none

Recommended: 3

Code Description: Lockout URL

Complexity Level: Intermediate

If the user is locked out due to the Lockout Count, the user will be redirected to this page. The user will always be redirected to this page the first time that the count is reached. Further attempts to use FPS will also redirect the user to this page.

Lockout URL=/FPS/Lockout.jsp
Lockout Mail

Value: mail file(s)

Default: none

Recommended: if possible

Complexity Level: Advanced

If the user is locked out of FPS when attempting to recover a password, the files specified by this setting will be sent as email, if possible.

This is useful to detect intruders, in that the mail could be sent to an administrator account.

It is also useful to send mail to the user, if possible, since the user will not see the Lockout URL if the account is disabled by a hacker.

Lockout Mail=Lockout.email
Lockout Timer

Value: 0 to 365 * 24 * 60

Default: 0

Recommended: if possible

Complexity Level: Advanced

If the user is locked out of FPS when attempting to recover a password, FPS normally locks out the user permanently. This setting specifies a delay to use instead. The user will not be allowed to use FPS for this many minutes.

Lockout Timer=60

FPS Verify Process

At the end of the Identify phase, FPS knows the identity of the user. Some sites may wish to attempt to verify that the user is who he claims to be (this process is highly recommended). If this is desired, the settings in the FPS-Verify section should be used.

All of the information that FPS needs to do this is defined in a section headed by a single line in the FPS configuration file containing the text:

[FPS-Verify]

Everything appearing after this line and before the start of another section is considered part of the verify section.

Prior to APS Version 4.0, this section was called [Verify]. In Version 4, this was renamed to [FPS-Verify]. The old name is still recognized and will be processed correctly, but a warning will be issued about the use of the deprecated name.

This section specifies the form(s) required to verify the user, how the forms are to be used and how to handle various common error conditions.

Forms

These settings define the forms that FPS should use to query the user for verification information.

URL

Value: URL

Default: none

Recommended: yes

Code Description: URL

Complexity Level: Intermediate

If verification is to be used, this setting must be specified. This setting tells FPS where to send the user for verification. It is a form.

URL=/FPS/Verify.jsp
Missing URL

Value: URL

Default: the value of URL above

Recommended: yes

Code Description: Missing URL

Complexity Level: Intermediate

If the user fails to fill in all of the required fields or one or more of the fields contain an invalid character, FPS will redirect the user to this URL. The URL will have a list of this missing or invalid fields appended to it, separated with ampersands ("&"). A question mark will be appended before the field names, if required.

There is currently no way to tell if the fields in error were empty, but required, or if they contained invalid data.

URL=/FPS/Verify.jsp
Retry URL

Value: URL

Default: none

Recommended: no

Code Description: Retry URL

Complexity Level: Intermediate

If the user fails to answer the questions properly, he can be sent to one of two places. If this setting is not specified, the user will be sent to the page identified by the Invalid URL setting below, otherwise this setting will be used.

If set, the user will be sent to the Retry URL to re-attempt verification. Depending on the values in the Initial setting, the initial values may or may not differ. It is up to the site to control the number of times that retries can occur. Usually, this is controlled using the Restrict or Consume special instructions so that initial values are not reused and eventually run out (sending the user to the No Data URL below).

The use of this keyword is in no way affected by, nor affects, the Lockout Count settings, since Lockout Count only affects entry to the entire process, not looping within the process.

The use of this keyword significantly reduces the security of FPS, so we do not recommend its use.

Retry URL=/FPS/RetryVerify.jsp

Error Conditions

Invalid URL

Value: URL

Default: the value of URL above

Recommended: yes

Code Description: Invalid URL

Complexity Level: Intermediate

If the user answers the verification wrong, FPS will direct the user to this page. This is a terminal condition; the FPS process is terminated.

Invalid URL=/FPS/Unverified.jsp
Invalid Mail

Value: mail file(s)

Default: none

Recommended: yes

Complexity Level: Advanced

If the user answers the verification wrong, FPS will send these files, if possible, via email.

Invalid Mail=NoVerify.email
No Data URL

Value: URL

Default: none

Recommended: yes, if required

Code Description: No Data URL

Complexity Level: Intermediate

The Initial setting (described below) specifies the initial field settings that the URL is to receive before processing. In the Initial setting, some values may be marked required. If so, and no value (or not enough values) can be determined, the user will be sent to this page instead. This is a terminal condition (FPS processing terminates - the user cannot use FPS).

Typically, this is a page directing the user to a customer service representative.

No Data URL=/FPS/NoData.jsp
No Data Mail

Value: mail file(s)

Default: none

Recommended: yes, if required

Complexity Level: Advanced

If the user will be redirected to the No Data URL above, the file(s) specified by this setting can also be sent via email.

No Data Mail=NoData.email
Timeout URL

Value: URL

Default: none

Recommended: yes

Code Description: Timeout URL

Complexity Level: Intermediate

This setting specifies a page to send the user if the user failed to answer the questions within the period specified by the Timeout setting ("You did not answer quickly enough"). This reduces the ability of a hacker to socially engineer the answers to the verification question(s).

This is a terminal condition (FPS processing terminates - the user cannot use FPS at this time).

Timeout URL=/FPS/Timeout.jsp

Form Handling

These settings describe the verify form, its fields, and its requirements. FPS uses these settings to ensure that the entered data is valid.

It may seem possible to perform these edits using JavaScript. In fact, it is highly recommended that a site do so to reduce round trips to the server. However, JavaScript processing can be turned off by some browsers and can be modified by a savvy user, so FPS performs these edits as well.

Required

Value: HTML field names

Default: none

Recommended: required

Complexity Level: Basic

This setting contains a list of the HTML fields on the verify (and retry) forms that are required. If any field is posted without a value, FPS will redirect the user to the page identified by Missing URL setting above.

Names are not case sensitive, may appear in any order and are separated by semicolons. Multiple fields with the same name are only supported using special instructions (see the Initial setting below). If the special instruction field requires multiple values, the correct number of values must be specified by the user.

An FPS configuration error will occur if a field is posted that is neither required nor optional.

Required=SecretAnswer
Optional

Value: HTML field names

Default: none

Recommended: if needed

Complexity Level: Intermediate

Some fields on the verify form can be optional; that is, the user need not provide a value. For example, if the Submit button has a name (is renamed), then its value will be posted. In this case, its name must be defined as an Optional field.

This setting contains a list of HTML fields that are optional.

Names are not case sensitive, may appear in any order and are separated by semicolons.

An FPS configuration error will occur if a field is posted that is neither required nor optional.

Optional=SubmitButton
Lookup

Value: special (see text)

Defalt: none

Recommended: required

Complexity Level: Advanced

Once the verify form is posted and all of the fields validated (required fields not blank and no fields contain invalid characters), this setting is used to determine how to look up the user.

This setting consists of HTML Field/attribute mappings, separated by either an equal sign ("=") or an equal sign/tilde ("=~"). Each pair is separated from the others by a semicolon. Names are not case-sensitive, but the order that they appear can have a significant performance impact.

A pair is only used if there is non-blank input for the HTML field.

For each combination, FPS builds an evaluation expression for the user, comparing the attribute with the value supplied on the form. If an equal sign is used, then the value must compare exactly (in this case, the comparison defined by the underlying User Directory is irrelevant, FPS will require the exact match). If the tilde ("~") is used, then a case-insensitive compare is performed.

All such expression are combined with an AND operator, then checked against the user previously identified.

Multiple attributes can be specified for the same HTML field, separated from each other by commas. This indicates that the value of the field could be in any of the supplied LDAP attributes. This is typically used for phone numbers, where the supplied number could be in the telephone, homePhone, or mobile attributes. FPS will create an OR condition in this case that will be ANDed with all other clauses.

Not all fields need to appear in the Lookup setting, but a field in this setting that is neither Required nor Optional will never be used for lookup. A field that does not appear in this setting could be used in mail, for example (in some examples, the user can enter a "Phone number where you can be reached right now" that could be sent as mail to a customer service desk in the event of an error case).

If a field has special instructions (see the Initial setting below) that require multiple values, the query will be built appropriately (varies by special instruction).

Lookup=SecretAnswer=~personalAnswerLookup=SecretAnswer=QuestionList
Initial

Value: special (see text)

Deault: none

Recommended: as needed

Complexity Level: Intermediate

Usually, the verify page will need data from the user's record for display (see the chapter entitled Presentation Forms for details as to how this information is passed to the form). This setting controls what information is passed to the form. This is not required if the page does not need information about the user.

Sometimes, this is as simple as putting the identified user's name on the form. Other times, displaying the verification question selected by the user is required.

The format of this setting is as name/value pairs, separated by an equal sign ("="). Multiple pairs are separated by semicolons.

The name in each pair is the name that the page uses to identify the data element. It need not correspond to an HTML element. It is used inside the data cookie to name the field.

The second part of the pair identifies the name of the attribute from which FPS is to read the data value. Multiple values are not supported, except as defined by a Special Instruction.

If the name is prefaced by an asterisk, then the field must have a value. If, after looking up the attribute, the field does not have a value, the user will be redirected to the No Data URL.

Initial=*Name=cn;*Question=secretQuestion

Special Instructions

After the attribute name, special instructions can be specified for the field. Special instructions are surrounded by square brackets ("[" and "]") and immediately follow the attribute name.

Special instructions define special processing or formatting required for the field.

Special instructions consist of keywords separated by commas. Every special instruction requires a Format keyword. Other keywords vary by format. At the time of this writing, only Format=A and Format=B are supported. Additional formats may be supported in the future.

ODBC Encrypt

Value: Attribute list, comma separated

Default: none

Recommended: as required

Complexity Level: Advanced

This setting specifies one or more attributes that must be encrypted or hashed before comparison. FPS will call the Compare FPS Answer query, if that query is defined.

If the Compare FPS Answer query is not defined, it will attempt to call a stored procedure on the User Directory called ODBCEncrypt_<attribute> with two parameters, the user name and the value for the attribute entered by the user. The procedure is expected to return a single Boolean (or integer) result. A non-zero return indicates that the value compared successfully.

ODBC Encrypt=SecretAnswer
Timer

Value: Number

Default: none

Recommended: 300

Complexity Level: Intermediate

This setting controls how much time (in seconds) is allowed to elapse before the user submits the verify form. If the user waits too long, the user will be redirected to the Timeout URL when the page is finally posted.

Timeout=300

FPS Change Password Process

Once the user is verified, you site may allow the user to set their password or may want to generate random passwords. If you wish to allow users to select their own passwords, specify this information in a section starting with:

[FPS-Change]

Everything appearing after this line and before the start of another section is considered part of the change password section.

Prior to APS Version 4.0, this section was called [Change]. In Version 4, this was renamed to [FPS-Change]. The old name is still recognized and will be processed correctly, but a warning will be issued about the use of the deprecated name.

This section specifies the form(s) required to gather a password change from the user, how the forms are to be used and how to handle various common error conditions.

URL

Value: URL

Default: none

Recommended: yes

Code Description: URL

Complexity Level: Basic

If the user will be allowed to select a password, this setting must be specified. This setting tells FPS where to send the user for the input form. It is a form.

URL=/FPS/ChangePassword.jsp
Timeout URL

Value: URL

Default: none

Recommended: yes

Code Description: Timeout URL

Complexity Level: Intermediate

This setting specifies a page to send the user to if the user fails to submit the form within the time period specified by the Timeout setting ("You did not answer quickly enough").

This is a terminal condition (FPS processing terminates - the user cannot use FPS at this time).

Timeout URL=/FPS/Timeout.jsp
Timeout

Value: Number

Default: none

Recommended: 300

Complexity Level: Intermediate

This setting controls how much time (in seconds) is allowed to elapse before the user submits the form. If the user waits too long, the user will be redirected to the Timeout URL when the page is finally posted.

Timeout=300

FPS Confirm Process

At the end of the FPS process, after the user has been identified and perhaps verified, FPS must give the user the information desired. This may include a new password and sometimes includes the user ID.

All of the information that FPS needs to do this is defined in a section headed by a single line in the FPS configuration file containing the text:

[FPS-Confirm]

Everything appearing after this line and before the start of another section is considered part of the confirm section.

Prior to APS Version 4.0, this section was called [Confirm]. In Version 4, this was renamed to [FPS-Confirm]. The old name is still recognized and will be processed correctly, but a warning will be issued about the use of the deprecated name.

This section specifies the form(s) required to confirm information to the user, how the forms are to be used and how to handle various common error conditions.

URL

Value: URL

Default: none

Recommended: yes, if required

Code Description: URL

Complexity Level: Basic

Under normal circumstances, this is the URL of a page to use to confirm the FPS process. Any data identified by the Initial setting (below) will be passed to this URL on its query string.

Some sites may consider this a security hole, so if this value is prefixed by an asterisk, FPS will display its own (internal) form for confirmation and will instead redirect the user to this URL upon completion. If this is the case, no query string will be used (since FPS can build the page dynamically).

If a password and user ID are to be recovered, only one should be displayed on this page (the other should be sent via mail), since both together open a larger security hole.

URL=/FPS/Confirm.jsp
URL=*/HomePage.jsp
Mail

Value: mail file(s)

Default: none

Recommended: yes, if required

Complexity Level: Advanced

At the completion of the FPS process, one or more files can be sent, via email, using this setting.

If the user will be redirected to the No Data URL above, the file(s) specified by this setting can also be sent via email.

If both a password and user id are to be recovered, only one should be sent via mail (the other should be displayed on a page), since both together opens a larger security hole.

There are several special macros available to this mail.

Macro Name

Purpose

Password

Clear text password that was randomly generated or that the user selected.

HalfPassword1

The first half of the new password, in clear text. Useful for mailing half and displaying half.

HalfPassword2

The second half of the new password, in clear text. Useful for mailing half and displaying half.

OneShotPassword

Only generated if the macro is requested, this is a random, 32-character password that can be used within 5 minutes (not-configurable) of generation to log this user in ONCE. Useful to automatically log in the user. Requires the APS Authentication Scheme to be installed.


Mail=Confirm.email
Initial

Value: special (see text)

Default: none

Recommended: as needed

Complexity Level: Intermediate

The confirm page needs the information that it will display (usually the password and/or uid). This setting identifies the information that should be passed to the confirm page.

The format of this setting is as name/value pairs, separated by an equal sign ("="). Multiple pairs are separated by semicolons.

The name in each pair is the name that the page uses to identify the data element. It need not correspond to an HTML element. It is used in the query string to name the field.

The second part of the pair identifies the name of the attribute from which FPS is to read the data value. Multiple values are not supported. You cannot use userPassword, as this is a hashed field. Use password instead.

All of the macros defined in the table under the Mail keyword are available as additional attributes.

Initial=User=uid;PWD=password
Force Change

Default: none

Recommended: yes

Complexity Level: Intermediate

When FPS sets the user's password, it can optionally set the force change password flag in the user's directory entry. FPS will only do this if this setting appears in the FPS configuration file.

Force Change
New Password Length

Value: -32

Default: 8

Complexity Level: Intermediate

At the completion of the process, FPS can reset the user's password. This setting controls the length of the new password. If specified out of the valid range, a length of 8 will be used.

If the user is allowed to change her own password (as described in the [FPS-Change] section), this setting has no effect.

New Password Length=10
Timeout

Value: 0 or 60-3000 seconds

Default: none

Recommended: 90 seconds

Complexity Level: Intermediate

If non-zero, FPS will set the Must Login By date and time to the current time plus this value. If the user does not login to your site within this period, the user will not be allowed to login.

Timeout=90
Allowed Characters

Range: Character list

Default: none

Complexity Level: Advanced

The Allowed Characters keyword specifies a list of characters that are used in a generated password. Only characters listed with this keyword are used in generated passwords, subject to restriction by the Disallowed Characters and Force Case settings.

Each instance of this keyword can specify a list of characters. They may or may not be surrounded by double quotes. Since leading and trailing blanks in a setting value are ignored, these quotes may be necessary. If the value is surrounded by quotes, they will be removed from the list of allowed characters (though any contained quotes will be retained).

Multiple instances of this keyword may exist and may apply. APS will use the characters listed with every applicable instance of this setting.

If no Allowed Characters keyword is valid, then all characters will be used (subject to the Disallowed Characters setting below).

APS does not use characters that are both allowed and disallowed (they will be disallowed).

For example,

Allowed Characters=abcdefABCDEF01234
Disallowed Characters

Range: Character list

Default: none

Recommended: none

Complexity Level: Advanced

The Disallowed Characters keyword specifies a list of characters that are not allowed in a generated password. Characters listed with this keyword are not used in generated passwords.

Each instance of this keyword can specify a list of characters. They may or may not be surrounded by double quotes. Since leading and trailing blanks in a setting value are ignored, these quotes may be necessary. If the value is surrounded by quotes, they will be removed from the list of allowed characters (though any contained quotes will be retained).

Multiple instances of this keyword may exist and may apply. APS uses the characters listed with every applicable instance of this setting.

If no Disallowed Characters keyword is valid, then all characters are allowed (subject to the Allowed Characters setting above).

APS does not use characters that are both allowed and disallowed (they are disallowed).

Disallowed Characters=xyzXYZ56789
Force Case

Range: upper, lower, or none (default)

Default: none

Recommended: none

Complexity Level: Advanced

Controls whether alphabetic characters in generated passwords must be upper or lower case.

Default is "none" (characters may be either upper or lower case).

If Force Case is set to "upper" then a non-zero value for the Minimum Lower Case keyword cannot be satisfied. If Force Case is set to "lower" then a non-zero value for the Minimum Upper Case keyword cannot be satisfied.

For example:

Force Case=none
Minimum Length

Range: 0 to 32

Default: 4

Complexity Level: Intermediate

This setting determines the minimum length of the generated password. If specified out of the valid range, a length of 4 is used.

For example:

Minimum Length=8
Maximum Length

Range: 0 to 32

Default: 32

Complexity Level: Intermediate

This setting determines the maximum length of the generated password. If specified out of the valid range, a length of 32 is used.

For example:

Maximum Length=10
Minimum Length

Range: 0 to 32

Default: 0

Complexity Level: Intermediate

This setting determines the minimum number of upper case characters in a generated password.

Note: Any upper case character generated also contributes toward the required number of characters that are defined in the Minimum Letters and Minimum Alphanumeric keywords.

For example:

Minimum Upper Case=1
Minimum Lower Case

Range: 0 to 32

Default: 0

Complexity Level: Intermediate

This setting determines the minimum number of lower case characters in a generated password.

Note: Any lower case character generated also contributes toward the required number of characters that are defined in the Minimum Letters and Minimum Alphanumeric keywords.

For example:

Minimum Lower Case=4
Minimum Letters

Range: 0-32 characters

Default: 0

Complexity Level: Intermediate

This setting requires that the generated password contain a certain minimum number of alphabetic letters. Alphabetic characters are defined as the letters in the alphabet, regardless of case.

For example:

Minimum Letters=2
Minimum Digits

Range: 0-32 characters

Default: 0

Complexity Level: Intermediate

This setting requires that the generated password contain a minimum number of numeric digits ("0" to "9").

For example:

Minimum Digits=1
Minimum Alphanumeric

Range: 0-32 characters

Default: 0

Complexity Level: Intermediate

This setting specifies that a generated password contains a certain minimum number of alphanumeric characters ("A"-"Z" or "0"-"9").

Note: If this setting is used together with one of the Minimum Letters or Minimum Numbers settings, characters can satisfy both requirements. For example, if Minimum Digits is 4 and this setting is 4, the password 1234 satisfies both requirements.

For example:

Minimum Alphanumeric=1
Minimum Punctuation

Range: 0-32 characters

Default: 0

Complexity Level: Intermediate

This setting specifies that a generated password contain a certain minimum number of punctuation marks. These can be periods, commas, exclamation marks, and so on.

Note: If this setting is used together with the Minimum Other setting, punctuation characters satisfy both requirements.

For example:

Minimum Punctuation=1
Minimum Symbols

Range: 0-32 characters

Default: 0

Complexity Level: Intermediate

This setting specifies that a generated password contain a certain minimum number of symbol characters. Symbols are defined within APS as the following characters and all extended ASCII characters, including diacritical marks:

"~" (tilde)

"@" (at)

"#" (number)

"$" (dollar)

"%" (percent)

"^" (circumflex)

"&" (ampersand)

"*" (asterisk)

"(" (open parenthesis)

")"(close parenthesis)

"_" (underscore)

"-" (hyphen)

"+" (plus)

"=" (equals)

"{" (open brace)

"}" (close brace)

"[" (open bracket)

"]" (close bracket)

"<" (less than)

">" (greater than)

"/" (virgule)

"\" (back slash)

"|" (vertical bar)

 

Note: If this setting is used together with the Minimum Other setting, symbol characters satisfy both requirements.

For example:

Minimum Symbols=1
Minimum Other

Range: 0-32 characters

Default: 0

Complexity Level: Intermediate

This setting specifies that a generated password contains a specified minimum number of non-alphanumeric characters. This includes punctuation marks and other symbols located on the keyboard.

For example:

Minimum Other=1
Maximum Repeat

Range: 0-32 characters

Default: 0

Complexity Level: Basic

This setting specifies maximum number of identical characters that can appear consecutively in a generated password. For example, if this setting is four, then aaaa should not appear anywhere in the password.

Note: This setting is advisory; the password generation algorithm makes every effort to satisfy this limitation but might not be able to, depending on the other settings. For example, if Maximum Repeat is set to 2, the password "A2bbc9j" would satisfy this guidance but "A2bbb9j" would not.

For example,

Maximum Repeat=3

FPS Errors

FPS may encounter an unexpected error during processing. This may be a missing configuration setting (one of the ìexpected errorî pages is not configured), or it may be an error which occurred when communicating with the User Directory. This section defines how such errors are to be reported to the user. Note that all errors arealso written to the SiteMinder Authentication Console Log. In most cases, the Console Log will contain more detailed information about the error that is not useful to the user (or should not be revealed to the user).

All of the information that FPS needs to do this is defined in a section headed by a single line in the FPS configuration file containing the text:

[FPS-Errors]

Everything appearing after this line and before the start of another section is considered part of the errors section.

Prior to APS Version 4.0, this section was called [Errors]. In Version 4, this was renamed to [FPS-Errors]. The old name is still recognized and will be processed correctly, but a warning will be issued about the use of the deprecated name.

URL

Value: URL

Default: none

Recommended: highly

Code Description: URL

Complexity Level: Basic

This is the page used to display errors. The error text will be in the query string (URL encoded).

URL=/FPS/Errors.jsp
Mail

Value: mail file(s)

Default: none

Recommended: highly

Complexity Level: Advanced

When such an error occurs, this setting indicates the file(s) to send via email. The actual error message can be included in the text using the message macro. Typically, this is used to notify an administrator that an error has occurred.

Mail=Errors.email

Handling FPS Mail Errors

This section defines how FPS is to handle the case where a mail file is specified but cannot be sent. This does not occur if the mail cannot be delivered. It only occurs if the mail file(s) cannot be found or if the mail server refuses to accept the message.

All of the information that FPS needs to do this is defined in a section headed by a single line in the FPS configuration file containing the text:

[FPS-No Mail]

Everything appearing after this line and before the start of another section is considered part of this section.

Prior to APS Version 4.0, this section was called [No Mail]. In Version 4, this was renamed to [FPS-No Mail]. The old name is still recognized and will be processed correctly, but a warning will be issued about the use of the deprecated name.

URL

Value: URL

Default: none

Recommended: highly

Code Description: URL

Complexity Level: Basic

This is the page used to display mailing errors. The error text will be in the query string (URL encoded).

URL=/FPS/NoMail.jsp
Mail

Value: mail file(s)

Default: none

Recommended: highly

Complexity Level: Advanced

When such an error occurs, this setting indicates the file(s) to send via email. The actual error message can be included in the text using the message macro. Typically, this is used to notify an administrator that an error has occurred.

There is no guarantee that this mail can be sent either.

Mail=NoMail.email