AS400 connector
You can use the AS400 connector to manage and synchronize users between AS400 and IDM or Advanced Identity Cloud.
Before you start
These instructions assume you have an AS400 administrator account and you have access to AS400. You need the following information to configure the connector:
- Host Name
-
The name or IP address of the host where AS400 is running.
- Username
-
The AS400 Organizational Admin username.
- Password
-
The AS400 Organizational Admin password.
- Is Secure
-
Whether to enable a secure connection to AS400.
Install the AS400 connector
If you are looking for the Advanced Identity Cloud application for this connector, refer to: |
You can download any connector from Backstage, but some are included in the default deployment for Advanced Identity Cloud, IDM, or RCS. When using an included connector, you can skip installing it and move directly to configuration.
Connector | IDM | RCS |
---|---|---|
No |
Yes |
Download the connector .jar file from Backstage.
-
If you are running the connector locally, place it in the
/path/to/openidm/connectors
directory, for example:mv ~/Downloads/as400-connector-1.5.20.23.jar /path/to/openidm/connectors/
-
If you are using a remote connector server (RCS), place it in the
/path/to/openicf/connectors
directory on the RCS.
Configure the AS400 connector
Create a connector configuration using the IDM admin UI:
-
From the navigation bar, click Configure > Connectors.
-
On the Connectors page, click New Connector.
-
On the New Connector page, type a Connector Name.
-
From the Connector Type drop-down list, select AS400 Connector - 1.5.20.23.
-
Complete the Base Connector Details.
For a list of all configuration properties, refer to AS400 Connector Configuration -
Click Save.
When your connector is configured correctly, the connector displays as Active in the admin UI.
Refer to this procedure to create a connector configuration over REST.
Test the AS400 connector
Test that the configuration is correct by running the following command:
curl \ --header "X-OpenIDM-Username: openidm-admin" \ --header "X-OpenIDM-Password: openidm-admin" \ --header "Accept-API-Version: resource=1.0" \ --request POST \ "http://localhost:8080/openidm/system/as400?_action=test" { "name": "as400", "enabled": true, "config": "config/provisioner.openicf/as400", "connectorRef": { "bundleVersion": "[1.5.0.0,1.6.0.0)", "bundleName": "org.forgerock.openicf.connectors.as400-connector", "connectorName": "org.forgerock.openicf.connectors.as400.As400Connector" }, "displayName": "AS400 Connector", "objectTypes": [ "__ACCOUNT__", "__ALL__", "__GROUP__" ], "ok": true }
If the command returns "ok": true
, your connector has been configured correctly and can authenticate to the AS400 system.
AS400 remote connector
If you want to run this connector outside of PingOne Advanced Identity Cloud or IDM, you can configure the AS400 connector as a remote connector. Java Connectors installed remotely on a Java Connector Server function identically to those bundled locally within PingOne Advanced Identity Cloud or installed locally on IDM.
You can download the AS400 connector from here.
Refer to Remote connectors for configuring the AS400 remote connector.
Supported resource types
The AS400 connector supports the following resources:
ICF Native Type | AS400 Resource Type |
---|---|
|
Users |
|
Groups |
Supported search filters
The AS400 connector supports search operations with the following filter operators and attributes:
Object Type | Operators | Attributes |
---|---|---|
|
id filter |
|
Attributes
The AS400 connector supports the following account attributes:
Attribute | Description |
---|---|
|
User Profile Name |
|
The password used to log in. |
|
The previous sign-on date. |
|
The last date the password was changed. |
|
Whether or not the password is *NONE. |
|
The user expiration action. |
|
The storage used. |
|
A value used for auditing the object. |
|
The Action Audit Level. |
|
When the user’s password is set to expire. |
|
The user’s status. Permitted values are |
|
The special access control for the user. |
|
Specifies which user interface to use. |
|
Specifies the name of the current library associated with the job. |
|
The initial program. |
|
The initial menu. |
|
Whether or not user entitlement is required. |
|
Whether or not authority collection is active. |
|
Limit capabilities. |
|
A free-form text field. |
|
The special access permissions for the user. |
|
The special environment. |
|
The display sign-on information. |
|
The password expiration interval. |
|
Whether or not to block password change. |
|
Local password management. |
|
Limit device session. |
|
Keyboard buffering. |
|
Maximum allowed storage. |
|
Highest schedule priority. |
|
Job description. |
|
The owner of the user profile. |
|
The accounting code. |
|
The document password. |
|
The message queue. |
|
Delivery. |
|
The severity code. |
|
The print device. |
|
The output queue. |
|
The attention program. |
|
The sort sequence. |
|
The language ID. |
|
The country or region ID. |
|
The Coded Character Set ID. |
|
The character identifier control. |
|
The local job attributes. |
|
The locale. |
|
The user options. |
|
The user ID number. |
|
The home directory. |
|
The user’s expiration date. |
|
The user’s expiration interval. |
|
Authority. |
|
The EIM association. |
|
The date the password expires. |
|
Specifies the user’s group profile name whose authority is used when there is no job-specific authority given to the user. |
|
Specifies the user’s supplemental group profiles. Used with |
Use the AS400 connector
The AS400 connector can perform the following actions:
Users
Create an AS400 user
The following example creates a user with all available attributes:
curl \ --header "X-OpenIDM-Username: openidm-admin" \ --header "X-OpenIDM-Password: openidm-admin" \ --header "Content-Type: application/json"\ --request POST \ --data "{ "__NAME__":"BJENSEN", "__PASSWORD__":"ASDE1234", "PWDEXP":false, "__ENABLE__":true, "USRCLS":"*USER", "ASTLVL":"*BASIC", "CURLIB":"*CRTDFT", "INLPGM":"*NONE", "INLMNU":"MAIN", "TEXT":"TEXTFILEDVALUE", "SPCAUT":["*AUDIT"], "SPCENV":"*S36", "DSPSGNINF":"*YES", "PWDEXPITV":"323", "PWDCHGBLK":"93", "LCLPWDMGT":true, "LMTDEVSSN":"*NO", "MAXSTG":"10000", "PTYLMT":8, "JOBD":"QDFTJOBD", "OWNER":"*USRPRF", "ACGCDE":"*BLANK", "DOCPWD":"W12345", "MSGQ":"*USRPRF", "DLVRY":"*HOLD", "SEV":"50", "PRTDEV":"*SYSVAL", "OUTQ":"*DEV", "ATNPGM":"*ASSIST", "SRTSEQ":"*HEX", "LANGID":"ENG", "CCSID":"*HEX", "CHRIDCTL":"*DEVD", "SETJOBATR":["*CCSID"], "LOCALE":"*C", "USROPT":["*HLPFULL"], "UID":"*GEN", "HOMEDIR":"*USRPRF", "EIMASSOC":["*NOCHG"], "USREXPITV":99, "USREXPDATE":"*USREXPITV", "LMTCPB":"*YES", "CNTRYID":"*SYSVAL", "GRPPRF":"AZURE", "SUPGRPPRF":["AWS"] }" \ "https://localhost:8443/openidm/system/As400/__ACCOUNT__?_action=create&_prettyprint=true" { "_id" : "BJENSEN", "USROPT" : [ "*HLPFULL" ], "SEV" : "50", "USREXPITV" : 99, "IsAuthCollectionActive" : false, "HOMEDIR" : "/home/BJENSEN", "MAXSTG" : "10000", "UID" : "1277", "PTYLMT" : 8, "__NAME__" : "BJENSEN", "PRTDEV" : "*SYSVAL", "__ENABLE__" : true, "LMTDEVSSN" : "*NO", "__UID__" : "BJENSEN", "SRTSEQ" : "*HEX", "DSPSGNINF" : "*YES", "PWDCHGBLK" : "93", "GRPPRF" : "AZURE", "USREXPDATE" : "12/06/22", "CURLIB" : "*CRTDFT", "LMTCPB" : "*YES", "ASTLVL" : "*BASIC", "SUPGRPPRF" : [ "AWS" ], "MSGQ" : "/QSYS.LIB/QUSRSYS.LIB/BJENSEN.MSGQ", "LANGID" : "ENG", "CCSID" : "65535", "PWDEXPITV" : "323", "IsUserEntitlementRequired" : true, "TEXT" : "TEXTFILEDVALUE", "JOBD" : "/QSYS.LIB/QGPL.LIB/QDFTJOBD.JOBD", "ActionAuditLevel" : "*BASIC", "ObjectAuditValue" : "*NONE", "PasswordChangedDate" : "Mon Aug 29 05:15:20 IST 2022", "ATNPGM" : "/QSYS.LIB/QEZMAIN.PGM", "LCLPWDMGT" : true, "INLPGM" : "*NONE", "USRCLS" : "*USER", "SPCAUT" : [ "*AUDIT" ], "SETJOBATR" : [ "*CCSID" ], "SPCENV" : "*S36", "ACGCDE" : "", "IsPasswordNone" : false, "DLVRY" : "*HOLD", "IsAuthCollectionRepositoryExist" : false, "UserExpirationAction" : "*DISABLE", "INLMNU" : "/QSYS.LIB/%LIBL%.LIB/MAIN.MNU", "LOCALE" : "*C", "KBDBUF" : "*SYSVAL", "OWNER" : "*USRPRF", "PasswordExpireDate" : "Tue Jul 18 00:00:00 IST 2023", "PWDEXP" : false, "OUTQ" : "*DEV", "CNTRYID" : "*SYSVAL", "CHRIDCTL" : "*DEVD", "StorageUsed" : "12" }
When you create a new user, you must specify at least the
If the |
Query all users
The following example queries all users in the system:
curl \ --header "X-OpenIDM-Username: openidm-admin" \ --header "X-OpenIDM-Password: openidm-admin" \ --header "Content-Type: application/json" \ --request GET \ "http://localhost:8080/openidm/system/as400/__ACCOUNT__?_queryId=query-all-ids" { "result": [ {"_id": "ADAM"}, {"_id": "BJENSEN"}, {"_id": "CHERYL"}, {"_id": "DAVID"}, {"_id": "EDDIE"} ], "resultCount":5, "pagedResultsCookie":null, "totalPagedResultsPolicy":"NONE", "totalPagedResults":-1, "remainingPagedResults":-1 }
Query a single user
The following example queries all users in the system:
curl \ --header "X-OpenIDM-Username: openidm-admin" \ --header "X-OpenIDM-Password: openidm-admin" \ --header "Content-Type: application/json" \ --request GET \ "http://localhost:8080/openidm/system/as400/__ACCOUNT__/BJENSEN?prettyprint=true" { "_id" : "BJENSEN", "USROPT" : [ "*HLPFULL" ], "SEV" : "50", "USREXPITV" : 99, "IsAuthCollectionActive" : false, "HOMEDIR" : "/home/BJENSEN", "MAXSTG" : "10000", "UID" : "1277", "PTYLMT" : 8, "__NAME__" : "BJENSEN", "PRTDEV" : "*SYSVAL", "__ENABLE__" : true, "LMTDEVSSN" : "*NO", "__UID__" : "BJENSEN", "SRTSEQ" : "*HEX", "DSPSGNINF" : "*YES", "PWDCHGBLK" : "93", "GRPPRF" : "AZURE", "USREXPDATE" : "12/06/22", "CURLIB" : "*CRTDFT", "LMTCPB" : "*YES", "ASTLVL" : "*BASIC", "SUPGRPPRF" : [ "AWS" ], "MSGQ" : "/QSYS.LIB/QUSRSYS.LIB/BJENSEN.MSGQ", "LANGID" : "ENG", "CCSID" : "65535", "PWDEXPITV" : "323", "IsUserEntitlementRequired" : true, "TEXT" : "TEXTFILEDVALUE", "JOBD" : "/QSYS.LIB/QGPL.LIB/QDFTJOBD.JOBD", "ActionAuditLevel" : "*BASIC", "ObjectAuditValue" : "*NONE", "PasswordChangedDate" : "Mon Aug 29 05:15:20 IST 2022", "ATNPGM" : "/QSYS.LIB/QEZMAIN.PGM", "LCLPWDMGT" : true, "INLPGM" : "*NONE", "USRCLS" : "*USER", "SPCAUT" : [ "*AUDIT" ], "SETJOBATR" : [ "*CCSID" ], "SPCENV" : "*S36", "ACGCDE" : "", "IsPasswordNone" : false, "DLVRY" : "*HOLD", "IsAuthCollectionRepositoryExist" : false, "UserExpirationAction" : "*DISABLE", "INLMNU" : "/QSYS.LIB/%LIBL%.LIB/MAIN.MNU", "LOCALE" : "*C", "KBDBUF" : "*SYSVAL", "OWNER" : "*USRPRF", "PasswordExpireDate" : "Tue Jul 18 00:00:00 IST 2023", "PWDEXP" : false, "OUTQ" : "*DEV", "CNTRYID" : "*SYSVAL", "CHRIDCTL" : "*DEVD", "StorageUsed" : "12" }
Modify a user
You can modify an existing user with a PUT request, including all attributes of the account in the request. You can use the AS400 connector to modify the following attributes:
-
PASSWORD
-
PWDEXP
-
STATUS
-
USRCLS
-
ASTLVL
-
CURLIB
-
INLPGM
-
INLMNU
-
LMTCPB
-
TEXT
-
SPCAUT
-
SPCENV
-
DSPSGNINF
-
PWDEXPITV
-
PWDCHGBLK
-
LCLPWDMGT
-
LMTDEVSSN
-
KBDBUF
-
MAXSTG
-
PTYLMT
-
JOBD
-
OWNER
-
ACGCDE
-
DOCPWD
-
MSGQ
-
DLVRY
-
SEV
-
PRTDEV
-
OUTQ
-
ATNPGM
-
SRTSEQ
-
LANGID
-
CNTRYID
-
CCSID
-
CHRIDCTL
-
SETJOBATR
-
LOCALE
-
USROPT
-
UID
-
HOMEDIR
-
USREXPDATE
-
USREXPITV
-
EIMASSOC
-
GRPPRF
-
SUPGRPPRF
The following request updates a user:
curl \ --header "X-OpenIDM-Username: openidm-admin" \ --header "X-OpenIDM-Password: openidm-admin" \ --header "Content-Type: application/json" \ --header "Accept-API-Version: resource=1.0" \ --header "If-Match: *" \ --request PUT \ --data "{ "__PASSWORD__":"ASDE1234", "PWDEXP":false, "__ENABLE__":true, "USRCLS":"*USER", "ASTLVL":"*BASIC", "CURLIB":"*CRTDFT", "INLPGM":"*NONE", "INLMNU":"MAIN", "TEXT":"TEXTFILEDVALUE", "SPCAUT":["*AUDIT"], "SPCENV":"*S36", "DSPSGNINF":"*YES", "PWDEXPITV":"323", "PWDCHGBLK":"93", "LCLPWDMGT":true, "LMTDEVSSN":"*NO", "MAXSTG":"10000", "PTYLMT":8, "JOBD":"QDFTJOBD", "OWNER":"*USRPRF", "ACGCDE":"*BLANK", "DOCPWD":"W12345", "MSGQ":"*USRPRF", "DLVRY":"*HOLD", "SEV":"50", "PRTDEV":"*SYSVAL", "OUTQ":"*DEV", "ATNPGM":"*ASSIST", "SRTSEQ":"*HEX", "LANGID":"ENG", "CCSID":"*HEX", "CHRIDCTL":"*DEVD", "SETJOBATR":["*CCSID"], "LOCALE":"*C", "USROPT":["*HLPFULL"], "UID":"*GEN", "HOMEDIR":"*USRPRF", "EIMASSOC":["*NOCHG"], "USREXPITV":99, "USREXPDATE":"*USREXPITV", "LMTCPB":"*YES", "CNTRYID":"*SYSVAL", "GRPPRF":"AZURE","SUPGRPPRF":["AWS"] }" \ "https://localhost:8443/openidm/system/As400/__ACCOUNT__/BJENSEN_prettyprint=true" { "_id" : "BJENSEN", "USROPT" : [ "*HLPFULL" ], "SEV" : "50", "USREXPITV" : 99, "IsAuthCollectionActive" : false, "HOMEDIR" : "/home/BJENSEN", "MAXSTG" : "10000", "UID" : "1277", "PTYLMT" : 8, "__NAME__" : "BJENSEN", "PRTDEV" : "*SYSVAL", "__ENABLE__" : true, "LMTDEVSSN" : "*NO", "__UID__" : "BJENSEN", "SRTSEQ" : "*HEX", "DSPSGNINF" : "*YES", "PWDCHGBLK" : "93", "GRPPRF" : "AZURE", "USREXPDATE" : "12/06/22", "CURLIB" : "*CRTDFT", "LMTCPB" : "*YES", "ASTLVL" : "*BASIC", "SUPGRPPRF" : [ "AWS" ], "MSGQ" : "/QSYS.LIB/QUSRSYS.LIB/BJENSEN.MSGQ", "LANGID" : "ENG", "CCSID" : "65535", "PWDEXPITV" : "323", "IsUserEntitlementRequired" : true, "TEXT" : "TEXTFILEDVALUE", "JOBD" : "/QSYS.LIB/QGPL.LIB/QDFTJOBD.JOBD", "ActionAuditLevel" : "*BASIC", "ObjectAuditValue" : "*NONE", "PasswordChangedDate" : "Mon Aug 29 05:15:20 IST 2022", "ATNPGM" : "/QSYS.LIB/QEZMAIN.PGM", "LCLPWDMGT" : true, "INLPGM" : "*NONE", "USRCLS" : "*USER", "SPCAUT" : [ "*AUDIT" ], "SETJOBATR" : [ "*CCSID" ], "SPCENV" : "*S36", "ACGCDE" : "", "IsPasswordNone" : false, "DLVRY" : "*HOLD", "IsAuthCollectionRepositoryExist" : false, "UserExpirationAction" : "*DISABLE", "INLMNU" : "/QSYS.LIB/%LIBL%.LIB/MAIN.MNU", "LOCALE" : "*C", "KBDBUF" : "*SYSVAL", "OWNER" : "*USRPRF", "PasswordExpireDate" : "Tue Jul 18 00:00:00 IST 2023", "PWDEXP" : false, "OUTQ" : "*DEV", "CNTRYID" : "*SYSVAL", "CHRIDCTL" : "*DEVD", "StorageUsed" : "12" }
Reset a user’s password
To reset the password for an AS400 user account, you can use the connector to change the user’s password:
curl \ --header "X-OpenIDM-Username: openidm-admin" \ --header "X-OpenIDM-Password: openidm-admin" \ --header "Content-Type: application/json" \ --header "Accept-API-Version: resource=1.0" \ --header "If-Match: *" \ --request PUT \ --data "{ "__PASSWORD__":"newpassword123" }" \ "https://localhost:8443/openidm/system/as400/__ACCOUNT__/BJENSEN_prettyprint=true" { "_id" : "BJENSEN", "USROPT" : [ "*HLPFULL" ], "SEV" : "50", ... }
Activate a user
The following example activates a user:
curl \ --header "X-OpenIDM-Username: openidm-admin" \ --header "X-OpenIDM-Password: openidm-admin" \ --header "Content-Type: application/json" \ --header "Accept-API-Version: resource=1.0" \ --header "If-Match: *" \ --request PUT \ --data "{ "__ENABLE__": true } "https://localhost:8443/openidm/system/as400/__ACCOUNT__/BJENSEN_prettyprint=true" { "_id" : "BJENSEN", ... "__ENABLE__": true ... }
Deactivate a user
The following example deactivates a user:
curl \ --header "X-OpenIDM-Username: openidm-admin" \ --header "X-OpenIDM-Password: openidm-admin" \ --header "Content-Type: application/json" \ --header "Accept-API-Version: resource=1.0" \ --header "If-Match: *" \ --request PUT \ --data "{" ""__ENABLE__": false }" \ "https://localhost:8443/openidm/system/as400/__ACCOUNT__/BJENSEN_prettyprint=true" { "_id" : "BJENSEN", ... "__ENABLE__": false ... }
Delete a user
The following example deletes a user:
curl \ --header "X-OpenIDM-Username: openidm-admin" \ --header "X-OpenIDM-Password: openidm-admin" \ --header "Content-Type: application/json" \ --header "Accept-API-Version: resource=1.0" \ --request DELETE \ "https://localhost:8443/openidm/system/as400/__ACCOUNT__/BJENSEN_prettyprint=true" { "_id" : "BJENSEN", ... }
Groups
Query all groups
The following example queries all AS400 Groups by their IDs:
curl \ --header "X-OpenIDM-Username: openidm-admin" \ --header "X-OpenIDM-Password: openidm-admin" \ --header "Content-Type: application/json" \ --header "Accept-API-Version: resource=1.0" \ --request GET \ "http://localhost:8080/openidm/system/as400/__GROUP__?_queryId=query-all-ids&_prettyprint=true" { { "result": [ {"_id": "AWS"}, {"_id": "AZURE"}, {"_id": "CLOUD"} ], "resultCount" : 3, "pagedResultsCookie" : null, "totalPagedResultsPolicy" : "NONE", "totalPagedResults" : -1, "remainingPagedResults" : -1 }
Query a single group
The following example queries a single AS400 group by its ID:
curl \ --header "X-OpenIDM-Username: openidm-admin" \ --header "X-OpenIDM-Password: openidm-admin" \ --header "Content-Type: application/json" \ --header "Accept-API-Version: resource=1.0" \ --request GET \ "http://localhost:8080/openidm/system/as400/__GROUP__/AWS?_prettyprint=true" { "_id" : "AWS", "GID" : "116", "__NAME__" : "AWS", "GRPAUT" : "*NONE", "GRPAUTTYP" : "*PRIVATE", "__UID__" : "AWS" }
OpenICF Interfaces Implemented by the AS400 Connector
The AS400 Connector implements the following OpenICF interfaces. For additional details, see ICF interfaces:
- Create
-
Creates an object and its
uid
. - Delete
-
Deletes an object, referenced by its
uid
. - Schema
-
Describes the object types, operations, and options that the connector supports.
- Script on Connector
-
Enables an application to run a script in the context of the connector.
Any script that runs on the connector has the following characteristics:
-
The script runs in the same execution environment as the connector and has access to all the classes to which the connector has access.
-
The script has access to a
connector
variable that is equivalent to an initialized instance of the connector. At a minimum, the script can access the connector configuration. -
The script has access to any script arguments passed in by the application.
-
- Search
-
Searches the target resource for all objects that match the specified object class and filter.
- Test
-
Tests the connector configuration.
Testing a configuration checks all elements of the environment that are referred to by the configuration are available. For example, the connector might make a physical connection to a host that is specified in the configuration to verify that it exists and that the credentials that are specified in the configuration are valid.
This operation might need to connect to a resource, and, as such, might take some time. Do not invoke this operation too often, such as before every provisioning operation. The test operation is not intended to check that the connector is alive (that is, that its physical connection to the resource has not timed out).
You can invoke the test operation before a connector configuration has been validated.
- Update
-
Updates (modifies or replaces) objects on a target resource.
AS400 Connector Configuration
The AS400 Connector has the following configurable properties:
Configuration properties
Property | Type | Default | Encrypted(1) | Required(2) |
---|---|---|---|---|
|
|
|
|
Yes |
Host name or IP address of As400. |
||||
|
|
|
|
Yes |
The username to login As400. |
||||
|
|
|
Yes |
Yes |
The password to login As400. |
||||
|
|
|
|
Yes |
Enables or not secure connection to As400. |
(1) Whether the property value is considered confidential, and is therefore encrypted in IDM.
(2) A list of operations in this column indicates that the property is required for those operations.
Basic Configuration Properties
Property | Type | Default | Encrypted(1) | Required(2) |
---|---|---|---|---|
|
|
|
|
No |
Provides the maximum connections. |
||||
|
|
|
|
No |
Provides the maximum life for an available connection. The default value is 86400000. |
||||
|
|
|
|
No |
Provides the maximum amount of inactive time before an available connection is closed. The default value is 3600000. |
||||
|
|
|
|
No |
Provides the maximum amount of time a connection can be in use before it is closed and returned to the pool. The default value is -1 indicating that there is no limit. |
||||
|
|
|
|
No |
Provides the maximum number of times a connection can be used before it is replaced in the pool. The default value is -1 indicating that there is no limit. |
||||
|
|
|
|
No |
Indicates whether the maintenance thread is used to cleanup expired connections. The default is true. |
||||
|
|
|
|
No |
Indicates whether threads are used in communication with the host servers and for running maintenance. The default value is true. |
||||
|
|
|
|
No |
Time interval for how often the maintenance daemon is run. The default value is 300000 milliseconds. |
(1) Whether the property value is considered confidential, and is therefore encrypted in IDM.
(2) A list of operations in this column indicates that the property is required for those operations.