Identity Apps Admin
Identity Apps Admin
2
Contents
Part I Overview 23
Contents 3
Application Server. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
Database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
User Application Driver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
Role and Resource Service Driver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Multi-Threaded Role and Resource Service Driver. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Designer for Identity Manager. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
iManager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Identity Manager Engine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Identity Vault . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
4 Contents
Components for Logging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
How Logging Works . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
Types of Log Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
Difference Among Catalina, Application, and Localhost Log Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
Additional Log Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
Understanding the Log Format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
Message Fields. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
Message Severity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
Configuring Logging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
Understanding Logging Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
Understanding the Log Level Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
Specifying the Severity Level for Commons Logging API Loggers . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
Configuring Logging Settings in Identity Manager Dashboard. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
Editing the log4j Files. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
Managing Log File Size . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
Configuring Logging in a Cluster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
Tomcat Logging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
Identity Applications Logging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
Enabling Sentinel Logging. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
Using Log Files for Troubleshooting. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
Log Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
Contents 5
Adding a Language to the Identity Applications. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
Adding the New Language to the Identity Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
Preparing Files for Translation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
Changing the Default Language . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
Add the Translated Files to the Proper Locations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
Updating an Email Notification Template . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
Verifying the New Translations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
Configuring User Names. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
Configuring the Format of Displayed User Names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
Enabling Localized User Names in Typeahead Fields . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
Configuring the Attribute for Sorting Users in Dashboard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
Configuring Email Notification Templates for the Dashboard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
Configuring Forgot Password? Functionality . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
Ensuring that Characters Display Properly in Role Report PDF Files. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .129
Editing the Configuration XML Data in iManager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
Ensuring that Dates Display Correctly in Norwegian . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
Configuring Client Settings Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
Copying the Client Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
Copying the Workflow Migration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
Changing Identity Applications Client Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
Changing General Client Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
Managing User Access. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
Customizing the Views . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
Changing the Client Branding Attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
Configuring a Client Helpdesk. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
Managing Dashboard Widgets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
Customizing the Organization Chart View . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
Deleting the Client Settings from Identity Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
Hiding the Navigation Items from User Interface. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
6 Contents
Part III Identity Applications Administration 159
Contents 7
Loopback Driver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
REST Driver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
Delimited Text Driver. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
Understanding the Components of CPRS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
Managing Permission Reconciliation Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
Editing Permission Reconciliation Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
Permission Reconciliation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
Migrating to CPRS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
Prerequisites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
Managing Existing Permissions for AD and LDAP Drivers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
Managing Permissions for a MDAD Driver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
Post Migration Activities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
8 Contents
Editing an Object. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
Deleting an Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
Exporting to CSV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
Contents 9
Developing Clients for the Provisioning Web Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
Web Access to the Provisioning Web Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
A Java Client for the Provisioning Web Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281
Developing a Mono Client. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
Sample Ant File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287
Sample Log4J File. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
Provisioning Web Service API. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
Processes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
Provisioning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300
Work Entries. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313
Comments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331
Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338
Miscellaneous . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342
Cluster. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345
10 Contents
Accessing the WSDL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379
Generating the Stub Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380
Removing Administrator Credential Restrictions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380
VDX Web Service API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381
IRemoteVdx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381
Attribute . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383
AttributeArray . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385
AttributeType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386
BooleanArray . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386
ByteArrayArray. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387
DateArray . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387
EntryAttributeMap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 388
Entry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 388
EntryArray . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389
IntegerArray . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390
StringArray . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391
StringEntry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391
StringEntryArray. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392
StringMap. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393
VdxService . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393
VersionVO. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393
VDX Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394
Contents 11
RoleAssignment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 454
RoleAssignmentArray . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 456
RoleAssignmentActionType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457
RoleAssignmentRequest . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 458
RoleAssignmentRequestStatus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 461
RoleAssignmentType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465
RoleAssignmentTypeInfo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 466
RoleInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469
RoleInfoArray . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 470
RoleLevel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471
RoleLevelArray . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 472
RoleRequest . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473
RoleServiceDelegate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 476
RoleServiceSkeletonImpl. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 481
Sod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485
SodArray . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 488
SodApprovalType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 489
SodJustification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 490
SodJustificationArray . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491
User. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492
VersionVO. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496
Role Web Service Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 497
Retrieving Roles for a Group . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 497
Retrieving Role Assignment Request Status . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499
Retrieving Type Information for a Role Assignment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 500
Retrieving Role Categories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 501
Retrieving Role Levels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502
Verifying Whether a User Is In a Role. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502
12 Contents
Generating the Stub Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 542
Password Management Web Service Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 542
processForgotConf. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 542
processUser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 543
processChaRes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 543
processChgPwd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 544
ForgotPasswordWSBean. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 545
35 Using One SSO Provider for Single Sign-on Access in Identity Manager 561
Preparing eDirectory for Single Sign-on Access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 561
Modifying the Basic Settings for Single Sign-on Access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 561
Configuring Self Service Password Reset to Trust OSP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 562
37 Configuring Single Sign-On to Work With Active Directory Federation Service 581
Requirements for Configuring OSP to Work with AD FS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 581
Configuring OSP to Provide SAML Authentications to AD FS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 581
Contents 13
Logging In Using the Name Password Form . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 589
43 Troubleshooting 629
Using Log Files for Troubleshooting. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 629
Customizing Logging Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 629
Virtual Data Access Logging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 630
When a Code Map Refresh Is Triggered . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 633
When Multiple Users Try to Authenticate From Different Interfaces . . . . . . . . . . . . . . . . . . . . . . . . 634
When an E-Mail Approval Notification is Not Delivered . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 635
When a Role Is Requested . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 635
When a Role Is Listed in Role Catalog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 638
Schema Fails to Update When Updated Using a User Account That Was Not Used to Create
the Schema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 640
Checking the Status of Database Schema Validation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 642
Determining if Liquibase Changeset Has Executed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .642
When Assigning a Resource to a User That Does Not Exist . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 644
When Checking the Workflow Engine Heartbeat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 644
catalina.out File Does Not Rotate the Log on Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 645
Troubleshooting E-Mail Based Approval Issues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 646
Empty E-Mail Based Approval Token in the Provisioning Request Mail . . . . . . . . . . . . . . . . . . . . . . 646
14 Contents
User Application is Not Acting on E-Mails . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 646
Approve or Deny Link in E-Mail is Not Working . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 646
Approve/Deny links Missing from E-Mail after configuring E-Mail Based Approval . . . . . . . . . . . . 646
Verifying if E-Mail Based Approval Starts Properly . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .646
When is Server Restart Needed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 647
E-Mail Based Approval Token is Empty in the Provisioning Request E-Mail . . . . . . . . . . . . . . . . . . . 647
Troubleshooting Self Service Password Reset Issues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 647
No Redirection to Challenge-Response Page When SSPR is Installed in a Distributed
Environment That Supports http and https Communication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 647
Unable to Unlock Account through SSPR. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 647
SSPR Reports Error 5027 When Attempting to Access Configuration Manager through
Internet Explorer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 647
SSPR Reports Out of Order Page Request Error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 648
Pressing Enter Button in SSPR’s People Search Displays Locale Screen on Internet Explorer . . . . . 648
Troubleshooting Authentication Issues. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 648
OSP Login Request Example by Using REST Endpoints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 648
Managing the Size of oidPInstancedata Attribute . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 650
OSP Fails to Update the oidpInstanceData Attribute . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 651
Managing Expired Server Certificates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 651
Redirecting Non-Administrator User from the idmadmin Page to the Dashboard Landing
Page After Logout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 651
Identity Applications Does Not Terminate the Dashboard Session Even After the Session
Expires When Configured With a Third-Party Authentication Service . . . . . . . . . . . . . . . . . . . . . . . 652
Troubleshooting General Issues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 653
Mismatch of Certificates Used by Identity Manager Engine and User Application Causes
Code
(-9205) Error in vnd.nds.stream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 653
User Application Driver Fails to Communicate with the User Application Server on a Secured
Connection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 654
Entitlement Configuration Error During Codemap Refresh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 654
Error After Logging Out of the Dashboard on Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 655
Bulk Import of Roles and Resources May Not Update the Permission Index . . . . . . . . . . . . . . . . . . 655
Absence of Notification Templates Causes Workflow Error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 655
Error Occurs When You Add a New Application With a Logo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 656
User Application Driver Fails to Process Delete Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 656
Identity Applications login failure while attempting to contact the authentication service . . . . . . 656
Searching an Entity With a Combination of String and Integer Value Is Not Supported . . . . . . . . . 657
Searching an Entity with Substring Value for DN Attribute Is Not Supported. . . . . . . . . . . . . . . . . . 657
Unable to Change the Availability Status in the Availability Settings Page . . . . . . . . . . . . . . . . . . . . 657
New Request Page Not Listing Users in the Recipients Field . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .658
Advanced Search for User Entities Displaying an Error When the Search Attribute Contains a
Hyphen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 658
Troubleshooting Multi-Threaded Role and Resource Service driver Issues . . . . . . . . . . . . . . . . . . . . . . . . . 658
Troubleshooting Workflow Related Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 661
Resolving StackOverflow Error on Recursive Workflows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 661
Contents 15
Creating and Deploying a Custom Configuration Link . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 674
Creating and Deploying a Custom Configuration QR Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 674
Optimizing Designer Forms for the Approvals App . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 675
Understanding Language Support in the Approvals App . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 675
16 Contents
Support for Existing Forms and Forms Created in the Workflow Form Builder . . . . . . . . . . . . . . . . . . . . . . 706
Creating a Provisioning Request Definition to Use a Form Created in the Form Builder . . . . . . . . . . . . . .706
Support for Migrating Legacy Workflow Forms to the Forms Created in the Workflow Form Builder . . . 708
Guidelines for Enabling Workflow Logging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 710
Initiating a Workflow Process. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 711
Contents 17
18
About this Book and the Library
The Administrator’s Guide describes how to administer the NetIQ Identity Manager using Identity
Applications.
Intended Audience
This book provides information for identity architects and identity administrators responsible for
installing the components necessary for building an identity management solution for their
organization.
We are a global, enterprise software company, with a focus on the three persistent challenges in
your environment: Change, complexity and risk—and how we can help you control them.
Our Viewpoint
Adapting to change and managing complexity and risk are nothing new
In fact, of all the challenges you face, these are perhaps the most prominent variables that deny
you the control you need to securely measure, monitor, and manage your physical, virtual, and
cloud computing environments.
Enabling critical business services, better and faster
We believe that providing as much control as possible to IT organizations is the only way to
enable timelier and cost effective delivery of services. Persistent pressures like change and
complexity will only continue to increase as organizations continue to change and the
technologies needed to manage them become inherently more complex.
Our Philosophy
Selling intelligent solutions, not just software
In order to provide reliable control, we first make sure we understand the real-world scenarios
in which IT organizations like yours operate—day in and day out. That's the only way we can
develop practical, intelligent IT solutions that successfully yield proven, measurable results. And
that's so much more rewarding than simply selling software.
Driving your success is our passion
We place your success at the heart of how we do business. From product inception to
deployment, we understand that you need IT solutions that work well and integrate seamlessly
with your existing investments; you need ongoing support and training post-deployment; and
you need someone that is truly easy to work with—for a change. Ultimately, when you succeed,
we all succeed.
Our Solutions
Identity & Access Governance
Access Management
Security Management
Systems & Application Management
Workload Management
Service Management
Worldwide: www.netiq.com/about_netiq/officelocations.asp
Email: info@netiq.com
Worldwide: www.netiq.com/support/contactinfo.asp
Email: support@netiq.com
Identity applications help you manage different functions of your organization using Identity
Manager.
Chapter 1, “Introduction to the Individual Identity Applications Components,” on page 25
Chapter 2, “Types of User Categories in Identity Applications,” on page 31
Chapter 3, “Understanding the Functionality of the Identity Applications,” on page 37
Chapter 4, “Understanding the Back-end Functions for the Identity Applications,” on page 43
Overview 23
24 Overview
1 Introduction to the Individual Identity
1
Applications Components
Identity applications enable your organization to manage the user accounts and permissions
associated with the wide variety of roles and resources available to users. You can configure the
identity applications to provide self-service support for your users, such as requesting roles or
changing their passwords.
The following components comprise identity applications:
“Identity Manager Dashboard” on page 25
“Identity Applications Administration” on page 26
“Understanding Entities” on page 28
“Identity Manager Client Settings” on page 28
“Identity Manager Workflows” on page 29
“Identity Reporting” on page 29
“Identity Applications Security and Password Management” on page 29
“Identity Applications” on page 29
You can perform the following tasks with the appropriate Permissions:
Create and modify user profiles.
View the organization chart details of other users.
Understanding Roles
A role represents a set of permissions that allows you to perform defined activities using identity
applications. A role can be mapped to one or more roles, resources, and entitlements from different
connected systems. You can assign any role to any user in your organization.
Identity Manager Dashboard allows you to create and manage role in your organization.
Administration > Roles
You can map role assignments to resources within a company, such as user accounts, computers, and
databases. For more information, see Chapter 15, “Creating and Managing Resources,” on page 171.
You can modify the default settings for the roles and their operations in the system that can help you
to control creating and managing roles.
Administration > Configuration > Roles and Resources
For more information, see “Configuring Default Roles Settings” on page 205.
For more information, see Chapter 14, “Creating and Managing Roles,” on page 161.
You can view the default settings for the resources and their operations in the system that controls
creating and managing resources.
Administration > Configuration > Roles and Resources
For more information, see “Configuring Default Resource Settings” on page 206.
For more information, see Chapter 19, “Using Controlled Permission Reconciliation Services,” on
page 193.
Understanding Entities
You can customize the Identity Applications by adding objects and their attributes based on the
content in the Identity Vault. You can do this by adding new entities and attributes to the directory
abstraction layer and deploying them to the User Application driver. For more information, see
About Entities and Attributes in NetIQ Identity Manager - Administrator’s Guide to Designing the
Identity Applications.
Identity Reporting
As a complement to the identity applications, Identity Manager includes Identity Reporting. If you
install Identity Reporting with the identity applications give you a complete view of your users’
entitlements, providing the knowledge you need to see the past and present state of authorizations
and permissions granted to identities in your organization.
For more information about reporting, see the Administrator Guide to NetIQ Identity Reporting.
Identity Applications
The identity applications continues to provide the following functions:
Ensure that your organization has a method for verifying that personnel are fully aware of
organizational policies and are taking steps to comply with these policies.
Applications
Users of the identity applications generally belong to any of the following categories:
“Administrative Users” on page 31
“Administrator and Manager Categories” on page 32
“Designers” on page 35
“Business Users” on page 35
Administrative Users
The identity applications have several administrative users. During installation, you establish the
following administrators:
IMPORTANT: NetIQ Self Service Password Reset (SSPR) is the default password management
program for Identity Manager. For more information, see “Managing Your Password” in the
NetIQ Identity Manager - User’s Guide to the Identity Applications.
NOTE: For testing purposes, NetIQ does not lock down the security model in Standard Edition.
Therefore, the Security Administrator is able to assign all domain administrators, delegated
administrators, and also other Security Administrators. However, the use of these advanced
features is not supported in production. In production environments, all administrator
assignments are restricted by licensing. NetIQ collects monitoring data in the audit database to
ensure that production environments comply. Furthermore, NetIQ recommends that only one
user be given the permissions of the Security Administrator.
Team Manager
A user designated for a team who can perform provisioning requests and approval tasks
associated with the team. Team manager is allowed to request or revoke permissions of team
members. An administrator can configure a Team Manager capabilities to delegate tasks for
team members.
Although a team might match a group that exists in the user directory, teams are not the same
thing as groups. A group or a member of a group cannot perform team capabilities except when
assigned to a team. For more information, see Managing Users in NetIQ Identity Manager -
User’s Guide to the Identity Applications.
Designers
Designers use the Designer for Identity Manager to customize the identity applications for an
enterprise. Designer is a tool aimed at information technology professionals such as enterprise IT
developers, consultants, sales engineers, architects or system designers, and system administrators
who have a strong understanding of directories, databases, and their information environment and
who act in the role of a designer or architect of identity-based solutions.
To create or edit workflow objects in Designer, the user needs the following rights on the
RequestDefs.AppConfig container for the specific User Application driver.
[Entry Rights] Supervisor or Create
[All Attribute Rights] Supervisor or Write
To initiate a workflow, the user must have Browse [Entry Rights] on the RequestDefs.AppConfig
container for the specific User Application driver or individually per request definition object if you
are using a delegated model.
Business Users
A business user is an authenticated user, such as an employee, a manager, a Helpdesk user or a
delegate or proxy for an employee or manager. Identity applications administrator has permissions
to enable capabilities for a user to perform on identity applications. For more information about
user capabilities and functions, see Accessing the Identity Applications in NetIQ Identity Manager -
User’s Guide to the Identity Applications.
Following are the users who has a special capabilities apart from their general capabilities:
Delegate user
A user to whom one or more specific tasks are delegated appropriate to the user’s rights. For
example, a team manager can delegate certain tasks to a team member who has required
permissions to do the delegated tasks. A Delegate user can view delegation assignments and act
on those assignments.
Proxy user
A user who acts in the role of another user for a specific period assuming assignee’s identity. All
of the rights of the original user apply to the proxy. The tasks owned by assignee does not carry
to the proxy user. For example, a team manager assigns someone from the team as a proxy, the
proxy user can assume the team manager’s role and act on the team manager’s tasks. A proxy
user can view proxy assignments and act on those assignments.
Identity Applications
Identity is the foundation of the identity applications. The applications use identity as the basis for
authorizing users’ access to systems, applications, and databases. Each user’s unique identifier—and
each user’s roles—have specific access rights to identity data. For example, users who are identified
as managers can access salary information about their direct reports, but not about other
employees in their organization.
“Enabling Self-Service Activities for Users” on page 37
“Providing Permissions to Users” on page 38
“Ensuring Permission Assignments Comply with Your Standards” on page 40
“Design and Configuration Tools” on page 40
NOTE: The identity applications comprise an application and not a framework. The Identity Manager
documentation provide instructions for modifying the applications. Modifications to areas not
outlined within the product documentation are not supported.
To know more on the capabilities of Identity Manager Dashboard, watch the following videos:
Part-1
http://www.youtube.com/watch?v=PrKa_gv5-0A
Part-2
http://www.youtube.com/watch?v=Cwjxg5ysT0M
Identity Manager provides a set of Eclipse-based tools for designing the data and the flow of control
within the workflows. In addition, Identity Manager provides a set of Web-based tools that allow
users to view existing provisioning requests and manage workflows that are in process. For more
information, see “Design Constraints” on page 55
The Provisioning Administrator is responsible for managing the workflow-based provisioning
features of identity applications. For more information, see Chapter 2, “Types of User Categories in
Identity Applications,” on page 31.
Users can contact Helpdesk by using the Helpdesk email ID, contact number, or raise a Helpdesk
ticket. When a client user raises a ticket, the Helpdesk user receives a notification on the Dashboard.
By default, Helpdesk is not configured. Administrators need to configure Helpdesk for the clients
configured in the system.
After setting up a Helpdesk, the administrator can customize the Helpdesk information for the
clients from the Dashboard client settings. To set up a Helpdesk and configure the Helpdesk
information, see “Configuring a Client Helpdesk” on page 143.
NOTE: For compliance and attestation processes, we recommend using NetIQ Identity Governance
(formerly Access Review) instead of the identity applications. Identity Governance enables
administrators and managers to easily collect all user and access information in one central location
and certify that each user has only the level of access that they need to do their job. Following the
principle of least privilege, Access Review helps you ensure that your users have focused access to
those applications and resources that they use and cannot access resources that they do not need to
access. You can review all permissions assigned to your employees, either individually or as a group,
and decide whether those permission assignments are appropriate. For more information, see the
NetIQ Identity Access Governance documentation.
Table 3-1 Tools for Designing and Configuring the identity applications
Tool Purpose
Designer for Identity Manager A powerful, graphical toolset for configuring and deploying
Identity Manager. The following plug-ins are designed to help
you configure the identity applications:
The following figure shows how these components fit into the overall architecture of the identity
applications.
Workflow Engine
The Workflow Engine is a set of Java executables responsible for managing and executing steps in an
administrator-defined workflow and keeping track of state information (which is persisted in a
database). When the necessary approvals have been given, the Provisioning System provisions the
resource as requested.
During the course of workflow execution, the Workflow Engine can send one or more email
messages to notify users of changes in the state of the workflow. In addition, it can send email
messages to notify users when updates have been made to proxy, delegate, and availability settings.
You can edit an email template in Designer for Identity Manager or in iManager and then use this
template for email notifications. At runtime, the Workflow Engine retrieves the template from the
directory and replaces tags with dynamic text suitable for the notification. Additional details about
the Workflow Engine, including how to configure and manage provisioning workflows, are in Part IV,
“Configuring and Managing Provisioning Workflows,” on page 233.
NOTE: Identity Manager 4.8 ships Workflow Engine as a separate service. The Workflow Engine
persists the workflow state information in a new database named igaworkflowdb. Identity
Applications obtain Provisioning Request history and approval task information from
igaworkflowdb. All features supported by the existing Workflow Engine such as EMail Based
Approval and EMail Notification continue to work in a similar way with the new Workflow Engine
service. By default, the Workflow Engine service is installed as part of the Identity Applications
installation. For detailed information, see Workflow Service.
SOAP Endpoints
The identity applications provide the following SOAP endpoints to allow third-party software
applications to take advantage of identity applications services:
Provisioning Web Service To support third-party access, the provisioning Workflow Engine
includes a Web service endpoint. The endpoint offers all provisioning
functionality (for example, allowing SOAP clients to start a new
approval flow, or list currently executing flows).
Metrics Web Service The workflow engine also includes a Web Service for gathering
workflow metrics. The addition of the Metrics Web Service to the
Workflow Engine lets you monitor an approval flow process. In
addition, it provides indicators the business manager can use to
modify the process for optimal performance.
Notification Web Service The Provisioning System includes an email notification facility that
lets you send email messages to notify users of changes in the state
of the provisioning system, as well as tasks that they need to perform.
To support third-party access, the notification facility includes a Web
service endpoint that lets you send an email message to one or more
users.
Directory Abstraction Layer (VDX) The directory abstraction layer provides a logical view of the Identity
Web Service Vault data. To support access by third-party software applications,
the directory abstraction layer includes a Web service endpoint called
the VDX Web Service. This endpoint lets you access the attributes
associated with entities defined in the directory abstraction layer. It
also lets you perform ad hoc searches for entities and execute
predefined searches called global queries.
Role Web Service To support access by third-party software applications, the Role
subsystem includes a Web service endpoint called the Role Web
Service. It supports a wide range of role management and SoD
management functions.
Application Server
The application server provides the runtime framework in which the identity applications, directory
abstraction layer, and Workflow Engine execute. The identity applications are packaged as a Java
Web Application Archives, or WAR files.The installation process enables you deploy the WAR files to
the application server.
The following WAR files apply to the URL for a component of the identity applications:
IDMProv for the User Application
idmdash for the Dashboard
idmadmin for Identity Applications Administration
When a user interacts with the idmdash or idmadmin applications, it queries the underlying
IDMProv.war file and fetches the information for the user. IDMProv.war contains the REST and SOAP
APIs where idmdash and idmadmin contains the information that provides the user interface.
The identity applications run on an Apache Tomcat application server, included in the installation kit.
You can also use your own installation of Tomcat. For more information about the application server
requirements, see “Considerations for Installing Identity Manager Components ” in the NetIQ
Database
Most user information is stored in the Identity Vault. However, the identity applications rely on a
separate database to store the following information:
Configuration data for the identity applications, such as Web page definitions and preference
values
State of a workflow
NOTE: The actual workflow definitions are stored in the Identity Applications driver in the
Identity Vault.
For more information about installing and configuring database, see “Installing and Configuring
Identity Manager Components” in the NetIQ Identity Manager Setup Guide for Linux or
Understanding the Installation and Configuration Process for Identity Manager Server, Identity
Applications, and Identity Reporting Components in the NetIQ Identity Manager Setup Guide for
Windows.
The User Application driver is both a runtime component and a storage wrapper for directory
objects (comprising the runtime artifacts of the identity applications).
Artifacts Description
Driver Set Object Every Identity Manager installation requires that drivers be grouped into
driver sets. Only one driver set can be active at a time (on a given directory
server). The drivers within that set can be toggled on or off individually
without affecting the driver set as a whole. The User Application driver like
any other Identity Manager driver, must exist inside a driver set. The driver
set is not automatically created by the identity applications; you must create
one, then create the User Application driver within it.
Identity The User Application driver object is the container for a variety of artifacts.
The User Application driver implements Publisher and Subscriber channel
objects and policies. The Publisher channel is not used by the identity
applications but is available for custom use cases.
App Config Object The AppConfig object is a container for the following identity applications
configuration objects.
Is this a role
operation or a resource No
to role association
Clean-up and operation?
dynamic group
handling processes Divide operations based
on unique data sets
Yes
Role and
Resource Driver
A unique identity data set comprises of data, such as users, groups, and containers, that is different
based on certain attributes. When different unique identity data sets are configured in your
environment, the driver uses worker threads to accomplish the tasks belonging to different disjoint
sets at the same time. In addition, it remains responsive while doing lengthy or memory intensive
operations. For example, while recalculating resources for a particular user, a multi-threaded driver
can perform role or resource assignments on other users belonging to a different data set.
IMPORTANT: When the driver receives role and resource associations and role processing events,
such as creation or deletion of roles, it starts processing these events only after completing the
processing of all the events that are already submitted to the worker threads. This prevents any
adverse impact on other operations. Similarly, it does not take up any new events until it finishes
processing the current event and starts working in a single-thread mode.
iManager
iManager provides a set of plug-ins you can use to view provisioning requests and manage their
associated workflows. For more information, see “Design and Configuration Tools” on page 40.
Identity Vault
The Identity Vault is the repository for:
User data
Other identity data
Identity Manager driver set
User Application driver
The identity applications relies on various Identity Vault objects, so it is necessary to extend the
eDirectory schema to accommodate the custom LDAP objects and attributes required by the identity
applications.
The identity applications schema extension occurs automatically as part of the install. The custom
objects and attributes are populated with default values after the User Application driver is installed
and activated.
Use
This section helps you set up your production environment for the identity applications.
Chapter 5, “Understanding the Design Needs,” on page 55
Chapter 6, “Configuring Security in the Identity Applications,” on page 57
Chapter 7, “Assigning the Identity Applications Administrators,” on page 67
Chapter 8, “Setting Up Logging in the Identity Applications,” on page 71
Chapter 9, “Tuning the Performance of the Applications,” on page 97
Chapter 10, “Customizing the Identity Applications for Your Enterprise,” on page 111
Chapter 11, “Setting Up the Dashboard for Identity Applications,” on page 149
Chapter 12, “Configuring a Multi-Threaded Role and Resource Service Driver,” on page 151
Chapter 13, “Configuring Identity Applications Clustering and Permission Clustering,” on
page 155
For more information about installing the identity applications, see “Considerations for Installing
Identity Manager Components ” in the NetIQ Identity Manager Setup Guide for Linux or
Understanding the Installation and Configuration Process for Identity Manager Server, Identity
Applications, and Identity Reporting Components in the NetIQ Identity Manager Setup Guide for
Windows.
Each major subsystem can have many instances and many ways of connecting. Not every possible
layout is supported. This section provides information about design constraints and using a high-
availability environment.
“Design Constraints” on page 55
“High Availability Design” on page 56
Design Constraints
In general, you install the Identity Manager components on specific servers, as described in the
NetIQ Identity Manager Setup Guide for Linux or NetIQ Identity Manager Setup Guide for Windows.
When configuring the identity applications, you also need to consider the following architectural
constraints:
One user container per identity applications instance
No instance of the identity applications can service, such as search, query, or add users to, more
than one user container. Also, a user container association with the applications is meant to be
permanent.
One User Application driver per identity applications instance
No User Application driver can be associated with more than one instance of the identity
applications, except when the applications are installed on sister nodes of the same cluster. In
other words, Identity Manager does not support a one-to-many mapping of drivers to identity
applications instances.
The first constraint enforces a high degree of encapsulation in identity applications design. Suppose
you have the following organizational structure:
Figure 5-1 Sample Organizational Structure
During installation of the identity applications, you are asked to specify the top-level user container
that your installation looks for in the Identity Vault. In this case, you could specify
ou=Marketing,o=ACME or (alternatively) ou=Finance,o=ACME identity applications. You cannot
specify both. All searches and queries (and administrator logins) for the are connected to whichever
container you specify.
It is possible to create two independent installations of the identity applications that share no
resources in common: one for Marketing and another for Finance. Each installation would have its
own database and its own appropriately configured User Application driver. Also, each would be
administered separately, possibly having unique User Application drivers.
If you truly need to place Marketing and Finance within the same scope for one installation, you can
consider one of the following tactics:
Insert a new container object (for example, ou=MarketingAndFinance) in the hierarchy,
above the two sibling nodes; then point to the new container as the scope root.
Create a filtered replica (a special type of eDirectory ) that combines the needed parts of the
original ACME , and point the identity applications at the replica’s root container. For more
information about filtered replicas, see the eDirectory Administration Guide.
If you have questions about a particular system layout, contact your NetIQ representative for
assistance or advice.
Applications
Moving from pre-production to production usually involves hardening the security aspects of the
system. In sandbox testing, you might use regular HTTP to connect the User Application driver to the
application server, or you might use a self-signed certificate (as a temporary measure) for driver/
app-server communication. In production, on the other hand, you probably use secure connections,
with server authentication based on your company’s Verisign* (or other trusted provider) certificate.
“Understanding Security in the Identity Applications Environment” on page 57
“Using Secure Sockets for Identity Applications Connections to the Identity Vault” on page 59
“Enabling SSL for User Access” on page 60
“Enabling SOAP Security” on page 60
“Enabling Authentication” on page 61
“Encrypting Sensitive Identity Applications Data” on page 61
“Preventing XSS Attacks” on page 62
“Modifying Trustee Rights” on page 63
“Updating a Password for a Database User on Tomcat” on page 64
NOTE: In a multi-server eDirectory , disabling TLS on the LDAP group removes the TLS requirement
from all servers. If you want mixed TLS requirements for each individual server in your , you must
enable the TLS requirement on each server.
<security-constraint>
<web-resource-collection>
<web-resource-name>IDMProv</web-resource-name>
<description>IDM Provisioning Edition</description>
<url-pattern>/*</url-pattern>
<http-method>POST</http-method>
<http-method>GET</http-method>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
3 Save the file and archive, then restart Tomcat.
<property>
<key>com.netiq.xss.blacklist.detailportlet</key>
<value>...</value>
</property>
The text node of <value> is the blacklist for Detail portlet. The blocked words are separated by
comma (for example, blocked_word1,blocked_word2,...). The default setting is:
",<
This means that double quote and < are disallowed.
To modify the blacklist for the approval flow and role assignments pages, locate the
com.netiq.xss.blacklist.workflow property.
<property>
<key>com.netiq.xss.blacklist.workflow</key>
<value>...</value>
</property>
The syntax is the same. The default value is:
<
which means that < is disallowed.
If you decide to customize the blacklists, be careful not to remove the default values. If you remove
these values, you will make the lists less restricted, and therefore increase the risk of XSS attacks.
The srvprvUserPrefsPlus property has no space limitations, so it can save a large amount of user
preference information. If you have used the srvprfUserPrefs property in a previous release, this
property will be migrated to srvprvUserPrefsPlus the first time a user saves new preferences in the
identity applications.
Administrators
The identity applications support several types of users. To make administrative-type changes to the
applications, you must be assigned to at least one of the administrator or manager roles.
“Understanding the Administrators of the Identity Applications” on page 67
“Changing the Default Administrator Assignments after Installation” on page 68
To assign administrators using Identity Manager Dashboard, see “Assigning Administrators in Identity
Applications” on page 217.
NOTE: For testing purposes, NetIQ does not lock down the security model in Standard Edition.
Therefore, the Security Administrator is able to assign all domain administrators, delegated
administrators, and also other Security Administrators. However, the use of these advanced
features is not supported in production. In production environments, all administrator
assignments are restricted by licensing. NetIQ collects monitoring data in the audit database to
ensure that production environments comply. Furthermore, NetIQ recommends that only one
user be given the permissions of the Security Administrator.
The identity applications administrator is not a system role. For more information, see “Identity
Applications Administrator” on page 32.
Modifying the mappings for these administrative accounts in the configupdate utility after the
installation and initialization process will not work in this release. The check for assigning the
administrative roles happens only once. At this time, a property is set that keeps track of when these
roles were assigned.
NOTE: To modify the default administrator assignments for the identity applications, you must first
edit the configupdate.sh or configupdate.bat file and change the -edit_admin property to
true. You can then use configupdate to modify the default assignments.
<key>com.novell.idm.security.domain-admin.initialized</key>
For example:
<property>
<key>com.novell.idm.security.domain-admin.initialized</key>
<value>20090831124642Z</value>
</property>
5 Click OK.
6 Restart the User Application driver and the Role and Resource Service driver.
7 Restart Tomcat.
Applications
Logging is the main tool you use for debugging the identity applications configuration. The logging
service provides facilities for writing, viewing, filtering, and listening for log messages. The Tomcat
application server instances and subsystems, and applications that run on Tomcat or in client JVMs
generate these log messages.
This sections discusses the following topics:
“How Logging Services Help” on page 71
“What Can Be Logged” on page 79
“How Logging Works” on page 80
“Types of Log Files” on page 82
“Understanding the Log Format” on page 85
“Configuring Logging” on page 87
“Configuring Logging in a Cluster” on page 91
“Enabling Sentinel Logging” on page 92
“Using Log Files for Troubleshooting” on page 93
“Log Events” on page 93
For troubleshooting
issues related to
managing roles, see
“When a Role Is
Requested” on
page 635.
Code Map Code map is a local cache used com.novell.idm.nrf.service For troubleshooting
Refresh by the identity applications to com.novell.idm.nrf.persist any connected
store entitlements values for all system issue, enable
connected systems from the com.novell.srvprv.impl.vdata.mo DSTrace on the
Identity Vault. The identity del driver.
applications queries the Identity
Vault for the drivers that are in For viewing sample
running state and have log messages related
entitlements. The identity to code map refresh,
applications updates the see “When a Code
identity applications database at Map Refresh Is
configurable intervals with Triggered” on
entitlement changes. For more page 633.
information about code map
refresh, see “Configuring Default
Resource Settings” on page 206.
The logs generated by the packages are primarily intended for debugging the software, although
they can be used to detect any other software that is not behaving properly. System administrators
and support personnel can identify and isolate problems caused by configuration errors, invalid user
data, or network problems such as broken connections. However, component file logging is typically
the first step in identifying software bugs.
Package logging is more verbose than audit logging. It increases the processing load. On a day-to-day
basis, you are recommended to enable only log levels of error conditions and system warnings. If a
specific problem occurs, logging can be set to Info or Debug to gather extra information needed to
isolate and resolve the detected problem. When the problem is resolved, logging should be
reconfigured to log only error conditions and system warnings.
You can configure the log files to include entries for the following events:
Configuration
Events processed by the identity applications components, such as authentication, role
assignment, and resource access
Error conditions
The log files help you determine which of the following reasons is responsible for a request failure:
The browser did not send the required information
Directory Access Layer or the Identity Vault did not send the web client browser the required
information
To view Identity Manager processing events in Identity Manager drivers, use Trace. Specify
appropriate trace values to the driver set and the drivers in Designer or iManager. For more
information, see Viewing Identity Manager Processes in the NetIQ Identity Manager Driver
Administration Guide.
Terminology
Log4j has three main components: loggers, appenders, and layouts. These components work
together to accomplish the following tasks:
Record messages based on message type and level.
Control how log messages are formatted and where they are reported at runtime.
Logger: In Log4j terminology, a logger is a named entity. Log4j defines a Logger class. A Logger object
records messages for a specific subsystem or application component. An application can create
multiple loggers, each with a unique name. In a typical usage of Log4j, an application creates a
Logger instance for each application class that will emit log messages. Logger names are case-
sensitive and they follow the Java package dot notation naming convention.
All loggers specific to the identity applications are defined in the idmuserapp_logging.xml file.
You can set the severity level for each logger at any level in the hierarchy from the Logging
Administration page or by editing the log4j file. For more information, see “Specifying the Severity
Level for Commons Logging API Loggers” on page 89.
Appender: In Log4j terminology, an output destination is called an appender. Log4j defines
appenders to represent destinations for logging output. You can define multiple appenders. For
example, an application might define an appender that sends log messages to standard out, and
another appender that writes log messages to a file. Additionally, you can configure individual
loggers to write to zero or more appenders. For example, you can configure the loggers to send all
logging messages (all levels) to a log file, but only Error level messages to standard out. To change
The Tomcat subsystems use log4j to produce messages. By default, Tomcat supports Java based
logging to distribute messages. The LoggingHelper class provides access to the
java.util.logging.Logger object used for server logging. The Java Logging APIs can be used to add
custom handlers, filters, and formatters. Alternatively, you can configure Tomcat to use Log4j APIs to
distribute log messages.
Custom appenders are created to handle log messages in order to convert the messages to a specific
format and send them to the configured auditing service. To configure event message output to an
auditing service, see “Configuring Identity Applications Default Settings” on page 205.
To configure logging, see “Configuring Logging” on page 87.
Each Tomcat server instance prints a subset of its messages to standard.out or idapps.out file.
The idapps.out log file is specific to identity applications. The userapp-log4j.xml file stores
the logging configuration for identity applications, which directs all log messages to idapps.out.
The catalina.out file is located on the computer that hosts the Tomcat server instance. Each
server instance has its own catalina.out file. By default, the catalina.out file is located in the
logs directory under Tomcat’s root directory. For example, /opt/netiq/idm/apps/tomcat/
logs/catalina.out. To view messages in the catalina.out file, log in to the computer hosting
Tomcat and use a standard text editor.
NetIQ recommends that you do not modify the log files by manually editing them. Modifying a file
changes the timestamp and can confuse log file rotation. In addition, editing a file might lock it and
prevent it from recording information from the Tomcat server.
Some operating systems enable you to redirect standard out to some other location. By default, a
server instance prints only messages of Info severity level or higher to standard out. You can modify
the severity threshold as a logging configuration so that the server prints more or fewer messages to
respective log files.
Localhost Log : This is the log for all HTTP transactions between the client and the application server.
The log file is named as, localhost_access_log.<date of log generation>.txt file. The
default location and rotation policy for this log is the same as catalina.out file.
Application Log: Each identity application component is responsible for its own logging. Tomcat
provides no support for application logs. Each component will have its own logging configuration
where default log levels and appender configurations are defined. These logging configuration files
are placed under \conf directory of Tomcat server.
Message Fields
A Tomcat server message contains a consistent set of fields as described in the following table. In
addition, if your applications use Tomcat logging services to generate messages, those messages will
contain these fields.
Field Description
Time-date-stamp Time and date when the message originated in a format that is specific to the locale.
The JVM that runs a Tomcat server instance refers to the host computer operating
system for information about the local time zone and format.
The date and time is specified in the W3C profile format of ISO 8061. It has the
following fields: year-month-day-T-hour-minutes-seconds-time zone. The Z value for
the time zone indicates that the time is specified in UTC.
Severity Indicates the degree of impact of the event reported by the message such as
warning, informational, or debug.
Subsystem Indicates Tomcat’s subsystem or the type of the module that was the source of the
message. For example, RBPM or Java Messaging Service (JMS).
In the example log entry, this field contains the following string:
com.novell.idm.nrf.service.RoleManagerService- [RBPM]
[Role_Request]
Message text A description of the event or condition specific to the log entry. It can be as simple as
an informational string, such as the string in the example log entry:
If a message is logged within the context of a transaction, the message text contains
an identifier assigned to the identity applications transaction. Identity applications
transactions are actions such as authenticating a user, processing a request for a
role, and request for access to a resource.
If a user requests access to multiple resources, multiple request objects are created
and each request is given a separate Correlation ID. Each request is processed
separately and status of each can be seen in the user request history.
UserApp#UserStartWorkflow#082080ec-5b10-498f-b87d-28825ab63278
Message Severity
The severity attribute of a log message indicates the potential impact of the event or condition that
the message reports. The following table lists the severity levels of log messages from the identity
applications subsystems, starting from the lowest to the highest level of impact.
Warn A suspicious operation or configuration has occurred but it might not affect
normal operation. Writes warnings (plus all of the above) to the log.
Info Used for reporting normal operations; a low-level informational message. Writes
informational messages (plus all of the above) to the log.
Debug Writes debugging information (plus all of the above) to the log.
Trace Used for most detailed messages. You can configure this level to report the
request path of a method. Writes tracing information (plus all of the above) to
the log.
You can set a log severity level on loggers and appenders. When set on a logger, none of the
appenders receives any events that are rejected by that logger. For example, if you set the log level
to Info on a logger, none of the appenders will receive Warn level events. When you set a log level
on the appender, the restriction only applies to that appender and not to other appenders. For
example, if you turn Error off for the File appender, no Error messages are written to the log file.
However, Error messages are written to the standard.out file.
<logger name="com.sssw" level="INFO" additivity="true">
<appender-ref ref="CEF"/>
</logger>
<logger name="com.netiq" level="DEBUG" additivity="true">
<appender-ref ref="CEF"/>
</logger>
You set log levels for loggers using the Logging Administration page or the log4j file. For more
information, see “Configuring Logging Settings in Identity Manager Dashboard” on page 89. Loggers
can also be configured through APIs. You can only enable or disable an appender.
The identity applications modules generate many messages of lower severity and fewer messages of
higher severity. For example, under normal circumstances, they generate many Info or Trace
messages. If your application uses Tomcat logging services, it can use an additional severity level of
Debug.
Configuring Logging
You can configure logging to troubleshoot errors or to receive notification for specific events. For
example, configure logging to perform the following activities:
Stop recording of Debug and Info messages in the log file.
Allow recording of Info level messages from the HTTP subsystem in the log file.
Configure an appender to publish messages only whose severity level is Warning or higher.
Track log information for individual servers in a cluster.
The default behavior of the Tomcat server is to limit the console log4j appender to display log
messages with a verbosity of Info or less. To see log messages for more verbose levels (for example,
Debug), you need to examine the server log file. Notice that the low threshold settings, such as
Debug are extremely verbose and will increase Tomcat's startup time.
The following sections discuss different ways of configuring the logging behavior.
<root>
<priority value="INFO"/>
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</root>
Change the priority value to:
<root>
<priority value="ERROR"/>
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</root>
Assigning a value to the root ensures that any appenders do not have a level assigned inherit the
root's level.
You can configure the severity for a package or for any logger at any level in the . For example, if you
specify the severity level for package com.acme=Warn, then Fatal and Error messages from the
child nodes of this package will be blocked. You can override the severity level of a parent node by
explicitly setting a value for a child node. For example, if you specify the severity level for
com.acme.Barlogger=Debug, all log messages from Barlogger will be allowed, while Fatal
and Error messages will be filtered for other child nodes under com.acme.
You can specify the severity level for a package or a logger in the following ways:
In Identity Manager Dashboard, go to Configuration > Logging and change the log level settings.
The changes will be immediately applied. When you restart Identity Applications, the changes
are not preserved. To persist the changes for subsequent sessions, select Persist the logging
changes. Alternatively, modify the log4j.properties file.
Edit the log4j.properties file. Your changes will take effect when you restart Tomcat.
Identity Applications preserves this configuration for subsequent sessions.
If you change, enable, or disable logging, you need not restart the identity applications to apply the
changes.
Add a new logger for a class or package name. For more information, click in Identity
Manager Dashboard.
Remove a logger for a class or package name. For more information, click in Identity
Manager Dashboard.
Set the logging level (Fatal, Error, Warn, Info, Debug, Trace) for each class or package name.
Reset all logging levels.
All logging configuration cannot be changed in the Logging page, such as Tomcat server specific
configuration and appender configuration. For making such changes, stop the identity applications
and then edit the log4j.properties file.
You can change the log level of the packages individually by searching a package name. If you want
to change the log level for all the packages:
1 Select Change log level for the listed packages.
2 Select the log level from the list.
Level Description
Error Writes errors that can cause system processing to not proceed.
Warn Logs potential failures, but the impact on execution is minimal. Warnings
indicate that you should be aware that this event is happening and might want to
make a configuration change to avoid it.
Trace The most detail. Writes tracing information (plus all of the above) to the log.
NOTE: By default, the log level is set to Info for all the packages.
3 (Conditional) To retain these changes after restarting the application server, select Persist the
logging changes.
4 Click Apply.
NOTE: The Console and File appenders are defined in tomcat-log4j.xml. All loggers specific to
the identity applications are defined in idmuserapp_logging.xml.
To change the log level in the tomcat-log4j.xml file, open the file in a text editor and locate the
following entry at the end of the file:
<root>
<priority value="INFO" />
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</root>
Assigning a value to root ensures that any log appenders that do not have a level explicitly assigned
inherit the root level (in this case, Info). For example, the File appender does not have a default
threshold level assigned. It assumes the root’s threshold level.
The possible log levels used by log4j are Debug, Info, Warn, Error, and Fatal, as defined in the
org.apache.log4j.Level class. Inattention to the proper use of these settings can be costly in
terms of performance.
A good rule of thumb is to use Info or Debug only when debugging a particular problem.
By default, the rotated files are stored in the same directory where the log file is stored. You can
specify a different directory location for the archived log files in the log4j.properties file.
Log Events
The identity applications log a set of events automatically from workflow, search, detail, and
password requests. By default, the following events are automatically logged to all active logging
channels:
31450 Create Proxy Definition Occurs when the creation of an entity definition succeeds
Success
31451 Create Proxy Definition Occurs when the creation of an proxy definition fails
Failure
31452 Update Proxy Definition Occurs when an update to the proxy definition fails
Success
31453 Update Proxy Definition Occurs when an update to the proxy definition fails
Failure
31454 Delete Proxy Definition Occurs when the proxy definition is deleted successfully
Success
31455 Delete Proxy Definition Occurs when the proxy definition is not deleted successfully
Failure
31456 Create Delegatee Occurs when the creation of a delegatee definition succeeds
Definition Success
31457 Create Delegatee Occurs when the creation of a delegatee definition fails
Definition Failure
31458 Update Delegatee Occurs when an update to the delegatee definition succeeds
Definition Success
31459 Update Delegatee Occurs when an update to the delegatee definition fails
Definition Failure
003145A Delete Delegatee Occurs when the delegatee definition is deleted successfully
Definition Success
003145B Delete Delegatee Occurs when the deletion of a delegatee definition fails
Definition Failure
003145D Create Availability Failure Occurs when the creation of an availability fails
003145F Delete Availability Failure Occurs when the deletion of an availability fails
003152D Provision Error Occurs when there is an error in the provisioning step
3152E Provision Submitted Occurs during the provisioning step on submission of entitlements.
003152F Provision Success Occurs during the provisioning step on successful completion of the
step
31530 Provision Failure Occurs during the provisioning step upon failure of the step
31531 Provision Granted Occurs during the provisioning step on granting of an entitlement
31532 Provision Revoked Occurs during the provisioning step on the revoking of an
entitlement
31535 Workflow Reminder Sent Occurs when reminders are sent to addressees of a workflow task
31536 Digital Signature Occurs whenever a digital signature is passed to the workflow
engine
31537 Workflow ResetPriority Occurs when the priority of a workflow task is reset.
31611 Role Request Failure Occurs when the request for a role fails
31613 SOD Exception Auto Occurs when the SOD exception is auto approved
Approval
31614 Retract Role Request Occurs when the role request is retracted
31615 Retract Role Request Occurs when the retraction of a role request fails
Failure
31621 Entitlement Grant Failure Occurs when the entitlement grant fails
31694 Create Authorization Occurs when the permissions are assigned to the team
31695 Delete Authorization Occurs when the permissions are removed from the team
Applications
Identity Applications rely on diverse technologies with many interactions.
Designer (Design Workflows)
Workflow Acons
User Interface
Workflow Engine
Configuraon Store
Workflow
state
Workflow Roles Directory
Definion Access Layer
This section discusses common aspects that can enable you to optimally tune the performance of
provisioning components and Tomcat application server. You can use this information as a reference
for starting your performance tuning. For a good understanding of potential areas where tuning can
improve performance, monitor your application usage patterns, loads, and hardware specifications,
and then track specific performance issues.
Several tools are available on the Internet to monitor Java applications. Standard Java JDK comes
with two graphical user interface-based monitoring tools: JConsole and VisualVM. These tools are
free and easy to install. VisualVM provides advanced monitoring features than JConsole. VisualVM
enables to analyze the thread execution and profile CPU and memory usage of the JVM requests. For
more information about these tools, see JDK Tools (https://docs.oracle.com/javase/8/docs/
technotes/tools/). The following are a few Linux-based examples of monitoring local applications
that are running on the same system as VisualVM and remote applications that are running on other
systems:
NOTE: The focus of the section is tuning and not troubleshooting. Effective troubleshooting involves
identifying the clues and root cause of the problem, and then making corrections. You must first
attempt to troubleshoot the problem before thinking about tuning. For more information about
troubleshooting, Chapter 43, “Troubleshooting,” on page 629.
Java does not effectively handle the stack space for recursive type functions. The default value
for the stack size in the JVM is 1024K. Therefore, you must increase the stack size for the JVM to
4M depending on the recursive logic defined in the workflow. To increase the stack size, define
the new value in the -Xss setting in the JAVA_OPTS entry in your Tomcat start script file (/
<search-max>10000</search-max>
5 Save your changes.
You must change the LDAP connection time out value to match the Identity Vault usage in your
environment depending on how much time out period can you afford. For example, if your query is
not performing as expected or the data size that you are expect the query to return is large, increase
the time out value. Decreased time out value allows the server to release unused resources
relatively quickly, which improves the performance and scalability of Identity Applications.
The general idea is to index only those attributes that you know are regularly queried, which could
be different attributes in different production environments. If you already know which attributes
you are likely to use in your searches, you must index those attributes. For example, if you know that
users of your org chart are likely to perform searches based on the isManager attribute, you can
try indexing that attribute to see if the performance is enhanced.
NOTE: As a best practice, it is recommended that you index, at a minimum, the manager and
isManager attributes.
changetype: modify
add: indexdefinition
changetype: modify
add: indexdefinition
indexdefinition: 0$sntitleindex$0$0$0$1$Title$surname
2 Run the following command to create indexes:
NOTE
An index with ancestor id can only be created with value index type. Presence and Substring
index types are not supported with ancestor id.
Database size increases after creating index with ancestor id.
The Database Information section of the page shows the size of your DIB in KBs. In this example, the
DIB is about 4 GBs. It is hard-coded to use 8 GBs of RAM for the cache. The DIB has about 400,000
users and 100,000 groups.
To monitor the cache statistics, locate the Database Cache section on the page.
About 5.2 GB of the 10 GB allocated is actually used by the cache. When it reaches the maximum
allocated size, eDirectory divides the memory into equal parts, as the Max Entry and Max Block lines
show. To change this configuration, use the Block Cache percentage option at the bottom of the
page.
Your Enterprise
Identity Manager provides several tools for localizing or customizing the content in the identity
applications user interface. This section helps you perform the following activities:
“Linking the Dashboard to External Applications” on page 112
“Customizing the Look of the User Interfaces” on page 112
“Localizing the Text in the Interfaces” on page 114
“Adding a Language to the Identity Applications” on page 119
“Configuring User Names” on page 125
“Configuring Email Notification Templates for the Dashboard” on page 128
“Configuring Forgot Password? Functionality” on page 129
“Ensuring that Characters Display Properly in Role Report PDF Files” on page 129
“Ensuring that Dates Display Correctly in Norwegian” on page 130
“Configuring Client Settings Mode” on page 130
“Copying the Client Settings” on page 131
“Copying the Workflow Migration” on page 134
“Changing Identity Applications Client Settings” on page 137
“Hiding the Navigation Items from User Interface” on page 147
Localizing provisioning objects or customizing their “Localizing Provisioning Objects,” in the NetIQ
display text, such as: Identity Manager - Administrator’s Guide to
Designing the Identity Applications
Directory abstraction layer objects
Provisioning request definitions
Workflow activity display names
For more information about customizing the Applications page, click on the Dashboard.
NOTE: The labels and string text typically change between versions. This means that you have to
apply your string changes or customizations to each new release.
You can also translate or localize the names and descriptions of provisioning objects in the Directory
Abstraction Layer, Provisioning Request Definition, and Role Catalog. For more information, see
Localizing Provisioning Objects.
WARNING: Do not modify any text in the code string before the = sign. For example, category-
featured-47-name =. The Dashboard might not function appropriately if you change the code
string incorrectly.
Czech cs
Danish da
Dutch nl
English en
French fr
German de
Italian it
Japanese ja
Norwegian nb
Portuguese pt
Russian ru
Spanish es
Swedish sv
4 In the Languages window, download the .properties file for each language that you want to
localize.
Depending on your browser settings, you might be prompted for the download path.
NOTE: If prompted, do not rename the .properties file. The Dashboard cannot upload a file
that does not match the expected name.
5 In a text editor, customize the displayed text for the attributes that you want to change.
For example, if you download the pt.properties file to localize the Dashboard in Swedish,
modify the properties file as follows:
# English value: My Category
category-featured-47-name = Min kategori
NOTE: If you want to use double-byte or extended characters in the properties file, ensure that
you save the file using the correct encoding.
NOTE: Depending on the browser settings, you might need to log out of the Dashboard, clear
the cache in the browser, then log in again.
WARNING: Do not modify any text in the code string before the = sign. For example, category-
featured-47-name =. The identity applications might not function appropriately if you change
the code string incorrectly.
WARNING: Do not change the file names or directory structure of the .jar files.
5 To access the .properties files in each .jar file in the temporary directory, complete one of
the following actions:
Extract the .properties files
Use WinRAR to open each .properties file
For example, access the OAuthManagerRsrc_en.properties file in the
UserAppStrings_en.JAR.
6 Browse the file directory to the .properties file that you want to edit.
For example, UserAppStrings_fr.properties.
7 In a text editor, customize the displayed text for the content that you want to change.
WARNING: Do not modify any text in the code string before the = sign. For example,
ADMIN_PASSWORD=. The identity applications might not function appropriately if you change
the code string incorrectly.
WARNING: Do not change the file names or directory structure of the .jar and WAR files.
9a Using the Java JDK jar program, add the properties files back to the .jar file.
9b Add the modified .jar to the appropriate WAR file, maintaining the folder location within
the WAR.
You can use the Java JDK Jar program. For example:
jar -uvf IDMPRov.WAR WEB-INF/lib/UserAppStrings_fr.jar
9c Redeploy the WAR file to your application server.
10 Stop Tomcat.
For example:
systemctl stop netiq-tomcat
11 Delete all files and folders in the following directories:
Tomcat temporary directory, located by default in /opt/netiq/idm/apps/tomcat/
temp
Catalina directory, located by default in /opt/netiq/idm/apps/tomcat/work/
Catalina
NOTE: Make sure that you have maintained the existing directory structure during extraction.
WARNING: Do not modify any text in the code string before the = sign. For example,
ADMIN_PASSWORD=. The identity applications might not function appropriately if you change
the code string incorrectly.
WARNING: Do not change the file names or directory structure of .jar and WAR files.
9a Using the Java JDK jar program, add the properties files back to the .jar file.
9b Update the osp-custom-resources.jar with the customized properties files in the
temporary directory.
You can use the Java JDK Jar program. For example:
jar -uf osp-custom-resources.jar resources/
oidp_enduser_custom_resources_en_US.properties
9c Copy the updated osp-custom-resources.jar to the tomcat/lib directory.
10 Delete all files and folders in the following directories:
Tomcat temporary directory, located by default in /opt/netiq/idm/apps/tomcat/
temp
Catalina directory, located by default in /opt/netiq/idm/apps/tomcat/work/
Catalina
11 Start Tomcat.
For example:
systemctl start netiq-tomcat
12 Before logging in to the identity applications, clear the browser cache to ensure that the
browser displays your changes.
Checklist Items
1. Configure the identity applications to support the new language. For more information, see
“Adding the New Language to the Identity Applications” on page 120.
2. Copy an existing set of files that you can use as a template for translating to the new
language. For more information, see “Preparing Files for Translation” on page 121.
4. Change the default language to the new language. For more information, see “Changing the
Default Language” on page 123.
5. Add the translated files to the appropriate locations, such as WAR files or upload to the user
interface. For more information, see “Add the Translated Files to the Proper Locations” on
page 124.
6. Update notification templates using designer. For more information, see “Updating an Email
Notification Template” on page 125.
7. Verify that the identity applications display the appropriate content. For more information,
see “Verifying the New Translations” on page 125.
For more information about customizing the content for a existing language, see “Localizing the Text
in the Interfaces” on page 114.
WARNING: Do not change the directory structure of the .jar files or modify any text in the
code strings before the = sign. The identity applications might not function if you make
inappropriate alterations.
WARNING: Ensure that the translator maintains the file names and directory structure of the
.jar files. Also, do not modify any text in the code string before the = sign. For example,
com.netiq.UA.persistence.ops.AttributeDefinition.USER.guid=. The identity
applications might not function if you make inappropriate alterations.
6 To add the supported locale for idmadmin.war, perform the following steps:
6a Navigate to idmadmin.war and open this file using Winrar.
\opt\netiq\idm\apps\tomcat\webapps\idmadmin.war
6b Add the new AdminStringsRsrc_xx.json file and validate this file.
\idmadmin.war\assets\i18n\
7 To change the supported locale for idmadmin.war, perform the following steps:
7a Navigate to idmadmin.war and open this file using Winrar.
\opt\netiq\idm\apps\tomcat\webapps\idmadmin.war
7b Edit the AdminStringsRsrc_xx.json file and validate this file.
\idmadmin.war\assets\i18n\
7c Copy the edited AdminStringsRsrc_xx.json file to the following location.
\idmadmin.war\assets\i18n\
NOTE: You might need to wait a few minutes for the utility to start up.
4 Select Miscellaneous.
5 For Supported Locales, add the locale code that represents the language(s) that you want to
include. Use a pipe sign to separate entries.
For example, enter |nb for Norwegian.
NOTE: Depending on the browser settings, you might need to log out, clear the cache in
the browser, then log in again.
Consider the following while configuring the property for sorting users:
You can specify only one attribute for the com.netiq.idm.user.sortcol property.
If the configured attribute is not part of the compound index or DAL, the application resets the
property com.netiq.idm.user.sortcol to the default value, FirstName in the ism-
configuration.properties file. Consequently, the users are sorted based on their
FirstName attribute.
Server side sort uses sorting key attributes such as Given Name and Surname in the compound
index to perform searches. The application sorts the data based on the order in which these
attributes have been configured. The attribute set for the com.netiq.idm.user.sortcol
property is used as first sorting key, whereas the second sorting key attribute is selected by the
application. For example, when the com.netiq.idm.user.sortcol property is set to
LastName, the application uses Surname as the first sorting key attribute and Given Name as
second sorting key attribute while sorting the users. Similarly, if you set the property as
com.netiq.idm.user.sortcol=TelephoneNumber, the users will be sorted using the
Telephone Number and Surname as the first and second sorting attribute respectively.
For more information on compound indexes, see “Enabling Compound Index on Identity Vault
Attributes” on page 106.
NOTE
Not all notification templates include links to the identity applications.
Modifying an existing notification template marks that template as customized in Designer.
NOTE: We recommend you create and modify a copy of the original notification template you
want to configure, rather than modifying the original. You can then specify the “Identity
Manager Dashboard” version of the template in any workflows where you want users to use the
Dashboard, and not modify the workflows where you want users to use the identity
applications.
/etc/init.d/netiq-tomcat restart
6 After Tomcat finishes restarting, go to the Dashboard login page to verify the page displays the
Forgot password? link.
NOTE: You may also notice problems displaying some characters in role reports for languages that
are not in the standard set of supported languages. If you add a new language (such as Polish), you
may also need to perform the steps provided in this section to ensure that all characters display
properly for that language as well.
Context > Driver Set > Driver > AppConfig > AppDefs
For example:
netiq > TestDrivers > UserAppDriver > AppConfig > AppDefs
4 Click configuration.
5 In the Valued Attributes list, select XmlData and click Edit.
6 In the Edit Attribute window, search for PREF_FONT and replace the corresponding <value></
value> with <value>Arialuni.ttf</value>.
7 Search for PREF_ENCODING and replace the corresponding <value></value> with
<value>Identity-H</value>.
8 Click OK, the click OK again.
9 Restart the User Application driver.
NOTE: You can set client settings directory as %user.home% to create the client settings directory
under the User Home folder. You can also set the client setting directory as %catalina.base% to
create the client setting folder under <tomcat_base_folder> folder. If you do not set the client
settings directory, the directory is created under the <tomcat_base_folder>/conf folder.
Using Database
Administrator can also store the configuration in the CLIENT_SETTINGS table in the identity
applications database.
By default, the client settings configuration is stored in File System mode. The administrator can
specify the mode of saving the configuration in the ism-configuration.properties file. You
can add the com.netiq.idmdash.client.settings.store.preference in the ism-
configuration.properties file with the appropriate value. If you want to change the mode to
database, set the property value to database. You must also set the
com.netiq.idm.rbpm.updateConfig-On-StartUp property as true to update the database
with any application configuration changes.
IMPORTANT
Always select the database mode for saving the client settings configuration on each node of
the cluster environment for each node to share the settings.
To copy the client settings from File System to Database mode or vice versa, use the
MigrationSettings migration utility as instructed in “Copying the Client Settings” on
page 131.
Run the jar file in a command prompt using the following syntax:
java -jar MigrationSettings.jar [-option1] [value1]....[-optionN] [valueN]
The following options are supported with the jar file:
source.ip=192.127.0.2
source.port=8180
source.rbpm.web.context=IDMProv
source.username=cn=uaadmin,ou=sa,o=data
source.password=password
destination.protocol=http
destination.ip=192.127.0.1
destination.port=8180
destination.rbpm.web.context=IDMProv
destination.username=cn=uaadmin,ou=sa,o=data
destination.password=password
where source specifies the location from where you want to copy the client settings and
destination specifies the location to which you want to copy these settings. Location can be a
server, File System, or a Database.
NOTE: You must specify the values for the properties for the source. If you do not specify the value
for the password property in the silent properties file, the utility prompts you for the value when you
run it in the command line.
Examples
Example 1: java -jar MigrationSettings.jar -e settings.json -f silent.properties
This command copies all client settings into the settings.json file. This option is useful when you
want to save the exported settings.
Example 2: java -jar MigrationSettings.jar -i settings.json -f silent.properties
This command imports all client settings from the settings.json file to the destination server by
reading the values provided in the silent properties file.
IMPORTANT: Before performing the data migration, you must stop the Roles and Resource Driver.
The Roles and Resource driver should not be started until the data export and import operations are
completed.
source.ip=yourIP
source.port=8543
source.rbpm.web.context=IDMProv
source.username=cn=uaadmin,ou=sa,o=data
source.password=password
destination.protocol=https
destination.ip=yourIP
destination.port=8543
destination.rbpm.web.context=IDMProv
destination.username=cn=uaadmin,ou=sa,o=data
destination.password=password
connection.timeout=10000000
3 Run the following commands to export data from their respective directories where you have
unzipped the ISO files based on your Operating System:
Linux: Run the following command for Linux:
/opt/netiq/common/jre/bin/java -jar WorkflowMigrationAPI.jar -e
filename.zip -f silent.properties
Windows: Run the following command for Windows:
C:\NetIQ\Common\JRE\bin\java -jar WorkflowMigrationAPI.jar -e
filename.zip -f silent.properties
4 Create a new database for workflow engine and update the newly created workflow database
details in the server.xml file.
5 Set com.netiq.idm.create-db-on-startup attribute to true in the ism-
configuration.properties file.
6 Start the Tomcat server and ensure that the Workflow DB Schema has been created as part of
the Tomcat startup.
7 Run the following commands to import the data which was exported in step 3:
Linux: Run the following command on Linux:
/opt/netiq/common/jre/bin/java -jar WorkflowMigrationAPI.jar -i
filename.zip -f silent.properties
Windows: Run the following command on Windows:
NOTE: You must specify the values for the properties for the source. If you do not specify the value
for the password property in the silent properties file, the utility prompts you for the value when you
run it in the command line.
Examples
Example 1: java -jar WorkflowMigrationAPI.jar -e wf_db_migration.zip -f silent.properties
This command copies all workflow migration data into the wf_db_migration.zip file. This option
is useful when you want to save the exported settings.
Example 2: java -jar WorkflowMigrationAPI.jar -i wf_db_migration.zip -f silent.properties
This command imports all workflow migration data from the wf_db_migration.zip file to the
destination server by reading the values provided in the silent properties file.
Example 3: java -jar WorkflowMigrationAPI.jar -e wf_db_migration.zip -sp http -ss localhost -spo
8543 -srctx IDMProv -su cn=uaadmin,ou=sa,o=data -spwd password
This command exports all workflow migration data from the server whose details are provided in the
command prompt. This option is useful when you want to save the exported settings.
Example 4: java -jar WorkflowMigrationAPI.jar -i wf_db_migration.zip -dp http -ds localhost -dpo
8543 -drctx IDMProv -du cn=uaadmin,ou=sa,o=data -dpwd password
This command copies all client settings stored in the wf_db_migration.zip file to the destination
server whose details are provided in the command prompt.
User Settings
The User settings enable you to configure the attributes displayed in the Users page for the selected
client.
Card View
Represents the attributes that you want the application to display by default when the user
selects Card View in the Users page.
Other Attributes
Represents additional attributes that provide details about a selected user.
Editable Attributes
Represents the attributes that can be modified for a user’s details. For most attributes, you can
also enter text to serve as default values or examples to aid in new user creation, as desired.
The following example allows a client user to edit Title, Manager, Telephone Number, Manager,
and Direct Report attributes:
Figure 10-1 Editable Attributes
To add more attributes to the list, click Add. You can also select a different attribute from the list
to modify the editable attributes.
General Settings
The General settings specify how the client responds upon user login and when the user initiates
forms.
Notification Expiry
Specifies the number of days before a task or role expires that the application begins displaying
a notification when the user logs in.
Enable Task Bulk Approval
Allows the client users to approve or deny multiple requests at a time.
Disable Implicit Claim of Task
Specifies whether it is mandatory for the user to claim a task before approving or denying it. By
default, this flag is set as false; user can approve or deny the task without claiming it. If you set
this flag as true, user must claim the task explicitly. In this case, the approval and deny options
are not displayed until the task is claimed by a user. The functioning of Disable Implicit Claim of
Task option also applies to bulk approval of tasks.
Entity Settings
The Entity settings enable you to configure the attributes. The entities are created using Designer.
For more information see, About Entities and Attributes in the NetIQ Identity Manager -
Administrator’s Guide to Designing the Identity Applications.
To configure an entity, click the icon and select the entity type from the drop down menu. The
deployed entities are displayed in the drop down menu. Click Create. This displays the selected entity
in the Entities tab and in the Navigation items menu.
To delete an entity, select the entity from the Navigation items menu and click the icon. The
deleted entity will not be listed under the Entities tab.
View Attributes
Represents the attributes that you want the application to display by default when you select
the created entity in the Entities tab
In the example shown in Figure 10-2 on page 141, description, direct reports, company,
language, photo, manager, city, mobile, title, and CN are selected for display by default.
Figure 10-2 View Attributes
Base Container
Specifies the container in the Identity Vault that stores a newly created entity.
This value cannot be modified. Therefore, all entities are stored in this container for a particular
client.
For more information about applying your brand to the Dashboard, click on the Dashboard and
see Customize the Branding.
NOTE
Ensure that the helpdesk admin user has read access to manager property of the user container.
NetIQ recommends not to assign helpdesk admin role to a team manager to avoid conflicts in
between these roles.
For granting permissions, you must assign Helpdesk resources to the corresponding Helpdesk users.
Teams Access
Selected users are allowed to view teams and team members configured for the respective
client.
User Catalog Access
Selected users can view details of any user of the respective client.
Reassign Access
Selected users can reassign the user’s tasks to the approver’s manager.
NOTE: You can configure Managers Hierarchy in Customization to help the Helpdesk users to
reassign the user’s tasks to the managers of the specified level, if necessary.
History Access
Selected users can view request history of any user of the respective client.
Organization Chart Access
Selected users can view the organization chart of the respective client.
Using Helpdesk
After Helpdesk is configured, users can find the Helpdesk information in the following places:
Your ID > Helpdesk.
On the Request History page.
(Conditional) At the footer.
To show the Helpdesk information in the footer, enable Show in Footer.
NOTE: You must ensure that the footer is enabled for the client that you have selected. To
enable it, go to Settings > Branding > Footer. For more information, click on the Dashboard.
You also can modify the Trustees for a selected widget. For more information, click on the
Dashboard.
4 Save the custom.css file and click Upload CSS in the Dashboard.
1 Click .
2 Select the client settings from the table that you want to delete.
3 Click .
Applications
This section helps you to set up Identity Manager Dashboard.
Checklist Items
1. (Conditional) If you have installed identity applications on Linux, you must create compound
indexes for all the basic attributes. To use any other attributes, you must create compound
index for those attributes. For more information about creating compound indexes, see
Creating Compound Indexes in the NetIQ Identity Manager Setup Guide for Windows.
NOTE: If you create a compound index for a multivalued attribute and this attribute has
multiple values, the identity applications return duplicate records in user catalog when you
sort using that attribute.
For example, if you created a compound index for multivalued attribute named as First
Name, and it holds multiple values, you will see duplicate records for each values when this
attribute is used for sorting.
The Linux installer automatically creates the compound indexes for all the basic attributes.
2. Add a new language that is not a default language, see “Adding a Language to the Identity
Applications” on page 119.
3. Modify the administration configuration settings for the Dashboard. You can customize the
following settings:
For more information, click on the Dashboard and see Customize the User Interface.
4. Add links to the Applications page to provide your users easy access to common
permissions and activities.
For more information about providing links for your users, see “Linking the Dashboard to
External Applications” on page 112 and click on the Dashboard.
NOTE: With Identity Manager 4.7, the Dashboard replaces Identity Manager Home and
Provisioning Dashboard. The Dashboard’s Applications page replicates Featured Items that
were part of Identity Manager Home.
In this example, the first column contains the container DNs and the second column contains the
user-defined key for a unique data set, where container DN is the criteria for identifying the data set.
By default, this mapping table is internally linked to the following rules which are defined under the
Identity Manager policies:
Resolve the disjoint set for which the role request or resource request belongs to
Resolve the disjoint set for which the user resynchronization request belongs to
When the driver starts processing the requests, it creates a worker thread with the same name that
you specified for the unique data set.
Prerequisites
Identity Manager 4.8
Designer 4.8
Identity Manager automatically links this mapping table object to the following policies:
Resolve the disjoint set for which the role request or resource request belongs to
Resolve the disjoint set for which the user resynchronization request belongs to
Limitations
The driver does not support parallelization of events for the same unique data set. Such events
are sequentially processed.
The driver does not support multiple threads for a specific unique data set. Each unique data
set has a dedicated thread.
Troubleshooting
A multi-threaded driver logs messages to the driver log. The messages are appended with Thread
IDs. To troubleshoot the driver, check the Thread IDs as a starting point for analysis. For more
information, see “Troubleshooting Multi-Threaded Role and Resource Service driver Issues” on
page 658.
NOTE: bind_port and mcast_port should be different for Permission Index Cluster Properties and
Cluster Properties.
NOTE: bind_port and mcast_port should be different for Permission Index Cluster Properties and
Cluster Properties.
This section provides information about managing the roles and resources that you intend to grant
to users in your organization.
Chapter 14, “Creating and Managing Roles,” on page 161
Chapter 15, “Creating and Managing Resources,” on page 171
Chapter 16, “Adding Workflow to Roles and Resources,” on page 179
Chapter 17, “Creating and Managing Delegations,” on page 187
Chapter 18, “Separation of Duties Constraints,” on page 189
Chapter 19, “Using Controlled Permission Reconciliation Services,” on page 193
Chapter 20, “Configuring Identity Applications Default Settings,” on page 205
Chapter 21, “Configuring Email-Based Approval,” on page 229
Chapter 22, “Configuring and Managing Objects for Entities,” on page 231
A role defines a set of permissions related to one or more target systems or applications. For
example, a user administrator role might be authorized to reset a user's password, while a system
administrator role might have the ability to assign a user to a specific server.
Identity applications allow you to create or modify roles, associate resources and roles to a role, and
assign a role to users.
Go to Administration > Roles to create and manage roles. This page displays the list of roles in your
organization. For more information, click on the Dashboard.
To create and manage roles, you must have one of the following identity applications roles:
Role Administrator
Role Manager
To modify the default role settings, see “Configuring Default Roles Settings” on page 205.
NOTE: You must have Security Administrator role to modify the system roles.
You can perform the following operations on the roles within your organization:
“Listing Roles” on page 161
“Creating a New Role” on page 162
“Editing Roles” on page 162
“Creating a Workflow For a Role” on page 167
“Managing the Role and Resource Service Driver” on page 167
Listing Roles
Roles page displays all the roles within your organization. You can search roles using role name or
description. You can also filter roles based on role level and categories. If you wish to see the
columns other than default columns, you can customize the columns.
IMPORTANT: Do not use the following special characters in the search bar to find a role: < > , ; \
" + # = / | & *
IMPORTANT
Do not use the following special characters in the ID field: < > , ; \ " + # = / | * & '
! @ $ %
Do not use the following special characters in the Name field: < > , ; \ " + # = / | * &
~
Editing Roles
You can modify all the role parameters except Level and Subcontainer. Identity Manager Dashboard
allows you to edit each role separately or multiple roles at once.
Editing individual roles: To edit an individual role, select a role from the list that you want to edit.
You can perform the following operations:
Changing the role details such as role name, description, and categories. Adding or removing
role owners.
NOTE: The role owner can be a user, a group, or a container. The role owner does not
automatically have the authorization to administer changes to a role definition. In some cases,
the owner must ask a Role Administrator to perform any administration actions on the role.
Modifying the role approval and revocation process, see “Changing Approval and Revocation
Process” on page 164.
Associating resources within your organization to the selected role. See, “Mapping Resources to
Roles” on page 164.
Assigning the selected role to the required users in your organization. See,“Assigning Roles to
Users” on page 165.
Checking the request status of the users requesting for the selected role.
Mapping other roles to the selected roles. See, “Mapping Roles to Roles” on page 166.
Editing multiple roles at once: You can edit multiple roles as a group instead of requiring you to
repeat those actions on each role individually. Select the roles you want to manage from the list of
roles. You can change Categories, Owners, and Approval Details for the roles you selected. Also, you
can Append or Overwrite values for Categories and Owners for the selected roles. Append option
allows you to add values without altering the existing entries. Overwrite option replaces the values
that are entered for the existing values.
For more information, see “Changing Approval and Revocation Process” on page 164.
Delete Roles: To delete any role from the list, select the role and click Delete.
The Role and Resource Service driver optimizes this process. However, the process may take some
time, depending on the number of users assigned to the role, because the Role and Resource driver
must ensure that it does not remove a resource from a user if they have this resource by other
means.
For example, to check the status of a Permission role, perform the following steps in iManager:
1 Delete the role in identity applications, for example, Email.
2 Log in to iManager.
3 In Objects tab, browse to Driver Set > User Application Driver > AppConfig > RoleConfig > RoleDefs
> Level30.
4 Select the role that you have deleted in Step 1.
5 Click the nrfStatus attribute.
The value of the status is set to 15. The value 15 denotes that the role is in Pending Delete state.
When a role has the status of Pending Delete, you are unable to edit, delete, or assign the role.
What happens to existing role assignments If you delete a role that has an associated resource as
well as one or more identities assigned to it, the system removes the resource assignment from each
identity that has the associated resource.
NOTE: If you delete a role that has a resource assigned to it (or remove a user from the role), the
system removes resource assignments for users in that role, even if those resources were first
assigned directly. The reason for this is that the system assumes that the last authoritative source for
a resource assignment is the controller of that resource, as illustrated by the following scenario:
1. A resource is created with an entitlement.
2. A user is assigned to the resource created above.
3. A role is created that is bound to the resource created in the first step above.
4. The same user is then assigned to the role created above.
5. The user is removed from the role.
In this situation, the user gets removed from the resource even though they had the resource
assigned directly. Initially, the resource assignment is considered the authoritative source. However,
when the user is assigned to a role that is associated with the same resource, the role becomes the
authoritative source.
NOTE: You must set up this approval process in Designer. For more information, see NetIQ
Identity Manager - Administrator’s Guide to Designing the Identity Applications.
Click the icon and map the resources to the required roles and perform the following steps:
1 Select the role from the roles list.
2 Drag and drop the resources/entitlements that you want to map from the Available Resources
and Entitlements list to Mapped Resources.
3 Specify the Mapping Description.
4 Click Apply.
Search Roles
Shows the list of roles in the organization.
Mapped Resources
Shows the list of resources mapped to the selected role.
Available Resources and Entitlements
Shows the list of available resources and entitlements in the organization.
NOTE: In Initial Request Description, describe the purpose of assigning a role to the mentioned
users in Recipients list.
In Recipients, you can mention users, group, and container from the list.
4 (Conditional) Set the Effective Date and Expiration Date for this assignment.
If you do not set effective and expiration date, the effective date will be set to the present day
and no expiry for this assignment.
5 Click Assign Role.
NOTE: When you assign a role to groups or containers, the role will be assigned to its recipients
directly, without seeking approval. The approver will not receive an email notification, although the
email approval setting is set as enable.
TIP: To see the role relationship of a Parent or Child Role, click on the role that you wish to see the
hierarchy.
You can modify the following standard driver settings (listed under User Application/Workflow
Connection on the Driver Configuration page), which get their initial values at installation time:
Option Description
User Application Driver DN The distinguished name of the User Application driver
object that is hosting the role system. Use the
eDirectory format, such as
UserApplication.driverset.org, or browse to find the
driver object. This is a required field.
User Application URL The URL used to connect to the User Application in
order to start Approval Workflows. This is a required
field.
Reenter User Application Password Re-enter the password of the account specified in the
identity applications Identity field.
In addition, you can modify the following additional settings (listed under Miscellaneous on the
Driver Configuration page) to customize the behavior of the Role and Resource Service driver:
Table 14-2 Additional Settings for Customizing the Role and Resource Service Driver
Option Description
Number of days before processing removed request Specifies the number of days the driver should wait
objects before cleaning up request objects that have finished
processing. This value determines how long you are
able to track the status of requests that have been
fulfilled.
Frequency of reevaluation of dynamic and nested Specifies the number of minutes the driver should
groups (in minutes) wait before reevaluating dynamic and nested groups.
This value determines the timeliness of updates to
dynamic and nested groups used by the identity
applications. In addition, this value can have an
impact on performance. Therefore, before specifying
a value for this option, you need to weigh the
performance cost against the benefit of having up-to-
date information in the identity applications.
Enable Parallelization of resource requests on role When set to true, the driver uses multiple threads to
assignment process the resource requests in parallel. This setting
is specifically applicable to role assignments for
groups, where resources mapped to the role can be
simultaneously processed and assigned to the users
within the group. By default, the value of is set to
false.
Allow driver to start if reading unprocessed events This setting allows you to specify whether the driver
fails should start or stop when it encounters an exception
while reading unprocessed requests. By default, the
value is set to false, which prevents the driver from
reading the unprocessed requests. If you set it to
true, the driver will restart and process the
unprocessed request again.
Maximum number of command’s allowed in the Specify the number of requests that the driver
driver storage storage can accommodate. The default value is 500
requests. It is recommended to use a value less than
the default value to avoid any memory issues.
Store resource history for days The number of days that the driver stores the
resource history information before cleaning up the
data from the storage.
A resource is any digital entity such as a user account, computer, or database that a business user
needs to be able to access. Creating a resource with an entitlement helps you manage the
entitlements in Identity Applications. For more information, see Resources in “Providing Permissions
to Users” on page 38.
Identity applications allow you to create and manage resources with or without entitlements.
Go to Administration > Resources to create and manage resources. This page displays the list of
resources in your organization. For more information, click on the Dashboard.
To create and manage resources, you must have one of the following identity applications roles:
Resource Administrator
Resource Manager
To view the default resource settings, see “Configuring Default Resource Settings” on page 206.
You can perform the following operations on the resources within your organization:
“Listing Resources” on page 171
“Creating a New Resource” on page 171
“Editing Resources” on page 173
“Creating a Workflow for a Resource” on page 176
“Enabling Drivers for Resource Mappings” on page 176
“Creating a List to Improve Resource Request Forms” on page 177
Listing Resources
Resources page lists all the resources alphabetically. You can search for resources using resource
name or description. You can also filter resources based on resource level and categories.
IMPORTANT: Do not use the following special characters in the search bar to find a resource: < > ,
; \ " + # = / | * &
IMPORTANT: You must rename the Resource Name field to a valid name if it contains any of these
< > , ; \ " + # = / | * & ~ special characters.
You can choose to tag an entitlement value during resource creation or allow the user to select
entitlement values at the time of the request.
Tag an entitlement value to a resource: Specify the necessary entitlement values for the
selected driver or entitlement. For every specified entitlement values, a separate resource is
created.
A user can request this resource which has the defined entitlement value. For example, you
created a resource by selecting a printer as an entitlement value for the Office Resources
entitlement. A user can request for Office Resources entitlement that has the defined Printer
entitlement value.
Allow users to select entitlement values at the time of request: Select Map Entitlement Values
at Resource Request time and specify Label for Value field.
For this type of resources, a user can select the required entitlement values from the list, while
requesting for this resource. For example, you created a resource for Office Resources
entitlement without defining an entitlement value, a user can select any entitlement value from
the list for the Office Resources entitlement at the time of the request.
To enable this option for the logical systems within the connected system, you must create a
separate resource for each logical systems.
NOTE: Select Allow this resource and entitlement to be assigned multiple times with different
values only if you want to allow users to request this resource multiple times with different
values.
Without Entitlement
If you choose to create a resource with this option, specify the fields marked with an asterisk (*).
You cannot change the specified resource Level and Subcontainer information later. To change this
information, you must delete this resource and recreate the resource with the required resource
level and subcontainer information.
IMPORTANT
Do not use the following special characters in the ID field: < > , ; \ " + # = / | * & '
! @ $ %
Do not use the following special characters in the Name field: < > , ; \ " + # = / | * &
~
You can set the expiration period for the resources. The permission to the resource will be revoked
from the user, once it crosses the specified expiration period.
Editing Resources
You can modify all the resource parameters except Level and Subcontainer. Identity applications
allow you to edit each resource separately or multiple resources at once.
Editing individual resources: Select a resource from the list that you want to edit and perform any of
the following operations:
Changing the resource details such as resource name, description, and categories. Adding or
removing resource owners.
Set expiration period for the selected resource. See “Setting Expiration Period for the Resource”
on page 173.
Modifying the resource approval and revocation process. See, “Changing the Approval or
Revocation Process” on page 174.
Viewing the entitlements information for the selected resource.
Assigning the selected resource to the required users in your organization. See, “Assigning
Resource to Users” on page 174.
Checking the request status of the users requesting for the selected resource.
Update the resource form for the selected resource. See, “Updating the Resource Request
Form” on page 175.
Editing multiple resources at once: You can edit multiple resources as a group instead of requiring
you to repeat those actions on each resource individually. Select the resources you want to manage
from the list of resources. You can change Categories, Owners, and Approval Details for the resources
you selected. Also, you can Append or Overwrite values for Categories and Owners for the selected
resources. Append option allows you to add values without altering the existing entries. Overwrite
option replaces the values that are entered for the existing values.
For more information, see “Changing the Approval or Revocation Process” on page 174.
Delete Resources: To delete any resource from the list, select the resource and click Delete.
What happens to existing resource assignments When you a delete a resource that already has one
or more identities assigned to it, the system removes the resource from those identities. If the
resource has been associated with a role, the system also removes all role associations that pertain
to the deleted resource.
NOTE: You must set up this approval process in Identity Manager Designer. For more
information, see NetIQ Identity Manager - Administrator’s Guide to Designing the Identity
Applications.
If you choose None, no approvers are required for assigning the resources.
You can choose to have a revoke process or not. The revocation process can match the approval
process. Also, you can define a different revocation process.
You can modify the expiration period for the selected resources. See, “Setting Expiration Period for
the Resource” on page 173.
NOTE: In Initial Request Description, describe the purpose of assigning a resource to the
mentioned users in Recipients list.
You can assign a value to the field and select At request/assign time to allow users to specify the
values at the time of request or resource assignment. If you want to assign values now, select Now.
In Data Value List, you can select one of the following data types to add a field into the request form:
Integer This allows you to gather only numerical information about the selected
resource.
For example,
For example,
If the selected resource is printer, you might need to confirm whether they
require a color printer or not. In this case, you can use this data type to
provide an option to requesters.
If you want users to select the defined values, you can provision the options
using this data type.
For example,
If you want to know the time zone of the requester, you can provision this field
by listing all the timezones for this field.
For more information about creating such lists, see “Creating a List to Improve
Resource Request Forms” on page 177.
For example,
If you want to know the reason for this request or assignment, you can use this
data type for a field to gather this information.
NOTE: When you select Now option in Assign Value, these fields appear on the request form at the
time of request or assignment by default. If you want to hide these fields, select Hide.
All of these updated driver configuration files contain a new section on the driver's Global
Configuration Values (GCV) page labeled Role and Resource Mapping.
To display the configuration options available in the new section, select show for the Show role and
resource mapping configuration GCV.
To enable resource mapping for the driver, select Yes for the Enable resource mapping GCV.
NOTE: Before Identity Applications detect the driver, it must query the entitlement system. Identity
Applications sends the query to the entitlement system every 1440 minutes by default, but you can
force the application to send the query immediately using the identity applications.
To force the query to run immediately, click Refresh in Entitlement Query Settings. See, “Configuring
Entitlement Query Settings” on page 206.
Identity Applications introduces a new simplified method for adding a workflow to role and
resource. The Identity Applications user interface includes a new option, namely Add Workflow, in
the Roles and Resources pages for role and resource request process. This new method is an
alternative to the existing method of creating workflows in Designer. It is targeted to ease the user
experience of creating workflows. For greater flexibility and ease of use, NetIQ recommends that
you use this method whenever possible.
Benefits
Allows you to quickly create a workflow in Identity Applications without switching to Designer.
Provides an illustrative, easy-to-understand interface for creating workflows.
Includes a progress bar to help you track the status and progress of the workflow creation
process.
This method leverages the same workflow concepts that are used for creating workflows in Designer.
For more information, NetIQ Identity Manager - Administrator’s Guide to Designing the Identity
Applications. For the Add Workflow REST API operations, see Chapter 42, “REST Services,” on
page 617.
Adding a Workflow
By default, the Add Workflow option is enabled. If you do not find this option in Roles and Resources
page, you must first enable it from the Settings page. For more information, see “General Settings”
on page 140.
You can add a workflow in Roles and Resource catalog based on system templates. For more
information on system templates, see “System Templates and Template Forms” on page 182. Let us
understand the workflow addition process through a two-step serial approval workflow example.
To add a workflow:
1 Click Administration > Roles or Administration > Resources option.
2 Select the required Role or Resource that you want under workflow control and click Add
Workflow.
3 A new WORKFLOW TEMPLATE SELECTION window is displayed. Select Approval Step(s) as Two
and Approval Type as Serial and click Next.
These workflow templates are obtained from the System Templates bundled in Create
Workflow Templates package for with User Application Driver in Designer.
4 A new Create Workflow Form window is displayed. Under General, specify the tabulated details
and click Next.
Identifier (CN) Specify the unique CN (common name) for the workflow.
Name Specify the display name for the workflow. This is the name that is
displayed to the user in Designer and Identity Applications (idmdash).
Active: Select this option to make the workflow available for use in the
Identity Applications after successful creation.
You can use this option when you want keep the roles of the person who
develops the workflow separate from the person who activates the
workflow. For example, a developer could be responsible for marking the
workflow as Inactive, and an administrator could be responsible for
changing the status to Active.
Permission Displays the selected role or resource for which the workflow is being
created. This field is not editable.
Permission binding Specify if you want the workflow to have either request binding activity
or request activity.
5 Under Request Info, select the required request form, specify the details, and click Next.
You can use this view to map data from the data flow into fields in a form (pre-activity mapping)
and to map data from the form back to the data flow (post-activity mapping).
For pre-activity mapping, specify the Source Expression for the item that you want to map. For
post-activity mapping, click in the Target Expression field for the item that you want to map, and
specify an expression.
For more information, see Workflow Activity Reference in the NetIQ Identity Manager -
Administrator’s Guide to Designing the Identity Applications.
6 Under Approval Info, specify the tabulated details for approval activity. Depending on the
number of approval step(s) selected for the workflow initially, provide the details for those
number of approvals.
Fill in the details for First Approval and Second Approval here and click Next.
Select Approval Form Lists all the forms displayed under Approval forms
category. Select an approval form from the list.
7 Under Finish, specify the notification details and click Create Workflow.
Field Description
The created workflow is successfully attached to the selected Role or Resource. Now when a user
request for the workflow to request a Role or Resource, the request and approval process will be as
per attached workflow.
The workflows are saved in the Identity Vault which can later be imported into Designer for
modifications.
Recommendations
NetIQ recommends you to not use the Add Workflow option in the following scenarios:
When a resource has a dynamic entitlement, that is, a resource whose entitlement value can be
set at request time.
When a resource contains Resource Form Fields.
In some organizations, you might be allowed to delegate your tasks to other team members. This
feature allows you to delegate your tasks to multiple users based on the selected Provisioning
Request Definitions (PRD).
A delegate user is a user to whom one or more specific tasks appropriate to that user’s rights can be
delegated so that the delegate can work on those specific tasks on behalf of someone else.
To view delegations, go to People > Delegation. All users in the organization can see their delegation
assignments.
To create or modify delegation, you must have one of the following roles:
Provisioning Administrator
Provisioning Manager
Team Manager
The Provisioning Administrator and Provisioning Manager have the ability to define delegate
assignments for any user in the organization.
The team manager can define delegation assignments for self or for the team members. Make sure
that Configure Delegate and Configure Availability permissions are granted to the team manager for
the requested team to create delegation:
Go to People > Teams and edit the team permissions to enable delegation feature.
Figure 17-1 Add Permissions to the Teams to Create Delegation
NOTE: If team manager wants to create a delegation for self, ensure Include the selected requesters
in the recipients list is selected.
To modify the default delegation settings, see Section 20, “Configuring Identity Applications Default
Settings,” on page 205.
To modify the default Separation of Duties settings, see Section 20, “Configuring Identity
Applications Default Settings,” on page 205.
To understand the Role and Resource assignment process, see:
“Role Assignments” on page 189
“Resource Assignments” on page 190
Role Assignments
When a user requests a role that results in a potential SoD conflict, the initiator has the option to
override the SoD constraint and provide a justification for making an exception. In some cases, a SoD
conflict can cause a workflow to start. The workflow coordinates the approvals needed to allow the
SoD exception to take effect.
Your workflow designer and system administrator are responsible for setting up the contents of the
Roles and Resources in the Administration tab for you and the others in your organization. The flow
of control for a roles-based workflow or SoD workflow, as well as the appearance of forms, can vary
depending on how the workflow designer defined the workflow's approval definition in the Designer
for Identity Manager. In addition, your job requirements and level of authority determine what you
can see and do.
NOTE: The ability to define custom roles is available only with Identity Manager 4.5 and later.
If a role assignment initiates a request for a resource, it is possible that the request will not be
granted, even though the role is provisioned. The most likely reason for this would be that the
necessary approvals were not provided.
When a user requests a resource, the request starts a workflow. The workflow coordinates the
approvals needed to fulfill the request. Some requests require approval from a single individual;
others require approval from several individuals. In some instances, a request can be fulfilled
without any approvals.
The following business rules govern the behavior of resources within the identity applications:
Resources can only be assigned to a user. The resource can be granted to users in a container or
group based on implicit role assignment. But the resource assignment will only be associated
with a user.
Resources can be assigned in any of the following ways:
Directly by a user through UI mechanisms
Through a provisioning request
Through a role request assignment
Through a Rest or SOAP interface
The same resource can be granted to a user multiple times (if this capability has been enabled
in the resource definition).
A resource definition can have no more than one entitlement bound to it.
A resource definition can have one or more same-entitlement references bound to it. This
capability provides support for entitlements where the entitlement parameters represent
provisionable accounts or permissions on the connected system.
Entitlement and decision support parameters can be specified at design time (static) or at
request time (dynamic).
Your workflow designer and system administrator are responsible for setting up the identity
applications for you and the others in your organization. The flow of control for a resource-based
workflow, as well as the appearance of forms, can vary depending on how the workflow designer
defined the workflow's approval definition in the Designer for Identity Manager. In addition, your job
requirements and level of authority determine what you can see and do.
Services
Controlled Permission Reconciliation Services (CPRS) helps you to keep the Identity Manager
Resource Catalog synchronized with the permissions across connected applications. You can use
CPRS for the following activities:
Initial Permission Onboarding: Allows you to select each entitlement or driver and migrate the
permissions of the managed users from the connected application to Resource Catalog.
Controlled Reconciliation: Select a driver or entitlement and monitor changes to the user
permissions in Resource Catalog. You can publish the permission changes to Resource Catalog
for specific or all users.
Ensure you have Resource Administrator or User Administrator access to use CPRS.
The following video describes the concepts of CPRS:
http://www.youtube.com/watch?v=l4-IyRTu2pU
IMPORTANT: CPRS currently supports Active Directory, Multi-Domain Active Directory (MDAD),
LDAP, Loopback, Delimited, and REST drivers.
This section provides valuable information for planning a CPRS implementation in your Identity
Manager environment.
“How CPRS Helps” on page 193
“Prerequisites” on page 194
“Considerations for Supported Drivers” on page 194
“Understanding the Components of CPRS” on page 195
“Managing Permission Reconciliation Settings” on page 197
“Permission Reconciliation” on page 199
“Migrating to CPRS” on page 201
Prerequisites
Before using CPRS, review the following considerations:
Identity Manager 4.7
Identity Manager drivers are updated to the latest driver package.
For more information, see Preparing Drivers to Use CPRS in the NetIQ Identity Manager -
Administrator’s Guide to Designing the Identity Applications.
Identity Manager drivers enabled with entitlements are up and running.
MDAD Driver
MDAD driver allows permission reconciliation for every logical system. You must enable your logical
system in Designer or iManager. To enable a logical system in iManager:
1. Login to iManager as an administrator.
2. Right-click the MDAD driver and navigate to Edit Properties > Global Configuration Values >
Entitlement.
3. Set Add Logical System information to Entitlement Values to Yes for the entitlement for which
you want to use CPRS.
WARNING: This setting (Yes) invalidates all the existing resources for the entitlement. This
results in loss of all existing resources for the entitlement. Therefore, you need to recreate
resources and publish the assignments. For more information, see “Managing Permissions for a
MDAD Driver” on page 202.
REST Driver
Perform the following tasks to use the existing REST driver:
1 Upgrade the Identity Manager to 4.7.1 version.
2 Upgrade the REST driver to 1.0.1.1 version.
http://www.youtube.com/watch?v=QTh8gnxIVS0
The existing resources can be mapped in CPRS settings. For more information, click on the
Dashboard.
NOTE: If settings are listed, click to customize the columns. Drag and drop the required
columns from Available Columns to Selected Columns.
1. Click to map entitlement from the connected application to the Identity Manager resource.
2. Select an Entitlement you want to manage.
For example: LDAP Driver > User Account Entitlement
NOTE: If you select MDAD driver, you must select the required Logical system to reconcile. By
default the first Logical system is selected.
3. Perform the following actions to create or edit the permission reconciliation settings between
the selected entitlement and mapped resources:
a. (Conditional) In Entitlement Value Association, select the List Resources With Dynamic Value
to list the resources that are not associated with entitlement values. De-select this option
to list resources that are associated with entitlement values.
The list of resources already configured for the selected entitlement is displayed.
b. Type the resource name you want to select from the list. This lists the resources that are
already present in the Resources page.You can select more than one resource for a
multivalued entitlement.
If no resources are listed, you should create a resource with entitlement for the required
connected application. To create a new resource, see “Creating a New Resource” on
page 171.
Permission Reconciliation
Permission Reconciliation page allows you to compute and publish the permission assignments
between Resource Catalog and connected systems.
Ensure that the drivers or entitlements are configured with CPRS settings to compute or publish.
Perform the following actions to publish permissions for the selected driver or entitlement:
1 Navigate to Administration > Permission Reconciliation.
2 In Driver or Entitlement, select a driver or an entitlement that you wish to compute or publish.
IMPORTANT: For a Fan-Out driver (for example MDAD), select a Logical system. This option is
displayed only for Fan-Out driver. By default the first Logical system is selected.
3 Click to compute the difference in assignments between the Resource Catalog and the
connected application.
Click to view the process status. You can view the computed assignments data in the CPRS
Assignments table only when the process is completed for the triggered event. Click All
Assignments in CPRS Assignment to view the list of all computed assignments. For more
information, see “CPRS Assignments Table” on page 200.
NOTE: The time taken for computation depends on the number of assignments present in the
connected application and Resource Catalog.
Process Type Specifies the type of processes that are initiated for
the entitlement such as Compute or Publish
NOTE: By default, events generated by CPRS assignments do not flow to the Subscriber channel of
the driver. This behavior is controlled by Allow Entitlement event loopback from cprs to subscriber
channel Engine Control Value. To change the default setting, change the control to True. For more
information about Engine Control Values, see Engine Control Values in the NetIQ Identity Manager
Driver Administration Guide.
Migrating to CPRS
Migration to CPRS does not change the resource settings. It only changes the mode of permission
reconciliation.This section explains how to migrate resource configurations to CPRS.
“Prerequisites” on page 201
“Managing Existing Permissions for AD and LDAP Drivers” on page 202
“Managing Permissions for a MDAD Driver” on page 202
“Post Migration Activities” on page 203
Prerequisites
Before migrating the resources, review the following considerations:
Upgrade from Identity Manager Engine 4.6.x to 4.7
For more information, see Upgrading Identity Manager Engine (Linux) or Preparing to Upgrade
Identity Manager (Windows) based on your platform
Upgrade Identity Applications from 4.6.x to 4.7
For more information, see Upgrading Identity Applications (Linux) or Upgrading Identity
Applications (Windows) based on your platform.
Upgrade the driver packages.
NOTE: The existing MDAD resources become invalid after the driver is upgraded.
For more information, see Upgrading the Driver Packages for Identity Applications (Linux) or
Upgrading the Driver Packages for Identity Applications (Windows) based on your platform.
NOTE: You can select one or more resources for a multivalued entitlement.
4 Click Save.
5 Compute and publish permissions for Group_Membership_PCRS entitlement.
NOTE: You can select one or more resource for a multivalued entitlement.
5 Click Save.
6 Compute and publish permissions for MDAD_Groups entitlement.
TIP: Use idapps.out and driverset log files to trace the CPRS actions and events.
Settings
To modify the default settings of identity applications administration settings, navigate to
Configuration.
The settings and configurations made on this page affects while performing any operations on the
components that are listed in this page.
“Configuring Roles and Resources Settings” on page 205
“Configuring Delegation and Proxy Settings” on page 207
“Configuring Permission Reconciliation Settings” on page 209
“Configuring Logging Settings” on page 209
“Configuring Caching and Cluster Settings” on page 211
“Assigning Administrators in Identity Applications” on page 217
“Configuring Workflow Engines and Cluster Settings” on page 222
“Viewing User Application Driver Status” on page 225
“Configuring the Default Provisioning Display Settings” on page 225
“Configuring the Identity Governance Settings” on page 227
NOTE: You should have both Role Administrator and Resource Administrator permissions to modify
the role and resource configurations on this page.
A Role Manager or Resource Manager can also access this page. Additionally, they should have
Configuration Role Settings and Configuration Resource Settings permissions to modify the settings.
For more information, see “Assigning Permissions to a Delegated Administrator” on page 219.
NOTE: In identity applications, you can set a role to any of these levels:
Level 10
Level 20, or
Level 30
These levels appear on the roles with their specified display names.
NOTE: The workflow events are generated only if CEF auditing is enabled in
workflow_logging.xml file.
For more information, see Chapter 8, “Setting Up Logging in the Identity Applications,” on page 71.
Fields Description
Destination host Specifies the destination hostname or IP address of the auditing server.
Destination Port Specifies the destination port number of the auditing server.
Network Protocol Specifies the protocol that should be used to establish communication with
the auditing server.
Intermediate event store Specifies the temporary directory where the events can be stored. This
directory directory serves as a backup for an auditing server. If Identity Applications is
freshly installed, the directory path will be populated by default.
You can also provide path to intermediate event store directory of your choice.
Make sure that the permission and ownership are changed to novlua for that
directory. To change the permission of the directory, run the following
commands on Linux platforms:
Flushing Caches
The caches are named according to the subsystems that use them in the identity applications.
Normally, you don’t need to flush them yourself, because the identity applications does that
automatically based on how frequently their data is used or when the source data changes.
However, if you have a specific need, you can manually flush selected caches or all caches.
1 Go to Configuration > Caching and Cluster.
2 In Flush Cache, select the type of cache from the list that you want to flush.
3 Click Flush Cache.
Settings What to do
Lock Acquisition Timeout Specify the time interval (in milliseconds) that the cache waits for a lock to be
acquired on an object.
You might want to increase this setting if the Identity Applications imposes a
lot of lock timeout exceptions in the application log.
Wake Up Interval Seconds Specify the time interval (in seconds) that the cache eviction policy waits
before invoking the following activities:
Eviction Policy Class Specify the classname for the cache eviction policy that you want to use.
The default is the LRU eviction policy that JBoss Cache provides:
org.jboss.cache.eviction.LRUPolicy
If appropriate, you can change this to another eviction policy that JBoss Cache
supports.
TIP: In Local Settings, select Enable Local for the required settings to override the global settings and specify
the values.
Settings What to do
Max Nodes Specify the maximum number of nodes allowed in the cache.
Time To Live Seconds Specify the time to idle (in seconds) before the node is swept away.
TIP: In Local Settings, select Enable Local for the required settings to override the global settings and specify
the values.
NOTE: The system clears the events in the cache according to the value specified for Max Age.
3 (Conditional) In Local Settings, select Enable Local for the required settings to override the
global settings and specify the values.
4 Click Save.
NOTE: You must restart the Tomcat on each node of the cluster for the changes to take effect.
Authorization.Admin.Levels Caches the Administrator type information of the logged in user such as a
CacheHolder domain administrator, delegated administrator, team manager, or a business
user (self-service). See, “Administrator and Manager Categories” on page 32.
DirectoryService.Container Caches containers in the directory layer. Containers are shared by many users
CacheHolder and groups, and reading them from the directory layer involves both network
communication (with the LDAP server) and object creation. By default, the
cache is limited to 50 containers, and the LRUs have a default Time To Live
(TTL) of 10 minutes. Depending on the directory topography in your
enterprise, you might need to adjust the maximum number of nodes or the
TTL if you find the performance is suffering because of queries to the LDAP
server for container objects. Making settings too high in combination with a
large number of usable containers can cause unneeded memory consumption
and net lower performance from the server.
DirectoryService.GroupCach Caches groups in the directory layer. Groups are often shared by many users,
eHolder and reading them from the directory layer involves both network
communication (with LDAP server) and object creation. By default, the cache
is limited to 500 groups, and the LRUs have a default TTL of 10 minutes.
Depending on the user/group topography in your enterprise, you might need
to adjust the maximum number of nodes or the TTL if you find the
performance is suffering because of queries to the LDAP server for groups
objects. Settings that are too high, in combination with a large number of
usable groups, can cause unneeded memory consumption, and net lower
performance from the server.
DirectoryService.Memberhi Caches the relationship between a user and a set of groups. Querying the set
pCacheHolder of groups a user belongs to can be a network and CPU intensive operation on
the LDAP server, especially if dynamic groups are enabled. For this reason,
relationships are cached with an expiration interval so that changes in the
criteria for inclusion/exclusion in a group (such as time-based dynamic groups)
are reflected. The default Max Age is five minutes. However, if you use
dynamic groups which have a requirement for finer grained time control, then
you can adjust the Max Age on this cache holder to be just below the
minimum time your finest grained time based dynamic group requires. The
lower this value is, the more times the user's groups are queried during a
session. Setting a value too high keeps the user/group relationships in memory
perhaps longer than the user's session needlessly consuming memory.
DirectoryService.TeamMana Caches the application team instances and team provisioning requests.
gerRuntime.Team
DirectoryService.UserCache Caches users in the directory layer. Reading users from the directory layer
Holder involves both network communication (with LDAP server) and object creation.
By default, the cache is limited to 1000 users, and the LRUs have a default TTL
of 10 minutes. Depending on the user topography in your enterprise, you
might need to adjust the maximum number of nodes or the TTL if you find the
performance is suffering because of queries to the LDAP server for user
objects. Making settings too high combined with a large number of different
users logging in can cause unneeded memory consumption and net lower
performance from the server.
GlobalCacheHolder The general purpose cache holder. This configuration applies to all caches that
are not customizable (that is, all cache holders not listed in this table.)
JUICE Caches the resource bundles used by the user interface controls and DN
display expression lookup results. Changing the setting of the cache holder has
a performance impact for the DN display expression lookups because they are
frequently used in the identity applications. The low value should be at least
300 seconds, but a higher value than 900 seconds is ok. A lower value should
be used if the customer is frequently changing the attributes that are used in
the DN display expression
Workflow.Provisioning Caches provisioning request instances that have not completed. The default
maximum capacity for the LRU cache is 500. The capacity can be modified by
clicking the Administration/Provisioning and choosing the Engine and Cluster
settings. The Process Cache Maximum Capacity appears on this page. This
cache reduces the memory footprint for workflow processing without
compromising performance.
Setting What to do
Permission Index Cluster Enable this option if you want to update the permission index changes to the
Enabled other nodes in the cluster for the specified Permission Index Group ID.
Permission Index Group Id Specify the Permission Index Group ID of the JGroups cluster in which you
want to participate. There’s no need to change the default Group ID that’s
provided for the identity applications cluster unless you want to use a different
cluster.
Permission Index Cluster Specify the JGroups protocol stack for the cluster specified by Permission
Properties Index Group ID. This setting is to adjust the cluster properties.
Cluster Enabled Enable this option if you want to overwrite the cache changes to the other
nodes in the cluster for the specified Group ID.
Group ID Specify the Group ID of the JGroups cluster in which you want to participate.
There’s no need to change the default Group ID that’s provided for the identity
applications cluster unless you want to use a different cluster.
The Group ID must be unique and must not match any of the known JBoss
cluster names such as DefaultPartition and Tomcat-Cluster.
TIP: To see the Group ID in logging messages, make sure that the level of the
caching log (com.sssw.fw.cachemgr) is set to Info or higher.
Cluster Properties Specify the JGroups protocol stack for the cluster specified by Group ID. This
setting is to adjust the cluster properties.
TIP: In Local Settings, select Enable Local for the required settings to override the global settings and specify
the values.
The permissions for an administrator assignment define the actions that administrators can take on
a particular scope of object instances within the domain type selected. For example, if you select the
Role domain as the domain type for an assignment, the permissions determine what actions the
administrators can take on the set of role instances selected as the scope for the assignment. These
permissions might specify, for the selected scope of roles, that administrators can perform actions
such as assigning roles to users, viewing role assignments, and deleting on role assignments.
IMPORTANT: Compliance, Configuration, and Reports domain types are discontinued from Identity
Manager 4.7.1. This change does not remove the existing assignments that have been previously
made to these domain types. However, you cannot edit those assignments.
1 Click .
2 Specify the Initial Request Description that describes the purpose of this assignment.
3 Select the Domain Type from the list.
Domain Description
Provisioning This domain defines the rights to launch and retract process requests,
manage addressee tasks, and configure delegate, proxy, and availability
settings.
Role This domain defines the rights to manage roles and SoDs, assign, revoke,
and report on roles, as well as rights to configure role settings.
Resource This domain defines the rights to manage resources, assign, revoke, and
report on resources, as well as rights to configure resource settings and bind
entitlements.
Security This domain defines the rights to manage Identity Applications security,
such as assign and revoke domain administrators and managers. This also
provides the right to configure teams.
4 Select the Assignment Type for which you want to create an assignment.
This displays the list of users, groups, container, or roles based on the selected assignment type.
5 Select the required user, group, container or a role on from the provided list to create an
assignment.
NOTE: This option cannot be edited after creating the assignment. For a delegated
administrator, you can assign permissions individually. See, “Assigning Permissions to a
Delegated Administrator” on page 219.
If this option is disabled, a delegated administrator is created for the selected domain.
9 Click Create.
Provisioning
This domain type consists of the permissions that are related to Provisioning Request Definitions
(PRD) and User Application Driver.
Provisioning Request This category allows you to assign any of the following permissions for the
Definition Permissions selected Provisioning Request Definition to a delegated administrator:
NOTE: The Initiate PRD permission has no effect on the behavior of the
installed PRDs for resources and roles within the Identity Applications
since these PRDs cannot be initiated directly from the Identity
Applications. However, this permission does control whether these PRDs
can be initiated from a SOAP call.
Retract PRD: Allows the user to retract the selected provisioning
requests when they are in progress.
View Running PRD: Allows the user to view the selected provisioning
requests when they are in progress.
Configure Delegate: Allows the user to configure delegate assignments
for the selected provisioning requests.
Manage Addressee Task: Allows the user to manage tasks associated
with the selected provisioning requests that have been addressed to
other users.
When this permission is enabled, Domain and Delegated Administrators
can manage tasks for all users, including addresses and recipients.
Managers are able to manage tasks for addressees, but not for recipients.
Configure Availability: Allows the user to configure availability for tasks
associated with the selected provisioning requests.
User Application Driver This category allows you to assign the Configure Proxy permission to the
Permissions delegated administrator. This permission allows the user to configure proxy
assignments for the provisioning requests.
Role
This domain type consists the permissions related to roles, Separation of Duties, and configuration
of role settings.
Role Permissions This category allows you to assign any of the following permissions for the
selected Role Level or Roles to a delegated administrator:
Separation of Duties This category allows you to assign any of the following permissions for the
Permissions selected SoDs to the delegated administrator:
Configuration Permissions This category allows you to assign the Configure Role Settings permission to
the delegated administrator. This permission allows the user to configure the
settings of the roles subsystem.
Resource
This domain type consists the permissions related to resources, entitlements, and configuration of
resource settings
Resource Permissions This category allows you to assign any of the following permissions for the
delegated administrator:
If you want to provide access only for the specific container or resources. You
can select Resource Sub Container or Select Resources and assign the
required permissions for the administrator.
Entitlements Permissions This category allows you to assign the Bind Entitlement permissions to the
delegated administrator. This permission allows the user to bind entitlements
with a resource for the selected drivers.
Configuration Permissions This category allows you to assign the Configure Resource Settings permission
to the delegated administrator. This permission allows the user to configure
the settings of the resource subsystem.
Security
When you select this domain type all permissions are provided. Therefore, the assignments that
belong to this domain type will have All permissions enabled at the time of assignment creation.
Enable Email Notification Enables or disables email notifications for the entire workflow engine.
Defaults to enabled.
Web Service Activity Timeout Specifies the default Web Service activity timeout in minutes. The
(minute) default is 50 minutes.
User Activity Timeout (hour, 0 for Specifies the default user activity timeout. The default is 0 days, which
no timeout) indicates no timeout.
Completed Process Timeout (day) Specifies the number of days that a completed process state is kept in
the workflow database system. The default is 120 days.
Completed Process Cleanup Specifies how often the engine checks for and removes completed
Interval (hour) processes that have been in the workflow database system for longer
than the completed process timeout. The default is 12 hours.
Pending Process Interval (second) User activities that are executed on an engine which the process is not
bound to are put into a pending state. This interval specifies how often
to check for pending activities in order to continue their execution. The
default is 30 seconds.
Retry Queue Interval (minute) Activities that fail because of suspected database connectivity issues
are put on a retry queue. This interval specifies how often the engine
attempts to retry these activities. The default is 15 minutes.
Thread Keep Alive Time (second) If the pool is larger than the minimum size, excess threads that have
been idle for more than the keep-alive time will be destroyed. The
default is 5 minutes.
Maximum Engine Shutdown The engine attempts to shutdown gracefully. When shutting down it
Timeout (minute) stops queuing new activities for execution and attempts to complete
any activities already queued. This timeout specifies the maximum
time that the engine waits for all queued activities and threads
executing activities to complete. If this time is exceeded, the engine
halts processing of queued activities and attempts to stop all threads
executing activities. The default is 1 minute.
Maximum Thread Pool Size The maximum number of threads that the engine uses to execute
activities. The default is 20.
Minimum Thread Pool Size The minimum number of threads that the engine uses to execute
activities. When a thread is requested and fewer than the minimum are
in the pool, a new thread will be created even if there are idle threads
in the pool. The default is 10.
Initial Thread Pool Size Number of pre-started threads in the pool when it is created. The
default is 5.
Process Cache Load Factor The load factor specifies how full the cache is allowed to get before
increasing its capacity. If the number of entries in the cache exceeds
the product of the load factor multiplied by the current capacity, then
the capacity is increased. The default is 0.75.
Process Cache Initial Capacity The process cache is backed by a hash map. The capacity is the number
of buckets in the hash map. The initial capacity is the number of
buckets at the time the cache is created. The default is 700.
Process Cache Maximum Capacity Before adding a process to the cache, if the number of processes in the
cache equals or exceeds the Process Cache Maximum Capacity, the
cache attempts to remove the oldest inactive process from the cache.
The maximum capacity is a soft limit, so the number of processes in the
cache might exceed the Process Cache Maximum Capacity if there are
no inactive processes (only active processes) in the cache.
Heartbeat Interval Specifies the interval at which the workflow engine’s heartbeat is
updated.
Heartbeat Factor Specifies the factor that is multiplied with the heartbeat interval to
arrive at the heartbeat timeout.
Setting Description
Default number of results Specifies the default number of rows to display on the Identity Manager
displayed per page Dashboard pages.
Identity Applications fetch the results for the specified number and stores in
the cache and displays to a user on accessing the Identity Applications pages.
Each time the user requests to see the next page, another set of rows is
returned from the cache.
Options for number of Allows you to specify additional values that the user can select to override the
results displayed per page default number of rows displayed on the Identity Applications pages. The list
of values you type must be separated by commas and ranging from 1-10000.
NOTE: The number specified in Default number of results displayed per page
is always included in the list of values for the user to select.
Field Description
Select Column to set default By default, the task results in the Tasks page are sorted by Assigned To.
sort
You can select a different column from the list to sort the task results. Also, you
can sort the results by ascending or descending order.
Allow user to customize By default, this option is enabled. Disabling this option restricts the user from
columns customizing columns in the Tasks page.
Available columns: Displays the columns which are disabled for user
customization.
User default columns: Displays the columns that are already showing on
the Tasks page.
Available columns for User customization: Displays the columns that
can be customized by users.
Allow user to customize By default, this option is enabled. This option allows you to change the
task detail open preferences of opening the approval form in the Tasks page. Go to Tasks page
and click to change the preferences.
Disabling this option will restrict the system users from changing the
preferences of opening the approval form in the Tasks page. However, you can
change this preferences in the Settings > Customization page.
Field Description
Select Column to set default By default, the request statuses in the Request History page are sorted by
sort Request Date.
You can select a different column from the list to sort the results. Also, you can
sort the results by ascending or descending order.
Allow user to customize By default, this option is enabled. Disabling this option restricts the user from
columns customizing columns in the Request History page.
Available columns: Displays the columns which are disabled for user
customization.
User default columns: Displays the columns that are already showing on
the Request History page.
Available columns for User customization: Displays the columns that
can be customized by users.
Field Description
Show IG Approvals in tasks page Enable this option to display all the Identity
Governance Approvals in the Tasks page.
Show IG Catalog in request page Enable this option to display all the Identity
Governance Catalog in the Access > Request page.
As an administrator, you can configure the identity applications to send an email that notifies users
that they have a pending task to approve or reject a permission request.
Administration > Email-based approval
NOTE: Before enabling email-based approvals, ensure that you have configured the provisioning
request definitions (PRDs) to support notifications and (optional) digital signatures. Also, configure
the outgoing mail server. For more information, see the Email Based Approvalin NetIQ Identity
Manager - Administrator’s Guide to Designing the Identity Applications.
You can configure the following settings to allow users to approve requests on their emails:
Incoming Email Settings
Specifies the server type, SSL settings, port type, and notification templates.
Outgoing Email Settings
Specifies the notification template host, protocol, and SMTP server. This tab allows specifies
digital signature settings.
Entities
Any Identity Vault object that you want to search, display, or edit in the Identity Applications must be
defined in the directory abstraction layer. For more information, see About Entities and Attributes in
the NetIQ Identity Manager - Administrator’s Guide to Designing the Identity Applications.
Identity Applications allow you to create and modify objects for a specific entity. The configuration
of the entities displayed in the Entities tab is specific to the Client selected.The Edit page displays the
list of objects for the selected entity.
After an entity is created, it is listed under Access Settings in the Settings page. It provides control on
which users, roles, groups, and containers can view and list the entities. You must have the
appropriate permission to create, view, or manage objects. By default, the trustee is the Provisioning
Administrator. Ensure that the users specified in Trustees are having sufficient Identity Vault rights to
perform tasks within the Identity Applications. However, trustees can access the page but operations
on the page will fail if they do not have the proper Identity Vault rights.
You can perform the following operations on the Entities page:
Listing the objects
Creating an object
Editing the object
Deleting an object
Exporting to CSV
IMPORTANT: Do not use these[ < > , ; \ " + # = / | & ' ! @ $ % ] special characters or a whitespace in
the search bar to find an object.
Creating an Object
Perform the following actions to create an object:
1 Click the icon and specify the fields marked with an asterisk (*).
IMPORTANT: Do not use these [ < > , ; \ " + # = / | & * ' ! @ $ % ] special characters or a whitespace
in the ID field.
Editing an Object
Perform the following actions to edit an object:
1 Select the object from the list and click Edit.
The fields that can be edited are based on the criteria specified on the Settings page. For more
information, see Editable Attributes in “Entity Settings” on page 141.
2 Edit the required fields.
3 Click Save.
Deleting an Object
To delete any object from the list, select the entity and click the icon. You can delete one or more
objects at a time.
Exporting to CSV
Perform the following actions to save one or more objects in a csv file:
1 Select the required object.
3 Click Save.
Provisioning Workflows
These sections describe how to configure and manage provisioning requests and workflows:
Chapter 23, “Configuring the User Application Driver to Start Workflows,” on page 235
Chapter 24, “Managing Provisioning Request Definitions,” on page 241
Chapter 25, “Managing Provisioning Workflows,” on page 249
Start Workflows
This section describes the User Application driver and how to configure it to automatically trigger a
workflow based on an event in the Identity Vault.
The User Application driver components are installed when you install Identity Manager. Before you
can run the identity applications, you must add the User Application driver to a new or existing
driver set, and activate the driver.
Depending on your work environment, very little configuration of the User Application driver might
be required, or you might want to implement a complex set of business rules in the driver policies.
The User Application driver provides the same flexible mechanisms for data synchronization as other
Identity Manager drivers.
About Policies
You can use filters and policies with the User Application driver in the same way that you can with
other Identity Manager drivers. When an event occurs in the Identity Vault, Identity Manager
creates an XML document that describes the event. The XML document is passed along the channel
to the connected system (in this case, the connected system is the identity applications). Filters and
policies associated with a driver allow you to define how to respond to the event, and in the process
transform that XML document to the format that is expected by the connected system. Identity
Manager provides several categories of policies (for example, Event Transformation, Command
Transformation, Schema Mapping, Output Transformation) that you can apply, in a prescribed order,
to transform the XML document.
This section provides an example of starting a workflow based on events in the Identity Vault.
Although any of the policies can be used to trigger a workflow, the example presented in this section
demonstrates the easiest and most useful method.
When you create a User Application driver, an Event Transformation Policy is created for use by the
driver. The Event Transformation Policy is responsible for creating the XML document that is
processed by the remaining Subscriber channel policies.
NOTE: Do not change the Event Transformation policy that was created when the User Application
driver was created. The DN of this policy begins with Manage.Modify.Subscriber. Changing this
policy might cause the workflow process to fail.
An empty Schema Mapping Policy is also created. You can use this policy as a starting point for
triggering a workflow, based on events in the Identity Vault.
14 Use the Select Operator list to select the operator to use to test the specified attribute.
For example, to start a workflow when a telephone number changes, select changing.
We recommend using a named password, because typing a password in clear text is a security
risk.
18 In the Enter recipient DN field, specify the DN of the recipient of the workflow in LDAP format.
The expression for the recipient DN must evaluate to a DN that conforms to RFC 2253 format (in
other words, cn=user,ou=organizational unit,o=organization). For example, you can click the
Argument Builder button in the Enter recipient DN field to create the following expression to
pass the recipient’s DN to the workflow:
Parse DN("qualified-slash","ldap",XPath("@qualified-src-dn"))
NOTE: The Provisioning Request Configuration plug-in to iManager does not allow you to create or
edit provisioning request definitions. To create or edit a provisioning request definition, you need to
use the Designer for Identity Manager.
You can find the Provisioning Request Configuration plug-in in the Identity Manager category in
iManager. The plug-in includes the Provisioning Requests task in the Provisioning Configuration role.
The Provisioning Requests task consists of the panels described in Table 24-1.
Panel Description
Provisioning Driver Selection Gives you the opportunity to select an Identity Manager
User Application driver. The driver contains a set of
predeployed provisioning request definitions, so you need to
pick a driver before you can begin configuring your
provisioning requests.
You can also specify whether you want to support sequential or parallel processing, and whether
you want to approve or deny the request in the event that the workflow times out during the course
of processing.
Identity Manager ships with the templates listed in Table 24-2.
Template Description
One Step Approval (Timeout Approves) Requires a single approval for the provisioning
request to be fulfilled. If an activity times out, the
activity approves the request and the work item
forwards to the next activity.
Two Step Sequential Approval (Timeout Requires two approvals for the provisioning request
Approves) to be fulfilled. If an activity times out, the activity
approves the request and the work item forwards to
the next activity.
Three Step Sequential Approval (Timeout Requires three approvals for the provisioning request
Approves) to be fulfilled. If an activity times out, the activity
approves the request and the work item forwards to
the next activity.
Four Step Sequential Approval (Timeout Requires four approvals for the provisioning request
Approves) to be fulfilled. If an activity times out, the activity
approves the request and the work item forwards to
the next activity.
Five Step Sequential Approval (Timeout Requires five approvals for the provisioning request
Approves) to be fulfilled. If an activity times out, the activity
approves the request and the work item forwards to
the next activity.
One Step Approval (Timeout Denies) Requires a single approval for the provisioning
request to be fulfilled. If an activity times out, the
workflow denies the request.
Two Step Sequential Approval (Timeout Denies) Requires two approvals for the provisioning request
to be fulfilled. If an activity times out, the workflow
denies the request.
Three Step Sequential Approval (Timeout Requires three approvals for the provisioning request
Denies) to be fulfilled. If an activity times out, the workflow
denies the request.
Four Step Sequential Approval (Timeout Denies) Requires four approvals for the provisioning request
to be fulfilled. If an activity times out, the workflow
denies the request.
Five Step Sequential Approval (Timeout Denies) Requires five approvals for the provisioning request
to be fulfilled. If an activity times out, the workflow
denies the request.
Two Step Parallel Approval (Timeout Approves) Requires two approvals for the provisioning request
to be fulfilled. If an activity times out, the activity
approves the request and the work item forwards to
the next activity.
Three Step Parallel Approval (Timeout Requires three approvals for the provisioning request
Approves) to be fulfilled. If an activity times out, the activity
approves the request and the work item forwards to
the next activity.
Four Step Parallel Approval (Timeout Approves) Requires four approvals for the provisioning request
to be fulfilled. If an activity times out, the activity
approves the request and the work item forwards to
the next activity.
Five Step Parallel Approval (Timeout Approves) Requires five approvals for the provisioning request
to be fulfilled. If an activity times out, the activity
approves the request and the work item forwards to
the next activity.
Two Step Parallel Approval (Timeout Denies) Requires two approvals for the provisioning request
to be fulfilled. If an activity times out, the workflow
denies the request.
Three Step Parallel Approval (Timeout Denies) Requires three approvals for the provisioning request
to be fulfilled. If an activity times out, the workflow
denies the request.
Four Step Parallel Approval (Timeout Denies) Requires four approvals for the provisioning request
to be fulfilled. If an activity times out, the workflow
denies the request.
Five Step Parallel Approval (Timeout Denies) Requires five approvals for the provisioning request
to be fulfilled. If an activity times out, the workflow
denies the request.
Workflows and provisioned resources. When you create a new provisioning request definition, you
bind it to a provisioned resource. You can change the provisioned resource associated with the
request definition, but not the workflow or its topology.
Categories for provisioning requests. Each provisioning request template is also bound to a
category. Categories provide a convenient way to organize provisioning requests for the end user.
The default category for all provisioning request templates is Entitlements. The category key, which is
the value of the srvprvCategoryKey attribute, is entitlements (lowercase).
You can create your own categories by using the directory abstraction layer editor. When you create
a new category, make sure the category key (the value of srvprvCategoryKey) is lowercase. This is
necessary to ensure that categories work properly in the identity applications.
For details on creating provisioning categories, see the Identity Manager User Application: Design
Guide.
NOTE: If the request definitions were configured to use localized text, the names and
descriptions for these definitions show text that is suitable for the current locale.
Changing the driver. When you have selected a driver, the driver selection remains in effect for the
duration of your iManager session, unless you select a new driver. To select a new driver, click the
Actions command, then choose Select User Application Driver from the Actions menu.
Choice Description
Turn off filtering Disables any existing filtering for the list.
Filter for status equals Filters based on the status. You can filter the list
based on any of the following status codes:
Active
Inactive
Template
Retired
Filter for category equals Filters based on category. Select any of the defined
categories.
Filter for description contains Allows you to search for text in the request
description. Type the string you want to search for.
Status Description
This section provides instructions for managing provisioning workflows at runtime. It also provides
instructions for configuring email notification for provisioning workflows.
Panel Description
When you first start the Workflows task, the Workflows panel
requires that you select a User Application driver. The driver points to
a workflow server. You need to select a driver before you can log in to
the server and begin workflow administration.
When you have selected a driver, you can specify search criteria for
selecting the workflows to manage.
Workflow Detail Provides a read-only user interface for viewing the details about a
specific workflow.
Managing Workflows
This section includes procedures for managing provisioning workflows using the Workflow
Administration plug-in.
4 If you accessed the target workflow server previously, you can select the server from the
Previously accessed servers drop-down list.
iManager fills in the remaining fields on the panel.
5 If you have not yet accessed a workflow server, specify the driver name in the User Application
Driver field, then click OK.
iManager fills in the Workflow server URI and User fields.
6 Type the password for the user in the Password field.
7 Click Login.
3 Select an operator:
Operator Comment
Choice Description
Show all workflows Disables all previous filters and displays all
workflows in process.
Hide/show stopped workflows Hides or shows workflows that have been stopped
by user action.
Hide/show running workflows Hides or shows workflows that are still running.
Depending on your display, you might need to scroll to the right to see the Request ID column.
To sort the data based on the process request ID, click the heading for the Request ID column.
NOTE: If a workflow instance uses a serial processing design pattern, the display shows a single
activity as current because only one user can act on the work item at any point in time. However, if
the workflow handles parallel processing and branching, there might be multiple current activities
for a workflow instance.
3 Select the user or group to which you want to reassign the work item.
3 In the Percentage field, type the percentage of workflow processes that you would like to
reassign from one workflow engine to another.
4 Use the Source engine list to select the workflow engine from which you want to reassign
processes.
5 Use the Target engine field to select the workflow engine to which you want to reassign
processes.
6 Click OK.
NOTE: This task is a shortcut to the Email Server Options task under the Passwords role.
The subject lines are listed first above. The template names (as they appear in iManager and
Designer) are given in parentheses.
You can edit the templates to change the content and format of email messages. You can also create
new templates. If you create new templates, you need to follow these naming conventions.
The language-independent version of the Provisioning Notification template can have any name
you like. The default template for notification email messages is called:
Provisioning Notification
The language-independent version of the Provisioning Reminder template can have any name
you like. The default template for reminder email messages is called:
Provisioning Reminder
Each delegation template must have a name that begins with the word:
delegate
The language-independent name can be followed by one or more characters that describe the
purpose or content of the template.
Each proxy template must have a name that begins with the word:
NOTE: This task is a shortcut to the Edit Email Templates task under the Passwords role.
NOTE: When you use a localized email template in a provisioning request definition, the preferred
locale setting of the recipient of the notification is ignored. For example, the Provisioning
Notification of a request using a localized email notification template of Spanish will only send a
Spanish email, regardless of the preferred locale setting for the user.
A new provisioning request has been submitted that requires your approval.
Tag Description
$resources$
Tag Description
A new provisioning request has been submitted that requires your approval.
Tag Description
$submitterFirstName$ The first name of the user who assigned the delegate.
$PROTOCOL$ The protocol for URLs included in the email message.
$PORT$ The port for the identity applications. For information
about setting the value for this parameter, see
“Modifying Default Values for the Template” on
page 271.
$resources$ The resources (provisioning requests) for which the
delegate is available.
$SECURE_PROTOCOL$ The secure protocol for URLs included in the email
message.
Status: $requestStatus$
Tag Description
Tag Description
$TASKLIST_CONTEXT$ The page that displays the list of all requests pending
for the addressee.
$PROTOCOL$ The protocol for URLs included in the email message.
$PORT$ The port for the identity applications. For information
about setting the value for this parameter, see
“Modifying Default Values for the Template” on
page 271.
$SECURE_PROTOCOL$ The secure protocol for URLs included in the email
message.
$initiatorFullName$ The full name of the initiator.
$userFirstName$ $userLastName$
The assigned proxy is authorized to handle all work for these users,
groups, and containers:
Users: $fromUsers$
Groups: $fromGroups$
Containers: $fromContainers$
$expirationTime$
Tag Description
$submitterFirstName$ The first name of the user who assigned the proxy.
$PROTOCOL$ The protocol for URLs included in the email message.
$PORT$ The port for the identity applications. For information
about setting the value for this parameter, see
“Modifying Default Values for the Template” on
page 271.
$resources$ The resources (provisioning requests) for which the
proxy is available.
$SECURE_PROTOCOL$ The secure protocol for URLs included in the email
message.
$fromUsers$ The users for which the assigned proxy is authorized
to handle resource requests.
$expirationTime$ The time at which the proxy assignment will expire.
$fromContainers$ The containers for which the assigned proxy is
authorized to handle resource requests.
$fromGroups$ The groups for which the assigned proxy is authorized
to handle resource requests.
$submitterLastName$ The last name of the user who assigned the proxy.
$SECURE_PORT$ The secure port for the identity applications. For
information about setting the value for this
parameter, see “Modifying Default Values for the
Template” on page 271.
$userFirstName$ The first name of the user who has been assigned as a
proxy.
$userLastName$ The last name of the user who has been assigned as a
proxy.
$HOST$ The host for the Tomcat application server that is
running the identity applications. For information
about setting the value for this parameter, see
“Modifying Default Values for the Template” on
page 271.
$ASSIGNMENT_LIST_CONTEXT$ The context or path of the URL to the identity
applications.
A new role request has been submitted that requires your approval.
You can review a list of all role requests pending your approval at
$SECURE_PROTOCOL$://$HOST$:$SECURE_PORT$/$TASKLIST_CONTEXT$.
Tag Description
Status: $requestStatus$
Tag Description
Compliance Task
This template notifies an attester when an attestation process has assigned a task to the attester.
Hi,
A new compliance activity has been submitted that requires your attention.
Tag Description
A new resource request has been submitted that requires your approval.
You can review a list of all resource requests pending your approval at
$SECURE_PROTOCOL$://$HOST$:$SECURE_PORT$/$TASKLIST_CONTEXT$.
Tag Description
Status: $requestStatus$
Tag Description
./configupdate.sh
On Windows, run configupdate.bat.
2 Make changes as necessary to any of the following fields:
Field Description
Email Notify Host Used to replace the $HOST$token in email templates used in
approval flows. If left blank, computed by the server.
Email Notify Port Used to replace the $PORT$token in email templates used in
approval flows.
Email Notify Secure Port Used to replace the $SECURE_PORT$token in email templates
used in approval flows.
NOTE: Email templates only send localized content if the preferred locale is set for the user (to
whom the mail is sent).
NOTE: To retrieve a named password, you must use the GCV script method
getValueForNamedPassword on a GCV of the password-ref type, which points to the named
password. You cannot use the get script method.
These sections describe the Web Service endpoints provided for the identity applications.
Chapter 26, “Provisioning Web Service,” on page 277
Chapter 27, “Metrics Web Service,” on page 349
Chapter 28, “Notification Web Service,” on page 369
Chapter 29, “Directory Abstraction Layer (VDX) Web Service,” on page 379
Chapter 30, “Role Web Service,” on page 405
Chapter 31, “Resource Web Service,” on page 505
Chapter 32, “Forgot Password Web Service,” on page 541
This section describes the Provisioning Web Service, which allows SOAP clients to access
Provisioning functionality.
These are the methods that can be invoked by users without Provisioning Administrator credentials
if the WorkflowService/SOAP-End-Points-Accessible-By-ProvisioningAdminOnly property is set to
false:
getAllProvisioningRequests(String)
getDataItems(String workId)
getDefinitionByID(String definitionID, String recipient)
getProvisioningCategories()
getProvisioningRequests(String recipient, String category, String operation)
getWork(String workId)
getWorkEntries(T_WorkEntryQuery query, int maxRecords)
start(String processId, String recipient, DataItemArray items)
startAsProxy(String processId, String recipient, DataItemArray items, String proxyUser)
startAsProxyWithDigitalSignature(String processId, String recipient, DataItemArray items, String
digitalSignature, SignaturePropertyArray digitalSignaturePropertyArray, String proxyUser)
startWithCorrelationId(String processId, String recipient, DataItemArray items, String
digitalSignature, SignaturePropertyArray digitalSignaturePropertyArray, String proxyUser, String
correlationId)
startWithDigitalSignature(String processId, String recipient, DataItemArray items, String
digitalSignature, SignaturePropertyArray digitalSignaturePropertyArray)
All other methods for this service always require Provisioning Administrator credentials independent
of whether the WorkflowService/SOAP-End-Points-Accessible-By-ProvisioningAdminOnly property is
set to false.
Category Description
The methods provided by the provisioning Web service are described in detail in Section 26,
“Provisioning Web Service,” on page 277.
You can also access the SOAP endpoint by going to the Administration within the identity
applications. To do this, you need to select the Application Configuration tab, then select Web
Services from the left-navigation menu. After selecting Web Services, pick the Web Service endpoint
you want from the list.
WARNING: The test page is disabled by default. Since some of the methods allow data to be
updated, the test page presents a potential security vulnerability and should not be allowed in a
production environment. For details on enabling the test page, see the instructions provided for the
Role Service in “Enabling the Test Page” on page 407.
NOTE: The Graphviz program must be installed on the computer where the application server and
the identity applications is running. For more information about Graphviz, see Graphviz (http://
www.graphviz.org).
A page is displayed that allows you to enter the parameters for the getGraph method.
The method takes one argument, which is the distinguished name of a provisioning request. Enter
the DN, and the underlying workflow is displayed as a JPG file..
Figure 26-3 Output of getGraph
The Java programming model for Web services is very similar to RMI. The first step is to lookup the
stub using JNDI:
InitialContext ctx = new InitialContext();
ProvisioningService service = (ProvisioningService)
ctx.lookup("xmlrpc:soap:com.novell.soa.af.impl.soap.ProvisioningService");
Provisioning prov = service.getProvisioningPort();
The first line of code creates the initial context for JNDI lookups. The second line looks up the service
object, which is a kind of factory that can be used to retrieve the stub for the provisioning Web
service. The last line gets the provisioning stub from the service.
Before invoking an operation on the provisioning stub, it is necessary to set some properties,
including the credentials used for authentication on the service, as well as the endpoint URL.
Stub stub = (Stub) prov;
// set username and password
stub._setProperty(Stub.USERNAME_PROPERTY, USERNAME);
stub._setProperty(Stub.PASSWORD_PROPERTY, PASSWORD);
// set the endpoint URL
stub._setProperty(Stub.ENDPOINT_ADDRESS_PROPERTY, url);
These and other stub properties are described in more detail in “Frequently Used Stub Constants”
on page 283. Now that we have a fully configured stub, we can invoke the getAllProcesses operation
and dump information about each of the processes returned on the console:
ENDPOINT_ADDRESS_PROPERTY java.lang.String The URL of the Web service. The URL protocol
scheme can be HTTP or HTTPS depending on
the requirements of the server. The path
portion should be:
/IDMProv/provisioning/service
Prerequisites
To get started, you need to download Mono and install it on your system (see the Mono Project
Website (https://www.mono-project.com/)). The version of Mono available at the time this
document was written did not support complex schema types in which an element has the nillable
attribute set to true. Because this construct is used in the provisioning WSDL, you must manually
edit the Provisioning.WSDL file and remove the three places where nillable="true" is used.
Processes
This section provides reference information for each Processes method.
getProcessesByQuery
Used to get information about processes.
Method Signature
com.novell.soa.af.impl.soap.ProcessArray
getProcessesByQuery(com.novell.soa.af.impl.soap.T_ProcessInfoQuery query,
int maxRecords)
// Query information about processes for a user that are running and
// have not been approved yet.
String logic = "AND";
T_ProcessInfoOrder order = T_ProcessInfoOrder.APPROVAL_STATUS;
int CHOICE_SIZE = 4;
Integer approvalStatusInteger = new
Integer(ProcessConstants.PROCESSING);
Integer processStatusInteger = new
Integer(ProcessConstants.RUNNING);
//
// Setup the query with the above params
T_ProcessInfoQueryChoice [] choice = new
T_ProcessInfoQueryChoice[CHOICE_SIZE];
choice[0] = new T_ProcessInfoQueryChoice();
choice[0].setApprovalStatus(approvalStatusInteger);
choice[1] = new T_ProcessInfoQueryChoice();
choice[1].setProcessStatus(processStatusInteger);
choice[2] = new T_ProcessInfoQueryChoice();
choice[2].setRecipient(recipient);
choice[3] = new T_ProcessInfoQueryChoice();
choice[3].setRequestId(requestId);
getProcessesByStatus
Used to get information about processes with a specified status (for example, running processes).
Method Signature
public com.novell.soa.af.impl.soap.ProcessArray
getProcessesByStatus(com.novell.soa.af.impl.soap.T_ProcessStatus status)
Example
T_ProcessStatus processStatus = T_ProcessStatus.Running;
//
// Get processes by status
ProcessArray processArray =
stub.getProcessesByStatus(processStatus);
Process [] process = processArray.getProcess();
getProcesses
Used to get information about processes, specified by processID.
Parameters
Parameter Description
EQ - equals
LT - less than
LE - less than or equal to
GT - greater than
GE - greater than or equal to
Example
int processMatchCount = 0;
T_Operator operator = T_Operator.GT;
long currentTimeInMillis = System.currentTimeMillis();
String [] requestIds = requestIdArray.getString();
//
// Initialize and start a provisioning request
HashMap provMap = new HashMap();
provMap.put(Helper.RECIPIENT, recipient);
provMap.put(I"Provisioning_Request_To_Start_Key", "Enable Active
Directory Account (Mgr Approve-No Timeout)");
//
// Start request
// Calls method startProvisioningRequest on the provUtils
// utility object which refers to a utility class that does not
// ship with the Identity Manager User Application.
String requestId = provUtils.startProvisioningRequest(provMap, null);
sleep(5);
Method Signature
com.novell.soa.af.impl.soap.ProcessArray getAllProcesses()
Example
ProcessArray array = stub.getAllProcesses();
Process [] processes = array.getProcess();
if(_process != null)
{
sb = new StringBuffer();
sb.append("\nProcess List:");
for(int index = 0; index < _process.length; index++)
{
String processId = _process[index].getProcessId();
String approvalStatus = _process[index].getApprovalStatus();
Calendar completionTime = _process[index].getCompletionTime();
Calendar creationTime = _process[index].getCreationTime();
String engineId = _process[index].getEngineId();
String proxy = _process[index].getProxy();
String initiator = _process[index].getInitiator();
String processName = _process[index].getProcessName();
String processStatus = _process[index].getProcessStatus();
String p_recipient = _process[index].getRecipient();
String p_requestId = _process[index].getRequestId();
int valueOfapprovalStatus =
_process[index].getValueOfApprovalStatus();
int valueOfprocessStatus =
_process[index].getValueOfProcessStatus();
String version = _process[index].getVersion();
}
getProcessesArray
Used to limit the number of processes returned. If the limit you specify is less than the system limit,
the number you specify is returned. If you exceed the system limit, the Workflow Engine returns the
system limit. If the limit you specify is less than or equal to 0, the Workflow Engine returns all
processes.
Method Signature
com.novell.soa.af.impl.soap.ProcessArray getProcessesArray(int
maxRecords);
IProvisioningConstants.PROVISIONING_REQUEST_TO_START,
requestNameToStart});
//
// Start request(s)
StringArray requestIdArray =
provUtils.startMultipleProvisioningRequests(map, null,
NUMBER_OF_REQUESTS_TO_START);
LoggerUtils.sleep(3);
LoggerUtils.sendToLogAndConsole("Started " +
NUMBER_OF_REQUESTS_TO_START + " provisioning requests");
//
// New method to limit the number of processes returned
//
// Test Results : maxProcesses <= 0 returns all processes
// maxProcesses up to system limit returns
maxProcess count
// maxProcesses > system limit returns system
limit
int maxProcesses = 10;
ProcessArray processArray =
stub.getProcessesArray(maxProcesses);
Process [] processes = processArray.getProcess();
if(processes != null)
{
LoggerUtils.sendToLogAndConsole("Process count returned: "
+ processes.length);
getProcessesById
Used to get information about a specific process, specified by the Process Id.
Method Signature
com.novell.soa.af.impl.soap.ProcessArray getProcessesById(java.lang.String
id)
Example
Process [] allProcesses = stub.getAllProcesses().getProcess();
if(allProcesses != null)
{
String processId = allProcesses[0].getProcessId;
ProcessArray array = stub.getProcessesById(processId);
Process [] processes = array.getProcess();
}
terminate
Used to terminate a running provisioning request.
Method Signature
void terminate(java.lang.String requestId,
com.novell.soa.af.impl.soap.T_TerminationType state, java.lang.String
comment)
Parametere Description
RETRACT
ERROR
Example
//
// Initialize and start a provisioning request
HashMap provMap = new HashMap();
provMap.put(Helper.RECIPIENT, recipient);
provMap.put(I"Provisioning_Request_To_Start_Key", "Enable Active
Directory Account (Mgr Approve-No Timeout)");
//
// Start request
// Calls method startProvisioningRequest on the provUtils
// utility object which refers to a utility class that does not
// ship with the Identity Manager User Application.
String requestId = provUtils.startProvisioningRequest(provMap, null);
sleep(5);
//
// Now retract the request
T_TerminationType terminationType = T_TerminationType.RETRACT;
stub.terminate(requestId, terminationType, terminationType.getValue() +
" the request");
getProcess
Used to get information about a running or completed provisioning request, specified by Request ID.
Method Signature
com.novell.soa.af.impl.soap.Process getProcess(java.lang.String requestId)
Example
//
// Initialize and start a provisioning request
HashMap provMap = new HashMap();
provMap.put(Helper.RECIPIENT, recipient);
provMap.put(I"Provisioning_Request_To_Start_Key", "Enable Active
Directory Account (Mgr Approve-No Timeout)");
//
// Start request
getProcessesByCreationTime
Used to get information about processes created between the current time and the time at which
the workflow process was created.
Method Signature
com.novell.soa.af.impl.soap.ProcessArray getProcessesByCreationTime(long
time, com.novell.soa.af.impl.soap.T_Operator op)
Parameters
Parameter Description
EQ - equals
LT - less than
LE - less than or equal to
GT - greater than
GE - greater than or equal to
getProcessesByApprovalStatus
Used to get information about processes with a specified approval status (Approved, Denied, or
Retracted).
Method Signature
com.novell.soa.af.impl.soap.ProcessArray
getProcessesByApprovalStatus(com.novell.soa.af.impl.soap.T_ApprovalStatus
status)
Example
T_ApprovalStatus approvalStatus = T_ApprovalStatus.Approved;
//
// Get all the processes based upon approval status above
ProcessArray processArray =
stub.getProcessesByApprovalStatus(approvalStatus);
Process [] processes = processArray.getProcess();
getProcessesByRecipient
Used to get information about processes that have a specific recipient Id.
Method Signature
com.novell.soa.af.impl.soap.ProcessArray
getProcessesByRecipient(java.lang.String recipient)
Example
String recipient = "cn=ablake,ou=users,ou=idmsample-komodo,o=netiq";
//
// Get processes by recipient
ProcessArray processArray = stub.getProcessesByRecipient(recipient);
Process [] process = processArray.getProcess();
getProcessesByInitiator
Used to get information about processes that have a specific initiator Id.
Example
String initiator = "cn=admin,ou=idmsample-komodo,o=netiq";
//
// Get processes by initiator
ProcessArray processArray = stub.getProcessesByInitiator(initiator);
Process [] process = processArray.getProcess();
setResult
Used to set the entitlement result (approval status) of a previously completed provisioning request.
Method Signature
void setResult(java.lang.String requestId,
com.novell.soa.af.impl.soap.T_EntitlementState state,
com.novell.soa.af.impl.soap.T_EntitlementStatus status, java.lang.String
message)
Parameters
Parameter Description
Unknown
Granted
Revoked
Unknown
Success
Warning
Error
Fatal
Submitted
//
// Get the process id for this running process
Process process = stub.getProcess(requestId);
String processId = null;
if (process != null)
processId = process.getProcessId();
//
// Reset the state of the provisioning request
T_EntitlementState newEntitlementState =
T_EntitlementState.Revoked;
T_EntitlementStatus newEntitlementStatus = T_EntitlementStatus.Success;
String comment = "Revoked the provisioning request";
stub.setResult(processId, newEntitlementState, newEntitlementStatus,
comment);
getProcessesByCreationInterval
Used to get information about processes started between two specified times.
Method Signature
com.novell.soa.af.impl.soap.ProcessArray
getProcessesByCreationInterval(long start, long end)
Parameters
Parameter Description
Provisioning
This section provides reference information for each Provisioning method.
multiStart
Used to start a workflow request for each specified recipient.
Method Signature
com.novell.soa.af.impl.soap.StringArray multiStart(java.lang.String
processId, com.novell.soa.af.impl.soap.StringArray recipients,
com.novell.soa.af.impl.soap.DataItemArray items)
Parameters
Parameter Description
//
// If there are some then,
if(requestArray != null)
{
String Id = " ";
StringArray requestIdStringArray = null;
String [] listOfRecipients = {recipient, addressee};
//
// Select a provisioning resource
String requestNameToStart = "Enable Active Directory Account (Mgr
Approve-No Timeout)";
//
// Loop thru and find the request that we want to start
ProvisioningRequest [] requests =
requestArray.getProvisioningrequest();
for(int index = 0; index < requests.length; index++)
{
//
// Is this the name of the request to start?
if(requests[index].getName().compareTo(requestNameToStart) ==
0)
{
//
// Get the current associated data items. Replicate a new
// dataitem array excluding the null values.
Id = requests[index].getId();
DataItem [] dataItem =
requests[index].getItems().getDataitem();
if(dataItem != null)
// Call method replicateDataItemArray on the
// provUtils utility object, which refers to a
// utility class that does not ship with the
// Identity Manager User Application.
{
DataItemArray newDataItemArray =
provUtils.replicateDataItemArray(dataItem);
//
// Create a string array initializing with multiple
recipients
StringArray listOfRecipientsStringArray = new
StringArray(listOfRecipients);
//
// Start the request for multiple recipients
logStep("Calling stub.multiStart(" + Id +
",listOfRecipientsStringArray,newDataItemArray)");
requestIdStringArray = stub.multiStart(Id,
listOfRecipientsStringArray, newDataItemArray);
}
}
}
Method Signature
java.lang.String start(java.lang.String processId, java.lang.String
recipient, com.novell.soa.af.impl.soap.DataItemArray items)
Parameters
Parameter Description
Example
//
// Initialize and start a provisioning request
HashMap provMap = new HashMap();
provMap.put(Helper.RECIPIENT, recipient);
provMap.put(I"Provisioning_Request_To_Start_Key", "Enable Active
Directory Account (Mgr Approve-No Timeout)");
//
// Start request
// Calls method startProvisioningRequest on the provUtils
// utility object which refers to a utility class that does not
// ship with the Identity Manager User Application.
String requestId = provUtils.startProvisioningRequest(provMap,
null);
sleep(5);
The example above calls the startProvisioningRequest method. This method is not part of the
identity applications. We show it here to finish illustrating the example:
/**
*Method to start a provisioning request using the supplied
*Map and dataitem object. Handling of digital certificate
*resources is also handled.
* @param _map
* @param _in_dataItem
* @return String
* @throws TestProgrammException
*/
public String startProvisioningRequest(Map _map, DataItem []
_in_dataItem) throws TestProgramException
{
String requestId = null;
try
{
String recipient =(String)_map.get(Helper.RECIPIENT);
getAllProvisioningRequests
Used to return an array of available provisioning requests.
Method Signature
com.novell.soa.af.impl.soap.ProvisioningRequestArray
getAllProvisioningRequests(java.lang.String recipient)
Example
//
ProvisioningRequestArray provReqArray =
stub.getAllProvisioningRequests(recipient);
ProvisioningRequest [] provRequest =
provReqArray.getProvisioningrequest();
if(provRequest != null)
{
String description = provRequest[0].getDescription();
String category = provRequest[0].getCategory();
String digitialSignatureType =
provRequest[0].getDigitalSignatureType();
String requestId = provRequest[0].getId();
DataItemArray itemArray = provRequest[0].getItems();
String legalDisclaimer = provRequest[0].getLegalDisclaimer();
String name = provRequest[0].getName();
String operation = provRequest[0].getOperation();
}
getProvisioningRequests
Used to return an array of provisioning requests for a specified category and operation.
Parameters
Parameter Description
Example
String operation = IProvisioningRequest.GRANT;
try
{
//
// Get the stub
Provisioning stub =
ServiceUtils.getInstance().getProvisioningStub();
logStep("Calling stub.getProvisioningCategories()");
StringArray categoriesStringArray =
stub.getProvisioningCategories();
String [] categories = categoriesStringArray.getString();
//
// Loop thru and get the provisioning requests for each category
for(int index = 0; index < categories.length; index++)
{
//
// Get the provisioning request based upon recipient
logStep("Calling stub.getProvisioningRequests(" + recipient +
"," + categories[index] + "," + operation + ")");
ProvisioningRequestArray provRequestArray =
stub.getProvisioningRequests(recipient, categories[index], operation);
ProvisioningRequest [] provRequests =
provRequestArray.getProvisioningrequest();
}
getProvisioningCategories
Used to get the list of available provisioning categories.
Method Signature
com.novell.soa.af.impl.soap.StringArray getProvisioningCategories()
startAsProxy
Used to start a workflow as a proxy.
Method Signature
java.lang.String startAsProxy(java.lang.String processId, java.lang.String
recipient, com.novell.soa.af.impl.soap.DataItemArray items,
java.lang.String proxyUser)
Parameters
Parameter Description
Example
ProvisioningRequestArray requestArray =
stub.getAllProvisioningRequests(recipient);
//
// If there are some then,
if(requestArray != null)
{
String Id = " ";
String requestId = " ";
String requestNameToStart = "Enable Active Directory Account (Mgr
Approve-No Timeout)";
//
// Loop thru and find the request that we want to start
ProvisioningRequest [] requests =
requestArray.getProvisioningrequest();
for(int index = 0; index < requests.length; index++)
{
//
// Is this the name of the request to start?
if(requests[index].getName().compareTo(requestNameToStart) ==
0)
{
//
// Get the current associated data items. Replicate a new
// dataitem array excluding the null values.
getProvisioningStatuses
Used to get the status of provisioning requests.
Method Signature
com.novell.soa.af.impl.soap.ProvisioningStatusArray
getProvisioningStatuses(com.novell.soa.af.impl.soap.T_ProvisioningStatusQu
ery query, int maxRecords)
Parameter Description
Recipient - a DN
RequestID
ActivityID
Status (an integer)
State (an integer)
ProvisioningTime (YYYY/MM/DD)
ResultTime (YYYY/MM/DD)
logic - AND or OR
order - the order in which to sort the results.
Possible values for order are:
ACTIVITY_ID
RECIPIENT
PROVISIONING_TIME
RESULT_TIME
STATE
STATUS
REQUEST_ID
MESSAGE
Example
//
// Initialize and start a provisioning request
HashMap provMap = new HashMap();
provMap.put(Helper.RECIPIENT, recipient);
provMap.put(I"Provisioning_Request_To_Start_Key", "Enable Active
Directory Account (Mgr Approve-No Timeout)");
//
// Start request
// Calls method startProvisioningRequest on the provUtils
// utility object which refers to a utility class that does not
// ship with the Identity Manager User Application.
String requestId = provUtils.startProvisioningRequest(provMap, null);
sleep(5);
//
//
T_ProvisioningStatusQueryChoice [] choice = new
ProvisioningStatusArray provStatusArray =
stub.getProvisioningStatuses(query, maxRecords);
startWithDigitalSignature
Used to start a workflow and specify that a digital signature is required.
Method Signature
java.lang.String startWithDigitalSignature(java.lang.String processId,
java.lang.String recipient, com.novell.soa.af.impl.soap.DataItemArray
items, java.lang.String digitalSignature,
com.novell.soa.af.impl.soap.SignaturePropertyArray
digitalSignaturePropertyArray)
Parameters
Parameter Description
ProvisioningRequestArray requestArray =
stub.getAllProvisioningRequests(recipient);
//
// If there are some then,
if(requestArray != null)
{
String Id = " ";
String requestId = " ";
String requestNameToStart = "Enable Active Directory Account (Mgr
Approve-No Timeout)";
//
// Loop thru and find the request that we want to start
ProvisioningRequest [] requests =
requestArray.getProvisioningrequest();
for(int index = 0; index < requests.length; index++)
{
//
// Is this the name of the request to start?
if(requests[index].getName().compareTo(requestNameToStart) ==
0)
{
//
// Get the current associated data items. Replicate a new
// dataitem array excluding the null values.
Id = requests[index].getId();
DataItem [] dataItem =
requests[index].getItems().getDataitem();
if(dataItem != null)
{
// Call method replicateDataItemArray on the
// provUtils utility object, which refers to a
// utility class that does not ship with the
startAsProxyWithDigitalSignature
Used to start a workflow using a proxy for the initiator, and specify that a digital signature is
required.
Method Signature
java.lang.String startAsProxyWithDigitalSignature(java.lang.String
processId, java.lang.String recipient,
com.novell.soa.af.impl.soap.DataItemArray items, java.lang.String
digitalSignature, com.novell.soa.af.impl.soap.SignaturePropertyArray
digitalSignaturePropertyArray, java.lang.String proxyUser)
Parameters
Parameter Description
ProvisioningRequestArray requestArray =
stub.getAllProvisioningRequests(recipient);
//
// If there are some then,
if(requestArray != null)
{
String Id = " ";
String requestId = " ";
String requestNameToStart = "Enable Active Directory Account (Mgr
Approve-No Timeout)";
//
// Loop thru and find the request that we want to start
ProvisioningRequest [] requests =
requestArray.getProvisioningrequest();
for(int index = 0; index < requests.length; index++)
{
//
// Is this the name of the request to start?
if(requests[index].getName().compareTo(requestNameToStart) ==
0)
{
//
// Get the current associated data items. Replicate a new
// dataitem array excluding the null values.
Id = requests[index].getId();
DataItem [] dataItem =
requests[index].getItems().getDataitem();
if(dataItem != null)
{
// Call method replicateDataItemArray on the
// provUtils utility object, which refers to a
// utility class that does not ship with the
// Identity Manager User Application.
DataItemArray newDataItemArray =
provUtils.replicateDataItemArray(dataItem);
//
// Start a digitally signed provisioning resource as
proxy for the recipient
requestId =
stub.startAsProxyWithDigitalSignature(request.getId(), recipient,
newDataItemArray, digitalSignature, null, proxyUser);
}
}
}
}
Method Signature
java.lang.String startWithCorrelationId(java.lang.String processId,
java.lang.String recipient, com.novell.soa.af.impl.soap.DataItemArray
items, java.lang.String signature,
com.novell.soa.af.impl.soap.SignaturePropertyArray props, java.lang.String
proxyUser, java.lang.String correlationId)
throws com.novell.soa.af.impl.soap.AdminException,
java.rmi.RemoteException;
Parameters
Parameter Description
Work Entries
This section provides reference information for each Work Entries method.
forward
Used to forward a task to the next activity in the workflow with the appropriate action (approve,
deny, refuse).
Method Signature
void forward(java.lang.String wid, com.novell.soa.af.impl.soap.T_Action
action, com.novell.soa.af.impl.soap.DataItemArray items, java.lang.String
comment)
Parameter Description
Example
//
// Initialize and start a provisioning request
HashMap provMap = new HashMap();
provMap.put(Helper.RECIPIENT, recipient);
provMap.put(I"Provisioning_Request_To_Start_Key", "Enable Active
Directory Account (Mgr Approve-No Timeout)");
//
// Start request
// Calls method startProvisioningRequest on the provUtils
// utility object which refers to a utility class that does not
// ship with the Identity Manager User Application.
String requestId = provUtils.startProvisioningRequest(provMap, null);
sleep(5);
//
// Get the process id for this running process
Process process = stub.getProcess(requestId);
String processId = null;
if(process != null)
processId = process.getProcessId();
if(workEntry != null
{
for(int wIndex = 0; wIndex < workEntry.length; wIndex++)
{
String workId = workEntry[wIndex].getId();
//
//
LoggerUtils.sendToLogAndConsole("Forwarding : " +
workEntry[wIndex].getActivityName() + " work id: " + workId);
//
// Get the dataitem for this item of work
DataItemArray dataItemArray = stub.getWork(workId);
DataItem [] dataItem = dataItemArray.getDataitem();
DataItemArray newDataItemArray = null;
if(dataItem != null)
// Call method replicateDataItemArray on the
// provUtils utility object, which refers to a
// utility class that does not ship with the
// Identity Manager User Application.
newDataItemArray =
provUtils.replicateDataItemArray(dataItem);
else
throw new TestProgramException("DataItem is null.");
//
// Claim request for recipient
String comment = _action.toString() + " this request: " +
requestId + " for " + recipient;
stub.forward(workId, _action, newDataItemArray, comment);
}
reassignWorkTask
Used to reassign a task from one user to another.
Method Signature
void reassignWorkTask(java.lang.String wid, java.lang.String addressee,
java.lang.String comment)
Parameters
Parameter Description
if(workEntry == null)
throw new TestProgramException("Work list is empty.");
//
// Reassign the work entry from recipient to the addressee
//
// Should only be one item
String reassignComment = null;
String workId = workEntry[0].getId();
if(workId != null)
{
//
// Reassign work entry(s) to addressee
reassignComment = "Reassigning work entry " + workId + "
from " + recipient + " to " + addressee;
stub.reassign(workId, addressee, reassignComment);
LoggerUtils.sendToLogAndConsole("Reassign work entry " +
workId + " from " + recipient + " to " + addressee);
}
}
Method Signature
com.novell.soa.af.impl.soap.DataItemArray getWork(java.lang.String workId)
Example
//
// Initialize and start a provisioning request
HashMap provMap = new HashMap();
provMap.put(Helper.RECIPIENT, recipient);
provMap.put(I"Provisioning_Request_To_Start_Key", "Enable Active
Directory Account (Mgr Approve-No Timeout)");
//
// Start request
// Calls method startProvisioningRequest on the provUtils
// utility object which refers to a utility class that does not
// ship with the Identity Manager User Application.
String requestId = provUtils.startProvisioningRequest(provMap,
null);
sleep(5);
//
// Get the process id for this running process
Process process = stub.getProcess(requestId);
if(process != null)
{
String processId = process.getProcessId();
String initiator = process.getInitiator();
//
// Setup for the query
HashMap map = new HashMap();
map.put(Helper.REQUESTID, requestId);
map.put(Helper.RECIPIENT, recipient);
map.put(Helper.PROCESSID, processId);
map.put(Helper.INITIATOR, initiator);
WorkEntry [] workEntry =
workEntryUtils.getWorkEntriesUsingQuery(map, T_WorkEntryOrder.REQUEST_ID,
T_Logic.AND);
//
// Do assertion here
Assert.assertNotNull("WorkEntry is null for recipient : " +
recipient + " with request id : " + requestId, workEntry);
DataItemArray dataItemArray = stub.getWork(workEntry[0].getId()
);
DataItem [] dataItem = dataItemArray.getDataitem();
if(dataItem != null)
LoggerUtils.sendToLogAndConsole(dataItem[0].getName());
}
Method Signature
void forwardWithDigitalSignature(java.lang.String wid,
com.novell.soa.af.impl.soap.T_Action action,
com.novell.soa.af.impl.soap.DataItemArray items, java.lang.String comment,
java.lang.String digitalSignature,
com.novell.soa.af.impl.soap.SignaturePropertyArray
digitalSignaturePropertyArray)
Parameters
Parameter Description
Example
//
// Initialize and start a provisioning request
HashMap provMap = new HashMap();
provMap.put(Helper.RECIPIENT, recipient);
provMap.put(I"Provisioning_Request_To_Start_Key", "Enable Active
Directory Account (Mgr Approve-No Timeout)");
//
// Start request
// Calls method startProvisioningRequest on the provUtils
// utility object which refers to a utility class that does not
// ship with the Identity Manager User Application.
String requestId = provUtils.startProvisioningRequest(provMap, null);
sleep(5);
//
// Get the process id for this running process
Process process = stub.getProcess(requestId);
String processId = null;
if(process != null)
processId = process.getProcessId();
if(workEntry != null
{
for(int wIndex = 0; wIndex < workEntry.length; wIndex++)
{
String workId = workEntry[wIndex].getId();
//
//
LoggerUtils.sendToLogAndConsole("Forwarding : " +
workEntry[wIndex].getActivityName() + " work id: " + workId);
//
// Get the dataitem for this item of work
DataItemArray dataItemArray = stub.getWork(workId);
DataItem [] dataItem = dataItemArray.getDataitem();
DataItemArray newDataItemArray = null;
if(dataItem != null)
// Call method replicateDataItemArray on the
// provUtils utility object, which refers to a
// utility class that does not ship with the
forwardAsProxy
Used to forward a provisioning request. For example, this can be used by an administrator to force a
user-facing activity to be approved, denied or refused.
Method Signature
void forwardAsProxy(java.lang.String wid,
com.novell.soa.af.impl.soap.T_Action action,
com.novell.soa.af.impl.soap.DataItemArray items, java.lang.String comment,
java.lang.String proxyUser)
Parameters
Parameter Description
if(workEntry != null
{
for(int wIndex = 0; wIndex < workEntry.length; wIndex++)
{
String workId = workEntry[wIndex].getId();
//
//
unclaim
Used to unclaim a provisioning request. This method only works if the request was claimed in the
identity applications. You cannot unclaim a request once it has been forwarded using the SOAP
interface, because the forward API method (see “forward” on page 313) claims and forwards in
one operation.
Method Signature
void unclaim(java.lang.String wid, java.lang.String comment)
Parameters
Parameter Description
forwardAsProxyWithDigitalSignature
Used to forward a provisioning request with a digital signature and digital signature properties. For
example, this can be used by an administrator to force a user-facing activity to be approved, denied
or refused.
Method Signature
void forwardAsProxyWithDigitalSignature(java.lang.String wid,
com.novell.soa.af.impl.soap.T_Action action,
com.novell.soa.af.impl.soap.DataItemArray items, java.lang.String comment,
java.lang.String digitalSignature,
com.novell.soa.af.impl.soap.SignaturePropertyArray
digitalSignaturePropertyArray, java.lang.String proxyUser)
Parameter Description
Example
//
// Initialize and start a provisioning request
HashMap provMap = new HashMap();
provMap.put(Helper.RECIPIENT, recipient);
provMap.put(I"Provisioning_Request_To_Start_Key", "Enable Active
Directory Account (Mgr Approve-No Timeout)");
//
// Start request
// Calls method startProvisioningRequest on the provUtils
// utility object which refers to a utility class that does not
// ship with the Identity Manager User Application.
String requestId = provUtils.startProvisioningRequest(provMap, null);
sleep(5);
//
// Get the process id for this running process
Process process = stub.getProcess(requestId);
String processId = null;
if(process != null)
processId = process.getProcessId();
if(workEntry != null
{
for(int wIndex = 0; wIndex < workEntry.length; wIndex++)
{
String workId = workEntry[wIndex].getId();
//
//
LoggerUtils.sendToLogAndConsole("Forwarding : " +
workEntry[wIndex].getActivityName() + " work id: " + workId);
//
// Get the dataitem for this item of work
DataItemArray dataItemArray = stub.getWork(workId);
DataItem [] dataItem = dataItemArray.getDataitem();
DataItemArray newDataItemArray = null;
if(dataItem != null)
// Call method replicateDataItemArray on the
// provUtils utility object, which refers to a
// utility class that does not ship with the
// Identity Manager User Application.
newDataItemArray =
provUtils.replicateDataItemArray(dataItem);
else
throw new TestProgramException("DataItem is null.");
//
// Claim request for recipient
String comment = _action.toString() + " this request: " +
requestId + " for " + recipient;
String digitalSignature =
DigitalSignatureUtils.getDigitalSignatureFromFile(IDigitalSignatureConstan
ts.MMACKENZIE_DIGITAL_SIGNATURE_FILENAME);
String proxyUser =
ServiceUtils.getInstance().getLoginData().getUsername(LoginData.PROXY_TYPE
);
stub.forwardAsProxyWithDigitalSignature(workId, _action,
newDataItemArray, comment, digitalSignature, null, proxyUser);
}
reassign
Used to reassign a task from one user to another.
Parameters
Parameter Description
Example
//
// Initialize and start a provisioning request
HashMap provMap = new HashMap();
provMap.put(Helper.RECIPIENT, recipient);
provMap.put(I"Provisioning_Request_To_Start_Key", "Enable Active
Directory Account (Mgr Approve-No Timeout)");
//
// Start request
// Calls method startProvisioningRequest on the provUtils
// utility object which refers to a utility class that does not
// ship with the Identity Manager User Application.
String requestId = provUtils.startProvisioningRequest(provMap,
null);
sleep(5);
//
// Get the process id for this running process
Process process = stub.getProcess(requestId);
if(process != null)
{
String processId = process.getProcessId();
String initiator = process.getInitiator();
//
// Setup for the query
HashMap map = new HashMap();
map.put(Helper.REQUESTID, requestId);
map.put(Helper.RECIPIENT, recipient);
map.put(Helper.PROCESSID, processId);
map.put(Helper.INITIATOR, initiator);
WorkEntry [] workEntry =
workEntryUtils.getWorkEntriesUsingQuery(map, T_WorkEntryOrder.REQUEST_ID,
T_Logic.AND);
if(workEntry == null)
throw new TestProgramException("Work list is empty.");
//
// Reassign the work entry from recipient to the addressee
//
getWorkEntries
Used to query the work entries (activities) and returns a list of WorkEntry objects that satisfy the
query.
Method Signature
com.novell.soa.af.impl.soap.WorkEntryArray
getWorkEntries(com.novell.soa.af.impl.soap.T_WorkEntryQuery query, int
maxRecords)
Parameter Description
ACTIVITY_ID
RECIPIENT
PROVISIONING_TIME
RESULT_TIME
STATE
STATUS
REQUEST_ID
MESSAGE
getQuorumForWorkTask
Used to get information about the quorum for a workflow activity. A quorum must have actually
been specified for the workflow activity by the workflow designer for this method to work.
Method Signature
com.novell.soa.af.impl.soap.Quorum getQuorumForWorkTask((java.lang.String
workId)
Example
//
//
// Action and Approval Types
final int SELECTED_ACTION = 0; final int CLAIMED_SELECTED_ACTION = 0;
T_Action [] action = {T_Action.APPROVE, T_Action.REFUSE,
T_Action.DENY};
T_ApprovalStatus [] claimedAction = {T_ApprovalStatus.Approved,
T_ApprovalStatus.Retracted, T_ApprovalStatus.Denied};
//
// Get the process id for this running process
Process process = stub.getProcess(requestId);
String processId = null;
resetPriorityForWorkTask
Used to reset the priority for a task. You should only use this method on provisioning requests that
have a single approval branch.
Method Signature
void resetPriorityForWorkTask(java.lang.String workId, int priority,
java.lang.String comment)
Parameters
Parameter Description
Comments
This section provides reference information for each Comments method.
getCommentsByType
Used to get workflow comments that are of a specific type (for example, user, system).
Method Signature
com.novell.soa.af.impl.soap.CommentArray
getCommentsByType(java.lang.String requestId,
com.novell.soa.af.impl.soap.T_CommentType type)
Parameter Description
Example
//
// Initialize and start a provisioning request
HashMap provMap = new HashMap();
provMap.put(Helper.RECIPIENT, recipient);
provMap.put(I"Provisioning_Request_To_Start_Key", "Enable
Active Directory Account (Mgr Approve-No Timeout)");
//
// Start request
// Calls method startProvisioningRequest on the provUtils
// utility object which refers to a utility class that does not
// ship with the Identity Manager User Application.
String requestId = provUtils.startProvisioningRequest(provMap,
null);
sleep(5);
//
// Get the comments by type : either User or System
T_CommentType [] commentTypes = {T_CommentType.User,
T_CommentType.System};
Method Signature
com.novell.soa.af.impl.soap.CommentArray
getCommentsByActivity(java.lang.String requestId, java.lang.String aid)
Parameters
Parameter Description
Example
//
// Initialize and start a provisioning request
HashMap provMap = new HashMap();
provMap.put(Helper.RECIPIENT, recipient);
provMap.put(I"Provisioning_Request_To_Start_Key", "Enable
Active Directory Account (Mgr Approve-No Timeout)");
//
// Start request
// Calls method startProvisioningRequest on the provUtils
// utility object which refers to a utility class that does not
// ship with the Identity Manager User Application.
String requestId = provUtils.startProvisioningRequest(provMap,
null);
sleep(5);
//
// Get the process id for this running process
Process process = stub.getProcess(requestId);
if(process != null)
{
String processId = process.getProcessId();
String initiator = process.getInitiator();
//
// Setup for the query
HashMap map = new HashMap();
map.put(Helper.REQUESTID, requestId);
map.put(Helper.RECIPIENT, recipient);
map.put(Helper.PROCESSID, processId);
map.put(Helper.INITIATOR, initiator);
WorkEntry [] workEntry =
workEntryUtils.getWorkEntriesUsingQuery(map,
getCommentsByUser
Used to get the comments made by a specific user.
Method Signature
com.novell.soa.af.impl.soap.CommentArray
getCommentsByUser(java.lang.String requestId, java.lang.String user)
Parameters
Parameter Description
getCommentsByCreationTime
Used to get comments made at a specific time.
Method Signature
com.novell.soa.af.impl.soap.CommentArray
getCommentsByCreationTime(java.lang.String requestId, long time,
com.novell.soa.af.impl.soap.T_Operator op)
Parameters
Parameter Description
EQ - equals
LT - less than
LE - less than or equal to
GT - greater than
GE - greater than or equal to
addComment
Used to add a comment to a workflow activity.
Method Signature
void addComment(java.lang.String workId, java.lang.String comment)
Parameters
Parameter Description
getComments
Used to get comments from a workflow.
Method Signature
com.novell.soa.af.impl.soap.CommentArray getComments(java.lang.String
workId, int maxRecords)
Parameters
Parameter Description
Configuration
This section provides reference information for each Configuration method.
setCompletedProcessTimeout
Used to set the timeout for completed processes. Processes that were completed more than timeout
days ago are removed from the system. The default value is 120 days. The valid range is 0 days to 365
days.
Method Signature
void setCompletedProcessTimeout(int time)
Example
accessConfigurationSettings(SET_COMPLETED_PROCESS_TIMEOUT, new
Integer(212) );
setEngineConfiguration
Used to set workflow engine configuration parameters.
Method Signature
void setEngineConfiguration(com.novell.soa.af.impl.soap.Configuration
config)
Parameters
Parameter Description
Example
accessConfigurationSettings(SET_ENGINE_CONFIGURATION, new Integer(313) );
getCompletedProcessTimeout
Used to get the timeout for completed processes.
Method Signature
int getCompletedProcessTimeout()
Example
accessConfigurationSettings(GET_COMPLETED_PROCESS_TIMEOUT, new
Integer(121) );
setEmailNotifications
Used to globally enable or disable email notifications.
Method Signature
void setEmailNotifications(boolean enable)
Parameter Description
Example
accessConfigurationSettings(SET_EMAIL_NOTIFICATIONS, new Boolean(false) );
clearNIMCaches
Clear the NetIQ Integration Manager (previously named exteNd Composer) caches.
Method Signature
void clearNIMCaches()
Example
accessConfigurationSettings(CLEAR_NIM_CACHES, new Object() );
setWebServiceActivityTimeout
Used to set the timeout for Web service activities. The default value is 50 minutes. The valid range is
1 minute to 7 days.
Method Signature
void setWebServiceActivityTimeout(int time)
Parameters
Parameter Description
Example
accessConfigurationSettings(SET_WEBSERVICE_ACTIVITY_TIMEOUT, new
Integer(767) );
getUserActivityTimeout
Used to get the timeout for user-facing activities.
Method Signature
int getUserActivityTimeout()
getEmailNotifications
Used to determine if global email notifications are enabled or disabled.
Method Signature
boolean getEmailNotifications()
Example
accessConfigurationSettings(GET_EMAIL_NOTIFICATIONS, new Boolean(true) );
setUserActivityTimeout
Used to set the timeout for user-facing activities. The default value is no timeout (a value of zero).
The valid range is 1 hour to 365 days.
Method Signature
void setUserActivityTimeout(int time)
Parameters
Parameter Description
Example
accessConfigurationSettings(SET_USER_ACTIVITY_TIMEOUT, new Integer(1767)
);
getEngineConfiguration
Used to get the workflow engine configuration parameters.
Method Signature
com.novell.soa.af.impl.soap.Configuration getEngineConfiguration()
Example
accessConfigurationSettings(GET_ENGINE_CONFIGURATION, new Integer(141) );
Method Signature
int getWebServiceActivityTimeout()
Example
accessConfigurationSettings(GET_WEBSERVICE_ACTIVITY_TIMEOUT, new
Integer(808) );
Miscellaneous
This section provides reference information for each Miscellaneous method.
getGraph
Used to get a JPG image of the workflow. The Graphviz program must be installed on the computer
where the application server and the identity applications is running. For more information about
Graphviz, see Graphviz (http://www.graphviz.org).
Method Signature
byte[] getGraph(java.lang.String processId)
Parameters
Parameters Description
Example
//
// Initialize and start a provisioning request
HashMap provMap = new HashMap();
provMap.put(Helper.RECIPIENT, recipient);
provMap.put(I"Provisioning_Request_To_Start_Key", "Enable Active
Directory Account (Mgr Approve-No Timeout)");
//
// Start request
// Calls method startProvisioningRequest on the provUtils
// utility object which refers to a utility class that does not
// ship with the Identity Manager User Application.
String requestId = provUtils.startProvisioningRequest(provMap,
null);
sleep(5);
//
//
getFlowDefinition
Used to get the XML for a provisioning request.
Method Signature
java.lang.String getFlowDefinition(java.lang.String processId)
Parameters
Parameters Description
Example
//
// Initialize and start a provisioning request
HashMap provMap = new HashMap();
provMap.put(Helper.RECIPIENT, recipient);
provMap.put(I"Provisioning_Request_To_Start_Key", "Enable Active
Directory Account (Mgr Approve-No Timeout)");
//
// Start request
// Calls method startProvisioningRequest on the provUtils
// utility object which refers to a utility class that does not
// ship with the Identity Manager User Application.
String requestId = provUtils.startProvisioningRequest(provMap, null);
sleep(5);
//
//
getFormDefinition
Used to get the XML for a form for a provisioning request.
Method Signature
java.lang.String getFormDefinition(java.lang.String processId)
Parameters
Parameters Description
Example
//
// Initialize and start a provisioning request
HashMap provMap = new HashMap();
provMap.put(Helper.RECIPIENT, recipient);
provMap.put(I"Provisioning_Request_To_Start_Key", "Enable Active
Directory Account (Mgr Approve-No Timeout)");
//
// Start request
// Calls method startProvisioningRequest on the provUtils
// utility object which refers to a utility class that does not
// ship with the Identity Manager User Application.
String requestId = provUtils.startProvisioningRequest(provMap, null);
sleep(5);
//
//
getVersion
Used to get the version of the workflow system.
Method Signature
com.novell.soa.af.impl.soap.T_Version getVersion()
Example
StringBuffer result = new StringBuffer();
Cluster
This section provides reference information for each Cluster method.
getEngineState
Used to get the IEngineState for a workflow engine, specified by engine Id.
Method Signature
com.novell.soa.af.impl.soap.EngineState getEngineState(java.lang.String
engineId)
Parameter Description
Example
EngineStateArray engineStateArray = stub.getClusterState();
EngineState [] engineState = engineStateArray.getEngineStates();
if(engineState != null)
{
LoggerUtils.sendToLogAndConsole("EngineCount in cluster:" +
engineState.length);
for(int index = 0; index < engineState.length; index++)
{
EngineState engine =
stub.getEngineState(engineState[index].getEngineId() );
LoggerUtils.sendToLogAndConsole(
"Engine Id: " + engine.getEngineId() + "\n" +
"Engine status: " + engine.getEngineStatus() + "\n" +
"Value of engine status: " +
engine.getValueOfEngineStatus() + "\n" +
"Heartbeat: " + ( (engine.getHeartbeat() != null) ?
engine.getHeartbeat().getTime().toString() : "null") + "\n" +
"Shutdown time: " + ((engine.getShutdownTime()!= null)
? engine.getShutdownTime().getTime().toString() : "null") + "\n" +
"Start time: " + ((engine.getStartTime() != null) ?
engine.getStartTime().getTime().toString() : "null") );
}
}
reassignAllProcesses
Used to reassign all processes from the source engine to a list of target engines.
Method Signature
int reassignAllProcesses(java.lang.String sourceEngineId,
com.novell.soa.af.impl.soap.StringArray targetEngineIds)
Parameters
Parameter Description
getEngineState
Used to get a list that contains an IEngineState object for each engine in the cluster.
Parameters
Parameter Description
Example
EngineStateArray engineStateArray = stub.getClusterState();
EngineState [] engineState = engineStateArray.getEngineStates();
if(engineState != null)
{
LoggerUtils.sendToLogAndConsole("EngineCount in cluster:" +
engineState.length);
for(int index = 0; index < engineState.length; index++)
{
EngineState engine =
stub.getEngineState(engineState[index].getEngineId() );
LoggerUtils.sendToLogAndConsole(
"Engine Id: " + engine.getEngineId() + "\n" +
"Engine status: " + engine.getEngineStatus() + "\n" +
"Value of engine status: " +
engine.getValueOfEngineStatus() + "\n" +
"Heartbeat: " + ( (engine.getHeartbeat() != null) ?
engine.getHeartbeat().getTime().toString() : "null") + "\n" +
"Shutdown time: " + ((engine.getShutdownTime()!= null)
? engine.getShutdownTime().getTime().toString() : "null") + "\n" +
"Start time: " + ((engine.getStartTime() != null) ?
engine.getStartTime().getTime().toString() : "null") );
}
}
reassignPercentageProcesses
Used to reassign a percentage of processes from the source engine to the target engine.
Method Signature
int reassignPercentageProcesses(int percent, java.lang.String
sourceEngineId, java.lang.String targetEngineId)
Parameter Description
reassignProcesses
Used to reassign one or more processes from the source engine to the target engine.
Method Signature
int reassignProcesses(com.novell.soa.af.impl.soap.StringArray requestIds,
java.lang.String sourceEngineId, java.lang.String targetEngineId)
Parameters
Parameter Description
removeEngine
Used to remove an engine from the cluster state table. The engine must be in the SHUTDOWN or
TIMEDOUT state.
Method Signature
void removeEngine(java.lang.String engineId)
Parameters
Parameter Description
This section describes the Metrics Web Service, which provides metrics for provisioning workflows.
WARNING: The test page is disabled by default. Since some of the methods allow data to be
updated, the test page presents a potential security vulnerability and should not be allowed in a
production environment. For details on enabling the test page, see the instructions provided for the
Role Service in “Enabling the Test Page” on page 407.
Team Metrics
Team managers can only retrieve metrics on a team for which they are managers. These are the
methods are available to team managers:
Method Description
Method Description
Utility Operations
Both team managers and administrators may perform these operations:
Method Description
Specifying Filters
As mentioned above, the Metrics Webservice does not use a complex query language. Instead filters
can be use to narrow results by criteria such as date ranges or approval statuses.
These are the filters you can specify (see type FilterConstants in service’s WSDL):
Filter Description
ApprovalStatusProcessing
ApprovalStatusDenied
ApprovalStatusRefused
ApprovalStatusApproved
ApprovalStatusRetract
ApprovalStatusError
EntitlementUnknown
EntitlementGranted
EntitlementRevoked
EntitlementSuccess
EntitlementWarning
EntitlementError
EntitlementFatal
ProcessStatusRunning
ProcessStatusStopped
ProcessStatusTerminated
ProcessStatusCompleted
Here is a Java example. Note that your code will obviously differ depending on the platform you use
for your Web Service client:
HashMap map=new HashMap();
map.put(MetricsFilter.KEY_PROCESS_STATUS,
MetricsFilter.ProcessStatusRunning);
double flowtime = metrics.getFlowTimeCalendarDays(processId,
processVer, activity, 5, calendar1.getTime(),
calendar2.getTime(), MetricsFilter.ACTIVITY_CLAIMED,
MetricsFilter.ACTIVITY_FORWARDED, map);
...
Please consult the WebService WSDL for more information:
http://server:port/warcontext/metrics/service?WSDL
/**
* Method to obtain the remote interface to the Metrics endpoint
* @param _url
* @param _username
* @param _password
* @return IRemoteMetrics interface
* @throws Exception
*/
private IRemoteMetrics getStub(String _url, String _username, String
_password) throws Exception
{
Properties properties = new Properties();
properties.put(Context.INITIAL_CONTEXT_FACTORY,
"org.jnp.interfaces.NamingContextFactory");
String lookup =
stub._setProperty(Stub.USERNAME_PROPERTY, _username);
stub._setProperty(Stub.PASSWORD_PROPERTY, _password);
stub._setProperty(Stub.SESSION_MAINTAIN_PROPERTY, Boolean.TRUE);
stub._setProperty(Stub.ENDPOINT_ADDRESS_PROPERTY, _url);
When the limit has been reached for any of these settings a Web Service fault is generated indicating
the problem. In addition, for settings 1 and 2, the fault includes an error code.
If the fault is caused by a TimeRequiredBetweenClientRequests error, the error code is 100.
If the fault is caused by a MaxClients errors, the error code is 200.
If the fault is caused by a closed client connection error, the error code is 300.
Client consumers of the Metrics Web Service will have to include in their code provisions for retrying
a request. Here is a simple Java listing that shows how this can be achieved:
try {
for (int i = 0; i < retries; i++) {
try {
return metrics.getFlowCount(strDN, strId, new
HashMap());
} catch (MetricsServiceException e) {
if (e.getErrorCode() == 100 //subsequent call
error
|| e.getErrorCode() == 200) { //too many
clients
try {
Thread.sleep(retryPause);
}
getClaimedFlowTimeCalendarDays
Syntax: Here’s the method signature:
double getClaimedFlowTimeCalendarDays(String processId, String
processVersion, Date startCompletionTime, Date endCompletionTime, String
teamDN,Map filters)
getClaimedFlowTimeWorkingDays
Syntax: Here is the method signature:
MetricsResultset getClaimedFlowTimeWorkingDays(String processId, String
processVersion, Date startCompletionTime, Date endCompletionTime,String
teamDN, Map filters)
getToClaimedFlowTimeCalendarDays
Syntax: Here is the method signature:
double getToClaimFlowTimeCalendarDays(String processId, String
processVersion, Date startCompletionTime, Date endCompletionTime, String
teamDN,Map filters)
getClaimedInventory
Syntax: Here is the method signature:
double getClaimedInventory(String processId, String processVersion, Date
startCompletionTime, Date endCompletionTime, String teamDN, Map filters)
getClaimedThroughputCalendarDays
Syntax: Here is the method signature:
double getClaimedThroughputCalendarDays(String processId, String
processVersion, Date startCompletionTime, Date endCompletionTime, String
teamDN Map filters)
getClaimedThroughputWorkingDays
Syntax: Here is the method signature:
MetricsResultset getClaimedThroughputWorkingDays(String processId,
String processVersion, Date startCompletionTime, Date endCompletionTime,
String teamDN, Map filters)
getTeamLongestRunning
Syntax: Here is the method signature:
MetricsResultset getTeamLongestRunning(String processId, String
processVersion, String teamDN, Map filters)
getTeamLongestClaimed
Syntax: Here is the method signature:
MetricsResultset getTeamLongestClaimed(String processId, String
processVersion, String teamDN, Map filters)
getTeamFlowHistory
Syntax: Here is the method signature:
MetricsResultset getTeamFlowHistory(List requestIds)
getTeamHistoryForRecipients
Syntax: Here is the method signature:
MetricsResultset getTeamHistoryForRecipients(String teamDN, Map filters)
getTeamRunningTime
Syntax: Here is the method signature:
double getTeamRunningTime(String processId, String processVersion, String
teamDN, Map filters)
getTeamDecisionCount
Syntax: Here is the method signature:
int getTeamDecisionCount(String processId, String processVersion, String
teamDN, Map filters)
getTeamInitiatedCount
Syntax: Here is the method signature:
int getTeamInitiatedCount(String processId, String processVersion, String
teamDN, Map filters)
getTeamRecipientCount
Syntax: Here is the method signature:
int getTeamRecipientCount(String processId, String processVersion, String
teamDN, Map filters)
getActivityFlowTimeCalendarDays
Syntax: Here is the method signature:
double getActivityFlowTimeCalendarDays(String processId, String
processVer, String activityId, Date startTime, Date completeTime, Map
filters)
getActivityInventory
Syntax: Here is the method signature:
double getActivityInventory(String processId, String processVersion,
String activityId, Date startTime, Date completeTime, Map filters)
getActivityThroughputCalendarDays
Syntax: Here is the method signature:
double getActivityThroughputCalendarDays(String processId, String
processVersion, String activityId, Date startTime, Date completiontime, Map
filters)
getActivityThroughputWorkingDays
Syntax: Here is the method signature:
MetricsResultset getActivityThroughputWorkingDays(String processId,
String processVersion, String activityId, Date startTime, Date
completiontime, Map filters)
getInventory
Syntax: Here is the method signature:
double getInventory(String processId, String processVersion, Date
startTime, Date completeTime, Map filters)
getLongestClaimed
Syntax: Here is the method signature:
MetricsResultset getLongestClaimed(String processId, String
processVersion, Map filters)
getLongestRunning
Syntax: Here is the method signature:
MetricsResultset getLongestRunning(String processId, String
processVersion, Map filters)
getFlowHistory
Syntax: Here is the method signature:
MetricsResultset getFlowHistory(List requestIds)
getFlowHistoryForInitiators
Syntax: Here is the method signature:
MetricsResultset getFlowHistoryForInitiators(List initiators, Map
filters)
getFlowHistoryForRecipients
Syntax: Here is the method signature:
MetricsResultset getFlowHistoryForRecipients(List recipients, Map filters)
getRunningTime
Syntax: Here is the method signature:
double getRunningTime(String processId, String processVersion, Map
filters)
getThroughputCalendarDays
Syntax: Here is the method signature:
double getThroughputCalendarDays(String processId, String processVersion,
Date startTime, Date completiontime, Map filters)
getThroughputWorkingDays
Syntax: Here is the method signature:
MetricsResultset getActivityThroughputWorkingDays(String processId, String
processVersion, String activityId, Date startTime, Date completiontime,
Map filters)
Utility Methods
This section provides reference information for each utility method. Both team managers and
administrators can call these methods.
getAllProvisioningFlows
Syntax: Here is the method signature:
MetricsResultset getAllProvisioningFlows()
getUserActivityOnlyFlow
Syntax: Here is the method signature:
BasicModelVO getUserActivityOnlyFlow(String processId, String processVer)
getTeams
Syntax: Here is the method signature:
MetricsResultset getTeams()
getTeamMembers
Syntax: Here is the method signature:
MetricsResultset getTeamMembers(String teamDN)
General Examples
This example uses the KEY_APPROVAL_STATUS filter to compare the decision outcomes for a
provisioning request type. This could be used to generate a pie chart for example.
Other Examples
The following examples illustrate the use of various methods for retrieving workflow counts.
This section describes the Notification Web Service, which allows SOAP clients to use the email
notification facility.
WARNING: The test page is disabled by default. Since some of the methods allow data to be
updated, the test page presents a potential security vulnerability and should not be allowed in a
production environment. For details on enabling the test page, see the instructions provided for the
Role Service in “Enabling the Test Page” on page 407.
iRemoteNotification
This section provides reference information for each method associated with the
iRemoteNotification interface.
getVersion
Returns the version number of the notification facility you’re running.
Syntax: Here is the method signature:
VersionVO getVersion()
sendNotification
Sends an email notification.
Syntax: Here is the method signature:
void sendNotification(NotificationMap arg0)
BuiltInTokens
This section provides reference information for each method associated with the BuiltInTokens class.
getTO
Returns the fixed string TO, which can be used as a key to identify the value for the TO system token.
Syntax: Here is the method signature:
public java.lang.String getTO()
getCC
Returns the fixed string CC, which can be used as a key to identify the value for the CC system token.
Syntax: Here is the method signature:
public java.lang.String getCC()
getBCC
Returns the fixed string BCC, which can be used as a key to identify the value for the BCC system
token.
Syntax: Here is the method signature:
public java.lang.String getBCC()
getTO_DN
Returns the fixed string TO_DN, which can be used as a key to identify the value for the TO_DN
system token.
Syntax Here is the method signature:
public java.lang.String getTO_DN()
getCC_DN
Returns the fixed string CC_DN, which can be used as a key to identify the value for the CC_DN
system token.
Syntax: Here is the method signature:
public java.lang.String getCC_DN()
getREPLYTO
Returns the fixed string REPLYTO, which can be used as a key to identify the value for the REPLYTO
system token.
Syntax: Here is the method signature:
public java.lang.String getREPLYTO()
getREPLYTO_DN
Returns the fixed string REPLYTO_DN, which can be used as a key to identify the value for the
REPLYTO_DN system token.
Syntax: Here is the method signature:
public java.lang.String getREPLYTO_DN()
getLOCALE
Returns the fixed string LOCALE, which can be used as a key to identify the value for the LOCALE
system token.
Syntax: Here is the method signature:
public java.lang.String getLOCALE()
getNOTIFICATION_TEMPLATE_DN
Returns the fixed string NOTIFICATION_TEMPLATE, which can be used as a key to identify the value
for the NOTIFICATION_TEMPLATE system token.
Syntax: Here is the method signature:
public java.lang.String getNOTIFICATION_TEMPLATE_DN()
Entry
The Entry class represents an entry in an EntryArray object. It is used to specify a token in an email
template.
This section provides reference information for each method associated with the Entry class.
getKey
Returns the key defined for the Entry object. The key identifies the token.
Syntax: Here is the method signature:
java.lang.String getKey()
setKey
Sets the key for the Entry object. The key identifies the token. If the object represents a built-in
token, you can use the BuiltInTokens class to set the key. Otherwise, you can pass a string to the
setKey method that specifies the key.
Syntax: Here is the method signature:
void setKey(java.lang.String KeyVal)
getValues
Returns a StringArray object representing the values for the Entry object.
Syntax: Here is the method signature:
StringArray getValues()
setValues
Sets the values for the Entry object.
Syntax: Here is the method signature:
void setValues(StringArray ValuesVal)
EntryArray
The EntryArray class is a container for an array of Entry objects. It is contained by the
NotificationMap object.
This section provides reference information on the methods associated with the EntryArray class.
getEntry
Returns the Entry object contained within this EntryArray object.
Syntax: Here is the method signature:
Entry[] getEntry()
setEntry
Sets the Entry object for this EntryArray object.
Syntax: Here is the method signature:
void setEntry(Entry[] EntryVal)
NotificationMap
The NotificationMap object is a map that contains an EntryArray object. It is passed to the
sendNotification method on the stub.
This section provides reference information for the methods associated with the NotificationMap
class.
NotificationMap constructors
The NotificationMap class has two constructors.
Syntax 1: Here is the syntax for a constructor that takes no parameters:
NotificationMap()
Syntax 2: Here is the syntax for a constructor that takes an EntryArray object as a parameter:
NotificationMap(EntryArray EntriesVal)
getEntries
Returns the EntryArray object contained by this NotificationMap object.
Syntax: Here is the method signature:
EntryArray getEntries()
NotificationService
This section provides reference information for the NotificationService interface.
getIRemoteNotificationPort
Gets the stub for the remote service. The stub is a port of type IRemoteNotification.
Syntax: Here is the method signature:
IRemoteNotification getIRemoteNotificationPort() throws
javax.xml.rpc.ServiceException
StringArray
This section provides reference information for the StringArray class.
StringArray constructors
The StringArray class has two constructors.
Syntax 1: Here is the syntax for a constructor that takes no parameters:
StringArray()
Syntax 2: Here is the syntax for a constructor that takes a String array as a parameter:
StringArray(java.lang.String[] StringVal)
getString
Returns the array of strings defined for this StringArray object.
Syntax: Here is the method signature:
java.lang.String[] getString()
setString
Sets the array of strings for this StringArray object. This method is called by the second constructor,
which takes a String array as a parameter.
Syntax: Here is the method signature:
void setString(java.lang.String[] StringVal)
getValue
Returns the version number of the service.
Syntax: Here is the method signature:
java.lang.String getValue()
Notification Example
The following code example shows how one might use the Notification service to send an email
message using a pre-defined system template. To get a reference to the SOAP endpoint for the
Notification service, a call is made to the getNotificationStub() method. After acquiring the stub
interface, the code sets the email notification template as well as values for the built-in tokens in the
template. In addition, the code specifies values for the requestTitle and initiatorFullName tokens. For
each token, the code creates an Entry object. Once all of the entries have been created, it packages
the entry array into a map of type NotificationMap, which is then passed to the sendNotification
method on the stub.
import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.xml.rpc.Stub;
import java.rmi.RemoteException;
//
// Notification imports
import com.novell.ws.client.notification.IRemoteNotification;
import com.novell.ws.client.notification.BuiltInTokens;
import com.novell.ws.client.notification.Entry;
import com.novell.ws.client.notification.EntryArray;
import com.novell.ws.client.notification.StringArray;
import com.novell.ws.client.notification.NotificationMap;
import com.novell.ws.client.notification.IRemoteNotification;
import com.novell.ws.client.notification.NotificationService;
try
{
String targetEmailAddress = "jsmith@somewhere.com";
//
// Get the notification stub
IRemoteNotification notificationStub =
getNotificationStub(url, username, password);
notificationTemplate.setKey(builtInTokens.getNOTIFICATION_TEMPLATE_DN());
//
// Use one of the email templates specifying DN
String EMAIL_TEMPLATE_NAME = "Provisioning Notification";
String templateDN = "cn=" + EMAIL_TEMPLATE_NAME +
",cn=Default Notification Collection,cn=Security";
arr = new StringArray(new String[]{templateDN} );
notificationTemplate.setValues(arr);
//
// Substitute key values defined in email templates
Entry token1 = new Entry();
token1.setKey("requestTitle"); // key is %requestTitle%
arr = new StringArray(new String[]{"Sample Email using
Notification Web Service"} );
token1.setValues(arr);
Entry token2 = new Entry();
token2.setKey("initiatorFullName");
arr = new StringArray(new String[]{username} );
token2.setValues(arr);
//
// Setup the notification map
NotificationMap map = new NotificationMap();
Entry[] entries = new
Entry[]{to,notificationTemplate,token1,token2};
EntryArray entryArray = new EntryArray();
entryArray.setEntry(entries);
/**
* Method to obtain the remote interface to the Notification
endpoint
* @param _url
* @param _username
* @param _password
* @return IRemoteNotification interface
* @throws Exception
*/
private IRemoteNotification getNotificationStub(String _url,
String _username, String _password)
throws Exception
{
Properties properties = new Properties();
properties.put(Context.INITIAL_CONTEXT_FACTORY,
"org.jnp.interfaces.NamingContextFactory");
String lookup =
"xmlrpc:soap:com.novell.ws.client.notification.NotificationService";
stub._setProperty(Stub.USERNAME_PROPERTY, _username);
stub._setProperty(Stub.PASSWORD_PROPERTY, _password);
stub._setProperty(Stub.SESSION_MAINTAIN_PROPERTY,
Boolean.TRUE);
stub._setProperty(Stub.ENDPOINT_ADDRESS_PROPERTY, _url);
Service
This section describes the VDX Web Service, which allows SOAP clients to access the directory
abstraction layer.
WARNING: The test page is disabled by default. Since some of the methods allow data to be
updated, the test page presents a potential security vulnerability and should not be allowed in a
production environment. For details on enabling the test page, see the instructions provided for the
Role Service in “Enabling the Test Page” on page 407.
Even though the service does not require the Administrator credentials since you set the
VirtualDataService/soap property to false, the globalQuery operation will still require the
Administrator credentials since you set a property for the operation to true.
IRemoteVdx
This section provides reference information for each method associated with the IRemoteVdx
interface.
getVersion
Returns the version number of the VDX service you’re running.
Syntax: Here is the method signature:
VersionVO getVersion() throws java.rmi.RemoteException;
globalQuery
Allows you to execute predefined searches called global queries. Global queries are saved searches
for LDAP. They provide some of the capabilities of stored procedures.
To define a global query, you need to use the directory abstraction layer editor. For details, see the
chapter on the directory abstraction layer editor in the Identity Manager User Application: Design
Guide.
Syntax: Here is the method signature:
java.lang.String[] globalQuery(java.lang.String queryDN, StringMap
queryParameterValues) throws VdxServiceException,
java.rmi.RemoteException;
query
Allows you to perform ad hoc queries by specifying an entity, a set of attributes, and a query
expression that filters the data returned.
Syntax: Here is the method signature:
EntityAttributeMap query(java.lang.String entityDefinition,
java.lang.String[] attributeKeys, java.lang.String queryFilter) throws
VdxServiceException, java.rmi.RemoteException;
Query Grammar
The queryFilter parameter of the query() method lets you pass in search criteria expressions that
filter the data returned. This section describes the grammar for these expressions.
getAttribute
Returns a single Attribute object that can be used to retrieve and examine data for an attribute in
the directory abstraction layer.
Syntax: Here is the method signature:
getAttributes
Returns an array of Attribute objects that can be used to retrieve and examine data in the directory
abstraction layer.
Syntax: Here is the method signature:
Attribute[] getAttributes(java.lang.String objectDN, java.lang.String
entityDefinition, java.lang.String[] attributeKeys) throws
VdxServiceException, java.rmi.RemoteException;
Attribute
The Attribute class represents an attribute in the directory abstraction layer.
This section provides reference information for the Attribute class.
Attribute constructors
The Attribute class has two constructors.
Syntax 1: Here is the syntax for a constructor that takes no arguments:
Attribute()
Syntax 2: Here is the syntax for a constructor that takes arrays of all the supported data types as
arguments:
Attribute(ByteArrayArray BinariesVal, BooleanArray BooleansVal, DateArray
DatesVal, IntegerArray IntegersVal, StringArray StringsVal, AttributeType
TypeVal)
getBinaries
Returns the ByteArrayArray object for the attribute.
Syntax: Here is the method signature:
ByteArrayArray getBinaries()
setBinaries
Sets the ByteArrayArray object for the attribute.
Syntax: Here is the method signature:
void setBinaries(ByteArrayArray BinariesVal)
setBooleans
Sets the BooleanArray object for the attribute.
Syntax: Here is the method signature:
void setBooleans(BooleanArray BooleansVal)
getDates
Returns the DateArray object for the attribute.
Syntax: Here is the method signature:
DateArray getDates()
setDates
Sets the DateArray object for the attribute.
Syntax: Here is the method signature:
void setDates(DateArray DatesVal)
getIntegers
Returns the IntegerArray object for the attribute.
Syntax: Here is the method signature:
IntegerArray getIntegers()
setIntegers
Sets the IntegerArray object for the attribute.
Syntax: Here is the method signature:
void setIntegers(IntegerArray IntegersVal)
getStrings
Returns the StringArray object for the attribute.
Syntax: Here is the method signature:
StringArray getStrings()
getType
Returns the AttributeType object for the attribute.
Syntax: Here is the method signature:
AttributeType getType()
setType
Sets the AttributeType object for the attribute.
Syntax: Here is the method signature:
void setType(AttributeType TypeVal)
AttributeArray
This section provides reference information on the AttributeArray class.
AttributeArray constructors
The AttributeArray class has two constructors.
Syntax 1: Here is the syntax for a constructor that takes no parameters:
AttributeArray()
Syntax 2: Here is the syntax for a constructor that takes an array of Attribute objects as a parameter:
AttributeArray(Attribute[] AttributeVal)
getAttribute
Returns an array of Attribute objects.
Syntax: Here is the method signature:
Attribute[] getAttribute()
setAttribute
Sets the array of Attribute objects associated with the AttributeArray class.
Syntax: Here is the method signature:
AttributeType
This section provides reference information on the AttributeType class.
AttributeType constructors
The AttributeType class supports a single constructor.
Syntax: Here is the syntax for the constructor:
protected AttributeType(java.lang.String value)
getValue
Returns a String that indicates the attribute type.
Syntax: Here is the method signature:
java.lang.String getValue()
BooleanArray
This section provides reference information for the BooleanArray class.
BooleanArray constructors
The BooleanArray class has two constructors.
Syntax 1: Here is the syntax for a constructor that takes no parameters:
BooleanArray()
Syntax 2: Here is the syntax for a constructor that takes a boolean value as a parameter:
BooleanArray(boolean[] BooleanVal)
getBoolean
Returns an array of boolean values for an attribute.
Syntax: Here is the method signature:
boolean[] getBoolean()
setBoolean
Sets an array of boolean values for an attribute.
Syntax: Here is the method signature:
void setBoolean(boolean[] BooleanVal)
ByteArrayArray constructors
The ByteArrayArray class has two constructors.
Syntax 1: Here is the syntax for a constructor that takes no parameters:
ByteArrayArray()
Syntax 2: Here is the syntax for a constructor that takes a Base 64 binary value as a parameter:
ByteArrayArray(byte[][] Base64BinaryVal)
getBase64Binary
Returns a two-dimensional array of bytes for an attribute.
Syntax: Here is the method signature:
byte[][] getBase64Binary()
setBase64Binary
Sets a two-dimensional array of bytes for an attribute.
Syntax: Here is the method signature:
void setBase64Binary(byte[][] Base64BinaryVal)
DateArray
This section provides reference information for the DateArray class.
DateArray constructors
The DateArray class has two constructors.
Syntax 1: Here is the syntax for a constructor that takes no parameters:
DateArray()
Syntax 2: Here is the syntax for a constructor that takes a Calendar array as a parameter:
DateArray(java.util.Calendar[] DatetimeVal)
getDatetime
Returns an array of Calendar objects for an attribute.
Syntax: Here is the method signature:
setDatetime
Sets an array of Calendar objects for an attribute.
Syntax: Here is the method signature:
void setDatetime(java.util.Calendar[] DatetimeVal)
EntryAttributeMap
The EntryAttributeMap class is a container for an EntryArray object. It is returned by the query
method on the stub.
This section provides reference information on the methods associated with the EntryAttributeMap
class.
EntryAttributeMap constructors
The EntryAttributeMap class has two constructors.
Syntax 1: Here is the syntax for a constructor that takes no parameters:
EntryAttributeMap()
Syntax 2: Here is the syntax for a constructor that takes an EntryArray object as a parameter:
EntityAttributeMap(EntryArray EntriesVal)
getEntries
Returns the EntryArray object contained within this EntryAttributeMap object.
Syntax: Here is the method signature:
EntryArray getEntries()
setEntries
Sets the EntryArray object for this EntryAttributeMap object.
Syntax: Here is the method signature:
void setEntry(EntryArray EntriesVal)
Entry
The Entry class represents an entry in an EntryArray object.
This section provides reference information for each method associated with the Entry class.
getKey
Returns the key defined for the Entry object. The key identifies the attribute.
Syntax: Here is the method signature:
java.lang.String getKey()
setKey
Sets the key for the Entry object. The key identifies the attribute.
Syntax: Here is the method signature:
void setKey(java.lang.String KeyVal)
getValues
Returns a AttributeArray object representing the values for the Entry object.
Syntax: Here is the method signature:
AttributeArray getValues()
setValues
Sets the values for the Entry object.
Syntax: Here is the method signature:
void setValues(AttributeArray ValuesVal)
EntryArray
The EntryArray class is a container for an array of Entry objects. It is contained by the
EntryAttributeMap object.
This section provides reference information on the methods associated with the EntryArray class.
getEntry
Returns the Entry object contained within this EntryArray object.
Syntax: Here is the method signature:
Entry[] getEntry()
setEntry
Sets the Entry object for this EntryArray object.
Syntax: Here is the method signature:
void setEntry(Entry[] EntryVal)
IntegerArray
This section provides reference information for the IntegerArray class.
IntegerArray constructors
The IntegerArray class has two constructors.
Syntax 1: Here is the syntax for a constructor that takes no parameters:
IntegerArray()
Syntax 2: Here is the syntax for a constructor that takes an int array as a parameter:
IntegerArray(int[] IntVal)
getInt
Returns an array of integers for an attribute.
Syntax: Here is the method signature:
int[] getInt()
StringArray
The StringArray class is a container for an array of String objects. When you call the query() and
getAttributes() methods, you pass in a StringArray object to specify which attributes you want to
retrieve values for.
This section provides reference information for the StringArray class.
StringArray constructors
The StringArray class has two constructors.
Syntax 1: Here is the syntax for a constructor that takes no parameters:
StringArray()
Syntax 2: Here is the syntax for a constructor that takes an String array as a parameter:
StringArray(java.lang.String[] StringVal)
getString
Returns the array of String objects associated with the StringArray object.
Syntax: Here is the method signature:
java.lang.String[] getString()
setString
Sets the array of String objects associated with the StringArray object.
Syntax: Here is the method signature:
void setString(java.lang.String[] StringVal)
StringEntry
The StringEntry class is contained by the the StringEntryArray class.
This section provides reference information for the StringEntry class.
StringEntry constructors
The StringEntry class has two constructors.
getKey
Returns the key defined for the StringEntry object.
Syntax: Here is the method signature:
java.lang.String getKey()
setKey
Sets the key for the StringEntry object.
Syntax: Here is the method signature:
void setKey(java.lang.String KeyVal)
StringEntryArray
The StringEntryArray class is a container for an array of StringEntry objects. It is contained by the
StringMap object.
This section provides reference information for the StringEntryArray class.
StringEntryArray constructors
The StringEntryArray class has two constructors.
Syntax 1: Here is the syntax for a constructor that takes no parameters:
StringEntryArray()
Syntax 2: Here is the syntax for a constructor that takes a StringEntry array as a parameter:
StringEntryArray(StringEntry[] StringentryVal)
getStringentry
Returns the key for the StringEntryArray object.
Syntax: Here is the method signature:
StringEntry[] getStringentry()
setStringentry
Sets the key for the StringEntryArray object.
StringMap
The StringMap is a container for a StringEntryArray object.
This section provides reference information on the StringMap class.
StringMap constructors
The StringMap class has two constructors.
Syntax 1: Here is the syntax for a constructor that takes no parameters:
StringMap()
Syntax 2: Here is the syntax for a constructor that takes a StringEntryArray as a parameter:
StringMap(StringEntryArray EntriesVal)
getEntries
Returns the StringEntryArray object contained by this StringMap object.
Syntax: Here is the method signature:
StringEntryArray getEntries()
setEntries
Sets the StringEntryArray object for this StringMap object.
Syntax: Here is the method signature:
void setEntries(StringEntryArray EntriesVal)
VdxService
This section provides reference information for the VdxService interface.
getIRemoteVdxPort
Gets the stub for the remote service. The stub is a port of type IRemoteVdx.
Syntax: Here is the method signature:
IRemoteVdx getIRemoteVdxPort() throws javax.xml.rpc.ServiceException;
VersionVO
This section provides reference information on the VersionVO class.
VDX Example
The following code example shows how one might use the VDX service to access the attributes
associated with entities defined in the directory abstraction layer. It demonstrates the use of ad hoc
searches, as well as predefined searches called global queries. This code listing includes examples
that use the getAttribute(), getAttributes(), query(), and globalQuery() methods on the service.
To get a reference to the SOAP endpoint for the VDX service, it calls a method called getVdxStub().
The implementation for this method is shown at the end of the listing:
NOTE: This example presumes that you have generated client stubs from the WSDL file
IRemoteVdx.wsdl. Use the SOAP stack provider of your choice (such as AXIS or CFX) to generate
client stubs.
With Apache CXF, for example, you should be able to generate the stubs to match the package
names in the import statement by using the following command:
wsdl2java -p com.netiq.ws.client.vdx IRemoteVdx.wsdl
import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.xml.rpc.Stub;
import java.rmi.RemoteException;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.rmi.RemoteException;
import java.util.Calendar;
import java.util.Date;
import java.util.Hashtable;
import java.util.Map;
//
// Vdx imports
import com.netiq.ws.client.vdx.IRemoteVdx;
import com.netiq.ws.client.vdx.VdxService;
import com.netiq.ws.client.vdx.VdxServiceException;
import com.netiq.ws.client.vdx.VersionVO;
import com.netiq.ws.client.vdx.Attribute;
import com.netiq.ws.client.vdx.AttributeArray;
import com.netiq.ws.client.vdx.AttributeType;
import com.netiq.ws.client.vdx.ByteArrayArray;
import com.netiq.ws.client.vdx.BooleanArray;
public ServiceTest() { };
try
{
serviceTest.run(wService);
}
catch(Exception e)
{
System.exit(-1);
}
}
globalQueryTestCase();
}
else if(_service == NOTIFICATION)
{
System.out.println("Calling Notification endpoint");
NotificationTest notificationTest = new
NotificationTest();
//
// Email Notification
System.out.println("\n<=========queryAttributesTestCase=========>");
try
{
//
// Get the vdx stub
IRemoteVdx vdxStub = getVdxStub(url, username, password);
//
// Create entry items corresponding to param key in DAL
StringEntry [] entry = {
new StringEntry("titleattribute", "Chief Operating
Officer"),
new StringEntry("managerattribute",
"cn=jmiller,ou=users,ou=idmsample-pproto,o=netiq")
};
//
// Create and set the array of entries (key,value pairs)
StringEntryArray entryArr = new StringEntryArray();
entryArr.setStringentry(entry);
//
// Create and set the map using the entries
StringMap map = new StringMap();
map.setEntries(entryArr);
//
// Define and execute the global query
int QUERY_KEY_INDEX = 0;
String [] queryKeyName = {"TestVdxGlobalQuery2",
"TestVdxGlobalQuery"};
//
// Results from global query TestVdxGlobalQuery2 ----->
cn=apalani,ou=users,OU=idmsample-pproto,O=netiq
//
// Make the vdx endpoint call
StringArray array =
vdxStub.globalQuery(queryKeyName[QUERY_KEY_INDEX], map);
String [] str = array.getString();
if(str == null)
System.out.println("=================================================
===");
for(int index = 0; index < str.length; index++)
{
System.out.println(str[index]);
}
}
}
catch(VdxServiceException error)
{
System.out.println(error.getReason() );
throw new Exception(error.getReason() );
}
catch(RemoteException error)
{
System.out.println(error.getMessage() );
throw new Exception(error.getMessage() );
}
}
}
}
}
catch(VdxServiceException error)
{
System.out.println(error.getReason() );
throw new Exception(error.getReason() );
}
catch(RemoteException error)
{
System.out.println(error.getMessage() );
throw new Exception(error.getMessage() );
}
}
try
{
IRemoteVdx vdxStub = getVdxStub(url, username, password);
VersionVO version = vdxStub.getVersion();
System.out.println("Version : " + version.getValue() );
}
catch(RemoteException error)
{
try
{
IRemoteVdx vdxStub = getVdxStub(url, username, password);
String recipient =
"cn=jmiller,ou=users,ou=idmsample,o=netiq";
String entity = "user";
for(int attributeIndex = 0; attributeIndex <
userAttributes.length; attributeIndex++)
{
//
// Now, get the values for each attribute from the VDX
layer
Attribute attributeData =
vdxStub.getAttribute(recipient,
entity, userAttributes[attributeIndex]);
//
// Determine how to handle the return data
examineAttributeData(attributeData,
userAttributes[attributeIndex]);
}
}
catch(VdxServiceException error)
{
System.out.println(error.getReason() );
throw new Exception(error.getReason() );
}
catch(RemoteException error)
{
System.out.println(error.getMessage() );
throw new Exception(error.getMessage() );
}
}
try
{
IRemoteVdx vdxStub = getVdxStub(url, username, password);
/**
* Method to obtain the remote interface to the Vdx endpoint
* @param _url
* @param _username
* @param _password
* @return IRemoteMetrics interface
* @throws Exception
*/
private IRemoteVdx getVdxStub(String _url, String _username, String
_password)
throws Exception
{
Properties properties = new Properties();
properties.put(Context.INITIAL_CONTEXT_FACTORY,
"org.jnp.interfaces.NamingContextFactory");
stub._setProperty(Stub.USERNAME_PROPERTY, _username);
stub._setProperty(Stub.PASSWORD_PROPERTY, _password);
stub._setProperty(Stub.SESSION_MAINTAIN_PROPERTY,
Boolean.TRUE);
stub._setProperty(Stub.ENDPOINT_ADDRESS_PROPERTY, _url);
This section describes the Role Web Service, which allows SOAP clients to access the role
management and SoD management functions.
WARNING: The test page is disabled by default. Since some of the methods allow data to be
updated, the test page presents a potential security vulnerability and should not be allowed in a
production environment.
After you enable the test page, the Test Service link is available:
On the test page, the user can retrieve the WSDL document that describes the Web Service, see the
Java Remote Interface that represents the service, and also see the type mappings from XML to Java.
In addition, the user can test the service by invoking individual methods.
WARNING: The test page is disabled by default. Since some of the methods allow data to be
updated, the test page presents a potential security vulnerability and should not be allowed in a
production environment.
To enable the test page, you need to update the WEB-INF/web.xml file in the IDMProv.war file.
Before you make your changes, the web.xml should look like this:
<servlet>
<servlet-name>Role</servlet-name>
<servlet-
class>com.novell.idm.nrf.soap.ws.role.impl.RoleServiceSkeletonImpl</
servlet-class>
<init-param>
<param-name>com.novell.soa.ws.test.disable</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
Change the servlet declaration, as follows:
Role API
This section provides details about the methods available with the Role Web service. This API
presumes you’re using Java code generated by the WSSDK toolkit. The API will be different if you’re
using another Web Service toolkit.
IRemoteRole
This section provides reference information for each method associated with the IRemoteRole
interface.
createResourceAssociation
Create a resource association and return the resource association object with the newly created
resource association DN.
Syntax: Here is the method signature:
ResourceAssociation
createResourceAssociation(com.novell.idm.nrf.soap.ws.ResourceAssociation
resourceAssociation)
throws com.novell.idm.nrf.soap.ws.NrfServiceException,
java.rmi.RemoteException;
deleteResourceAssociation
Deletes a resource association object.
Syntax: Here is the method signature:
void deleteResourceAssociation(com.novell.idm.nrf.soap.ws.DNString
resourceAssociationDn)
throws com.novell.idm.nrf.soap.ws.NrfServiceException,
java.rmi.RemoteException;
getResourceAssociations
Retrieves resource association objects for a given role DN or resource DN. If the roleDn and
resourceDn parameters are null, the entire list is returned.
Syntax: Here is the method signature:
Create Role
Creates a new role according to the specified parameters and returns the DN of the created role.
A correlation ID is generated automatically for this method that uses this format:
UserApp#RemoteRoleRequest#xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
The correlation ID is used for auditing.
Syntax: Here is the method signature:
public DNString createRole(RoleRequest role)
throws NrfServiceException, RemoteException;
createRoleAid
Creates a new role with a correlation ID that you provide. The correlation ID is used for auditing to
link a set of related roles. This method returns the DN of the created role.
Syntax: Here is the method signature:
public DNString createRoleAid (RoleRequest role, String correlationId)
throws NrfServiceException, RemoteException;
findRoleByExampleWithOperator
Finds an array of Role objects based on the search criteria specified in the given Role object. This
method also lets you specify whether to use AND as the operator for multi-value searches.
Syntax: Here is the method signature:
RoleArray findRoleByExampleWithOperator(Role searchCriteria, boolean
useAndForMultiValueSearch) throws NrfServiceException,
java.rmi.RemoteException
This method follows a query by example approach. It allows you to populate a Role object to specify
the desired search criteria. An AND operation is always used across multiple attributes within the
Role search object. For example, you might provide a value for the name and description
attributes, which indicates that the criteria for both attributes must be satisfied for a successful
search.
The second parameter (useAndForMultiValueSearch) allows you to specify which operator should be
used for multi-valued attributes (such as when multiple child roles are provided). A value of true
indicates that AND should be used for these operations, whereas a value of false indicates that OR
should be used.
Not all attributes in the Role object can be used for the search expression. Values found in the non-
supported search attributes are ignored.
approvers Yes Uses a standard LDAP equal operator for the search. You can enter
multiple approvers and use the operator parameter to determine
whether an AND or an OR is used for the multi-valued search. You
need to provide valid Dns for the approvers. Note that an approver is
made up of multiple parts. It is of type TypedNameSyntax. You need to
specify the sequence number of the approver to execute a successful
search. This is a limitation in LDAP.
<ser:findRoleByExampleWithOperatorRequest>
<ser:role>
<ser:approvers>
<!--Zero or more repetitions:-->
<ser:approver>
<ser:approverDN>cn=ablake,ou=users,ou=medical-
idmsample,o=netiq</ser:approverDN>
<ser:sequence>1</ser:sequence>
</ser:approver>
</ser:approvers>
</ser:role>
<ser:operator>false</ser:operator>
</ser:findRoleByExampleWithOperatorRequest>
The example above shows how to find roles that have the specified
approver associated with them. An OR search is used since the
operator parameter is set to false.
childRoles Yes Uses a standard LDAP equal operator for the search. You can enter
multiple child roles and use the operator parameter to determine
whether an AND or an OR is used for the multi-valued search. You
need to provide valid Dns for the child roles.
<ser:findRoleByExampleWithOperatorRequest>
<ser:role>
<ser:childRoles>
<!--Zero or more repetitions:-->
<ser:dnstring>
<ser:dn>cn=Doctor,cn=Level20,cn=RoleDefs,cn=Role
Config,cn=AppConfig,cn=PicassoDriver,cn=TestDrivers,
o=netiq</ser:dn>
</ser:dnstring>
<ser:dnstring>
<ser:dn>cn=Nurse,cn=Level20,cn=RoleDefs,cn=RoleC
onfig,cn=AppConfig,cn=PicassoDriver,cn=TestDrivers,o
=netiq</ser:dn>
</ser:dnstring>
</ser:childRoles>
</ser:role>
<ser:operator>false</ser:operator>
</ser:findRoleByExampleWithOperatorRequest>
The example above shows how to find roles with a child role of
“Doctor” or “Nurse. An OR search is used since the operator
parameter is set to false.
description Yes Uses an LDAP contains search. All entries are prefixed and suffixed
with the * (wild card character). Therefore, a search for “Doctor”
translates to “*Doctor*”. This is to accommodate searches across any
localized language.
<ser:findRoleByExampleWithOperatorRequest>
<ser:role>
<ser:description>Doctor</ser:description>
</ser:role>
<ser:operator>false</ser:operator>
</ser:findRoleByExampleWithOperatorRequest>
<ser:findRoleByExampleWithOperatorRequest>
<ser:role>
<ser:entityKey>cn=Doctor,cn=Level20,cn=RoleDefs,cn
=RoleConfig,cn=AppConfig,cn=PicassoDriver,cn=TestDri
vers,o=netiq</ser:entityKey>
</ser:role>
<ser:operator>false</ser:operator>
</ser:findRoleByExampleWithOperatorRequest>
The example above shows how to retrieve a role with a specific entity
key.
implicitContainers Yes Uses a standard LDAP equal operator for the search. You can enter
multiple implicit containers and use the operator parameter to
determine whether an AND or an OR will be used for the multi-valued
search. You need to provide valid Dns for the implicit containers.
<ser:findRoleByExampleWithOperatorRequest>
<ser:role>
<ser:implicitContainers>
<!--Zero or more repetitions:-->
<ser:dnstring>
<ser:dn>ou=medical-idmsample,o=netiq</ser:dn>
</ser:dnstring>
</ser:implicitContainers>
</ser:role>
<ser:operator>false</ser:operator>
</ser:findRoleByExampleWithOperatorRequest>
The example above shows how to find roles that have the specified
implicit container associated with them. An OR search is used since
the operator parameter is set to false.
implicitGroups Yes Uses a standard LDAP equal operator for the search. You can enter
multiple implicit groups and use the operator parameter to determine
whether an AND or an OR will be used for the multi-valued search. You
need to provide valid Dns for the implicit groups.
<ser:findRoleByExampleWithOperatorRequest>
<ser:role>
<ser:implicitGroups>
<!--Zero or more repetitions:-->
<ser:dnstring>
<ser:dn>cn=HR,ou=groups,ou=medical-
idmsample,o=netiq</ser:dn>
</ser:dnstring>
</ser:implicitGroups>
</ser:role>
<ser:operator>false</ser:operator>
</ser:findRoleByExampleWithOperatorRequest>
The example above shows how to find roles that have the specified
implicit group associated with them. An OR search is used since the
operator parameter is set to false.
name Yes Uses an LDAP contains search. All entries will be prefixed and suffixed
with the * (wild card character). Therefore, a search for “Doctor”
translates to “*Doctor*”. This is to accommodate searches across any
localized language.
<ser:findRoleByExampleWithOperatorRequest>
<ser:role>
<ser:name>Doctor</ser:name>
</ser:role>
<ser:operator>false</ser:operator>
</ser:findRoleByExampleWithOperatorRequest>
The above example shows how to find roles with a name of “Doctor”.
The name string results in a search string of “*Doctor*”.
owners Yes Uses a standard LDAP equal operator for the search. You can enter
multiple owners and use the operator parameter to determine
whether an AND or an OR is used for the multi-valued search. You
must provide valid Dns for the owners.
<ser:findRoleByExampleWithOperatorRequest>
<ser:role>
<ser:owners>
<!--Zero or more repetitions:-->
<ser:dnstring>
<ser:dn>cn=ablake,ou=users,ou=medical-
idmsample,o=netiq</ser:dn>
</ser:dnstring>
<ser:dnstring>
<ser:dn>cn=mmackenzie,ou=users,ou=medical-
idmsample,o=netiq</ser:dn>
</ser:dnstring>
</ser:owners>
</ser:role>
<ser:operator>true</ser:operator>
</ser:findRoleByExampleWithOperatorRequest>
The example above shows how to find roles that have the specified
owners. An AND search is used since the operator parameter is set to
true.
parentRoles Yes Uses a standard LDAP equal operator for the search. You can enter
multiple parent roles and use the operator parameter to determine
whether an AND or an OR is used for the multi-valued search. You
must provide valid Dns for the parent roles.
<ser:findRoleByExampleWithOperatorRequest>
<ser:role>
<ser:parentRoles>
<!--Zero or more repetitions:-->
<ser:dnstring>
<ser:dn>cn=Doctor-
East,cn=Level30,cn=RoleDefs,cn=RoleConfig,cn=AppConf
ig,cn=PicassoDriver,cn=TestDrivers,o=netiq</ser:dn>
</ser:dnstring>
<ser:dnstring>
<ser:dn>cn=Doctor-
West,cn=Level30,cn=RoleDefs,cn=RoleConfig,cn=AppConf
ig,cn=PicassoDriver,cn=TestDrivers,o=netiq</ser:dn>
</ser:dnstring>
</ser:parentRoles>
</ser:role>
<ser:operator>true</ser:operator>
</ser:findRoleByExampleWithOperatorRequest>
The example above shows how to find roles that have the specified
parent roles. An AND search is used since the operator parameter is
set to true.
quorum Yes Uses a standard LDAP equal operator for the search.
<ser:findRoleByExampleWithOperatorRequest>
<ser:role>
<ser:quorum>50%</ser:quorum>
</ser:role>
<ser:operator>false</ser:operator>
</ser:findRoleByExampleWithOperatorRequest>
The example above shows how to find roles with the specified quorum
search string. The search string can include the wild card character
(“*”).
requestDef Yes Uses a standard LDAP equal operator for the search. You must provide
a valid DN for the request definition.
<ser:findRoleByExampleWithOperatorRequest>
<ser:role>
<ser:requestDef>cn=Role
Approval,cn=RequestDefs,cn=AppConfig,cn=PicassoDrive
r,cn=TestDrivers,o=netiq</ser:requestDef>
</ser:role>
<ser:operator>false</ser:operator>
</ser:findRoleByExampleWithOperatorRequest>
The example above shows how to find roles with the specified request
definition DN.
roleCategoryKeys Yes Uses a standard LDAP equal operator for the search. You can enter
multiple category keys and use the operator parameter to determine
whether an AND or an OR is used for the multi-valued search.
<ser:findRoleByExampleWithOperatorRequest>
<ser:role>
<ser:roleCategoryKeys>
<!--Zero or more repetitions:-->
<ser:categorykey>
<ser:categoryKey>doctor</ser:categoryKey>
</ser:categorykey>
<ser:categorykey>
<ser:categoryKey>nurse</ser:categoryKey>
</ser:categorykey>
</ser:roleCategoryKeys>
</ser:role>
<ser:operator>false</ser:operator>
</ser:findRoleByExampleWithOperatorRequest>
roleLevel Yes Uses a standard LDAP equal operator for the search. You can only
enter one level at a time.
<ser:findRoleByExampleWithOperatorRequest>
<ser:role>
<ser:roleLevel>
<ser:level>10</ser:level>
</ser:roleLevel>
</ser:role>
<ser:operator>false</ser:operator>
</ser:findRoleByExampleWithOperatorRequest>
findSodByExample
Finds all SoD objects based on the search criteria in the given SOD object.
Syntax: Here is the method signature:
SodArray findSodByExample(Sod sod) throws NrfServiceException,
java.rmi.RemoteException
findSodByExampleWithOperator
Finds all SoD objects based on the search criteria found in the given SOD object. This method also
lets you specify whether to use And as the operator for multi-value searches.
Syntax: Here is the method signature:
SodArray findSodByExampleWithOperator(Sod searchCriteria, boolean
useAndForMultiValueSearch) throws NrfServiceException,
java.rmi.RemoteException
findSodById
Find by key.
Syntax: Here is the method signature:
Sod findSodById(java.lang.String entityKey) throws NrfServiceException,
java.rmi.RemoteException
getConfigProperty
Retrieves configuration properties stored in the identity applications configuration XML files by
passing in a configuration property key or macro name.
Syntax: Here is the method signature:
public ConfigProperty getConfigProperty(String configPropertyKey) throws
NrfServiceException, RemoteException;
The configPropertyKey parameter can accept a fully qualified configuration key name from any of
the configuration XML files, such as the following:
DirectoryService/realms/jndi/params/USER_ROOT_CONTAINER
Alternativelly, the configPropertyKey parameter can accept a macro name that references a fully
qualified configuration key name. The following macro names are allowed:
USER_CONTAINER DirectoryService/realms/jndi/params/
USER_ROOT_CONTAINER
GROUP_CONTAINER DirectoryService/realms/jndi/params/
GROUP_ROOT_CONTAINER
ROOT_CONTAINER DirectoryService/realms/jndi/params/ROOT_NAME
PROVISIONING_DRIVER DirectoryService/realms/jndi/params/
PROVISIONING_ROOT
getConfiguration
Returns the role system configuration defined in the Role Catalog root (nrfConfiguration).
Syntax: Here is the method signature:
Configuration getConfiguration() throws NrfServiceException,
java.rmi.RemoteException
getContainer
Gets container and role information for a given container DN.
getExceptionList
Returns a list of Sod instances for all SOD violations found for a specific identity and type.
Syntax: Here is the method signature:
SodArray getExceptionsList(java.lang.String identity, IdentityType
identityType) throws NrfServiceException, java.rmi.RemoteException
getGroup
Gets group and role information for a given group DN.
Syntax: Here is the method signature:
Group getGroup(java.lang.String groupDn) throws NrfServiceException,
java.rmi.RemoteException
getIdentitiesInViolation
Returns a map of identities which are in violation of a given SoD.
Syntax: Here is the method signature:
IdentityTypeDnMapArray getIdentitiesInViolation(java.lang.String sodDn)
throws NrfServiceException, java.rmi.RemoteException
getIdentityRoleConflicts
Returns a list of Sod instances for all SOD conflicts found for a given list of roles for a given identity.
Syntax: Here is the method signature:
SodArray getIdentityRoleConflicts(java.lang.String identity, IdentityType
identityType, DNStringArray requestedRoles) throws NrfServiceException,
java.rmi.RemoteException
getRole
Retrieves a role object defined by a role DN. Returns several role attributes, such as name, dn,
description, role level. Returns child roles, assigned containers, and assigned groups. However, this
API does not return assigned users. If you want assigned users, use the getAssignedIdentities API
with USER for identityType and true for directAssignOnly.
Syntax: Here is the method signature:
Role getRole(java.lang.String roleDn) throws NrfServiceException,
java.rmi.RemoteException
getRoleAssignmentRequestStatusByIdentityType
Returns a list of role assignment request status instances given an identity and an identity type.
Syntax: Here is the method signature:
RoleAssignmentRequestStatusArray
getRoleAssignmentRequestStatusByIdentityType(java.lang.String identityDn,
IdentityType identityType) throws NrfServiceException,
java.rmi.RemoteException
getRoleAssignmentTypeInfo
Retrieves details about a RoleAssignmentType.
Syntax: Here is the method signature:
RoleAssignmentTypeInfo getRoleAssignmentTypeInfo(RoleAssignmentType type)
throws NrfServiceException, java.rmi.RemoteException
getRoleCategories
Gets role categories.
Syntax: Here is the method signature:
CategoryArray getRoleCategories() throws NrfServiceException,
java.rmi.RemoteException
getRoleConflicts
Returns a list of Sod instances found for all given roles. This method always returns a list.
Syntax: Here is the method signature:
SodArray getRoleConflicts(DNStringArray roles) throws NrfServiceException,
java.rmi.RemoteException
getRoleLevels
Gets the role levels.
Syntax: Here is the method signature:
getRoleLocalizedStrings
Gets role localized strings, such as names and descriptions. The method takes an integer parameter
that allows you to specify the type of the string. The number 1 indicates names; the number 2
indicates descriptions.
Syntax: Here is the method signature:
public LocalizedValue[] getRoleLocalizedStrings(DNString roleDn, int type)
throws NrfServiceException, RemoteException;
getRolesInfo
Returns a list of RoleInfo instances given a list of role DNs.
Syntax: Here is the method signature:
RoleInfoArray getRolesInfo(DNStringArray roleDns) throws
NrfServiceException, java.rmi.RemoteException
getRolesInfoByCategory
Returns a list of RoleInfo instances given a list of role category keys.
Syntax: Here is the method signature:
RoleInfoArray getRolesInfoByCategory(CategoryKeyArray roleCategoryKeys)
throws NrfServiceException, java.rmi.RemoteException
getRolesInfoByLevel
Returns a list of RoleInfo instances given a list of role levels.
Syntax: Here is the method signature:
RoleInfoArray getRolesInfoByLevel(LongArray roleLevels) throws
NrfServiceException, java.rmi.RemoteException
getTargetSourceConflicts
Returns a list of Sod instances for all SOD conflicts defined between the target role DN and the
source role DN.
Syntax: Here is the method signature:
SodArray getTargetSourceConflicts(java.lang.String targetName,
java.lang.String sourceName) throws NrfServiceException,
java.rmi.RemoteException
getVersion
Returns the version of this Web Service.
Syntax: Here is the method signature:
VersionVO getVersion() throws java.rmi.RemoteException
isUserInRole
Returns boolean flag; true if role has been assigned to a User identity.
Syntax: Here is the method signature:
boolean isUserInRole(java.lang.String userDn, java.lang.String roleDn)
modifyRole
Modifies a role definition. This method does not update localized strings. Use the
getRoleLocalizedStrings(DNString roleDn, LocalizedString[] locStrings, int strType) method to update
localized names or descriptions for a role.
A correlation ID is generated automatically for this method that uses this format:
UserApp#RemoteRoleRequest#xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
The correlation ID is used for auditing.
Syntax: Here is the method signature:
public Role modifyRole(Role role)
throws NrfServiceException, RemoteException;
modifyRoleAid
Modifies a role definition with a correlation ID that you provide. The correlation ID is used for
auditing to link a set of related roles. This method does not update localized strings. Use the
getRoleLocalizedStrings(DNString roleDn, LocalizedString[] locStrings, int strType) method to update
localized names or descriptions for a role.
Syntax: Here is the method signature:
public Role modifyRoleAid(Role role, String correlationId)
throws NrfServiceException, RemoteException;
removeRolesAid
Deletes specified roles from the Role Catalog with a correlation ID that you provide. The correlation
ID is used for auditing to link a set of related roles. This method returns an array of DNs for the
deleted roles as a confirmation.
Syntax: Here is the method signature:
public DNString[] removeRolesAid(DNString[] roleDns, String correlationId)
throws NrfServiceException, RemoteException;
requestRolesAssignment
Returns a list of request DNs created by the role assignment. Be aware that the role assignment
expires only if the role is assigned to a user and not when it is assigned to a group or a container.
If you do not want to supply date (effective or expiration) for role assignments with the
requestRolesAssignment endpoint, then you must remove these two elements from the SOAP call.
They must not be included with empty tags:
<ser:effectiveDate/>
<ser:expirationDate/>
If you want to omit the effective date or the expiration date, a request similar to the following will
work:
setRoleLocalizedStrings
Sets role localized strings, such as names and descriptions.
A correlation ID is generated automatically for this method that uses this format:
UserApp#RemoteRoleRequest#xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
The correlation ID is used for auditing.
Syntax: Here is the method signature:
public LocalizedValue[] setRoleLocalizedStrings(DNString roleDn,
LocalizedValue[] locStrings, int type)
throws NrfServiceException, RemoteException;
Approver
Class to hold the approver information for SOD or normal request approvals.
Approver constructors
The Approver class supports a single constructor.
Syntax: Here is the syntax for the constructor:
Approver()
getApproverDN
Gets the approver DN.
Syntax: Here is the method signature:
public java.lang.String getApproverDN()
getSequence
Gets the approver sequence.
Syntax: Here is the method signature:
public long getSequence()
setApproverDN
Sets the approver DN.
Syntax: Here is the method signature:
public void setApproverDN(java.lang.String approverDN)
setSequence
Sets the approver sequence.
Syntax: Here is the method signature:
public void setSequence(long sequence)
ApproverArray constructors
The ApproverArray class has two constructors.
Syntax 1: Here is the syntax for a constructor that takes no parameters:
ApproverArray()
Syntax 2: Here is the syntax for a constructor that takes an array of Attribute objects as a parameter:
ApproverArray(Approver[] ApproverVal)
getApprover
Returns an array of Approver objects.
Syntax: Here is the method signature:
Approver[] getApprover()
setApprover
Sets the array of Approver objects associated with the ApproverArray class.
Syntax: Here is the method signature:
void setApprover (Approver[] ApproverVal)
Category
Class to represent a role category.
Category constructors
The Category class supports a single constructor.
Syntax: Here is the syntax for the constructor:
Category()
getCategoryKey
Gets the category key.
Syntax: Here is the method signature:
public java.lang.String getCategoryKey()
setCategoryKey
Sets the category key.
Syntax: Here is the method signature:
public void setCategoryKey(java.lang.String categoryKey)
setCategoryLabel
Sets the category label.
Syntax: Here is the method signature:
public void setCategoryLabel(java.lang.String categoryLabel)
CategoryArray
This section provides reference information on the CategoryArray class.
CategoryArray constructors
The CategoryArray class has two constructors.
Syntax 1: Here is the syntax for a constructor that takes no parameters:
CategoryArray()
Syntax 2: Here is the syntax for a constructor that takes an array of Category objects as a parameter:
CategoryArray(Category[] CategoryVal)
getCategory
Returns an array of Category objects.
Syntax: Here is the method signature:
Category[] getCategory()
setCategory
Sets the array of Category objects associated with the CategoryArray class.
Syntax: Here is the method signature:
CategoryKey
Class to hold a Category Key.
CategoryKey constructors
The CategoryKey class has two constructors.
Syntax 1: Here is the syntax for a constructor that takes no parameters:
CategoryKey()
Syntax 2: Here is the syntax for a constructor that takes a String as a parameter:
CategoryKey(java.lang.String categoryKey)
getCategoryKey()
Gets the categoryKey.
Syntax: Here is the method signature:
public java.lang.String getCategoryKey()
setCategoryKey
Sets the category key.
Syntax: Here is the method signature:
public void setCategoryKey(java.lang.String categoryKey)
CategoryKeyArray
This section provides reference information on the CategoryKeyArray class.
CategoryKeyArray constructors
The CategoryKeyArray class has two constructors.
Syntax 1: Here is the syntax for a constructor that takes no parameters:
CategoryKeyArray()
Syntax 2: Here is the syntax for a constructor that takes an array of CategoryKey objects as a
parameter:
CategoryKeyArray(CategoryKey[] CategoryVal)
setCategorykey
Sets the array of CategoryKey objects associated with the CategoryKeyArray class.
Syntax: Here is the method signature:
void setCategorykey(CategoryKey[] CategoryKeyVal)
Configuration
Class to represent the configuration object.
Configuration constructors
The Configuration class supports a single constructor.
Syntax: Here is the syntax for the constructor:
Configuration()
getDefaultRequestDef
Gets the default request definition.
Syntax: Here is the method signature:
public java.lang.String getDefaultRequestDef()
getDefaultSODRequestDef
Gets the default SOD request definition.
Syntax: Here is the method signature:
public java.lang.String getDefaultSODRequestDef()
getRemovalGracePeriod
Gets the removal grace period.
Syntax: Here is the method signature:
public int getRemovalGracePeriod()
getRoleLevels
Gets the role levels.
Syntax: Here is the method signature:
public RoleLevelArray getRoleLevels()
getRoleRequestContainer
Gets the role request container.
Syntax: Here is the method signature:
public java.lang.String getRoleRequestContainer()
getRolesContainer
Gets the role container.
Syntax: Here is the method signature:
public java.lang.String getRolesContainer()
getSODApprovers
Gets SOD approvers.
Syntax: Here is the method signature:
public ApproverArray getSODApprovers()
getSODContainer
Gets the SOD container.
Syntax: Here is the method signature:
public java.lang.String getSODContainer()
getSODQuorum
Gets the SOD quorum amount.
Syntax: Here is the method signature:
public java.lang.String getSODContainer()
setDefaultRequestDef
Sets the default request definition.
Syntax: Here is the method signature:
public void setDefaultRequestDef(java.lang.String defaultRequestDef)
setDefaultSODRequestDef
Sets the default SOD request definition.
Syntax: Here is the method signature:
public void setDefaultSODRequestDef(java.lang.String defaultSODRequestDef)
setRemovalGracePeriod
Sets the removal grace period.
Syntax: Here is the method signature:
public void setRemovalGracePeriod(int removalGracePeriod)
setReportContainer
Sets the report container.
Syntax: Here is the method signature:
public void setReportContainer(java.lang.String reportContainer)
setRoleLevels
Sets the role levels.
Syntax: Here is the method signature:
public void setRoleLevels(RoleLevelArray roleLevels)
setRoleRequestContainer
Sets the role request container.
Syntax: Here is the method signature:
public void setRoleRequestContainer(java.lang.String roleRequestContainer)
setSODApprovers
Sets the SoD approvers.
Syntax: Here is the method signature:
public void setSODApprovers(ApproverArray sODApprovers)
setSODContainer
Sets the SoD container.
Syntax: Here is the method signature:
public void setSODContainer(java.lang.String sODContainer)
Container
Class to represent a Container object.
Container constructors
The Container class supports a single constructor.
Syntax: Here is the syntax for the constructor:
Container()
getAssociatedRoles
Gets associated roles for this identity.
Syntax: Here is the method signature:
public DNStringArray getAssociatedRoles()
getEntityKey
Gets identity entity key.
Syntax: Here is the method signature:
public java.lang.String getEntityKey()
getRoleAssignments
Gets role assignments for this identity.
Syntax: Here is the method signature:
public RoleAssignmentArray getRoleAssignments()
setAssociatedRoles
Sets the associated roles for this identity.
Syntax: Here is the method signature:
public void setAssociatedRoles(DNStringArray associatedRoles)
setEntityKey
Sets the identity entity key.
Syntax: Here is the method signature:
public void setEntityKey(java.lang.String entityKey)
setIdentityType
Sets the identity type.
Syntax: Here is the method signature:
public void setIdentityType(IdentityType identityType)
setRoleAssignments
Sets the role assignments for this identity.
Syntax: Here is the method signature:
public void setRoleAssignments(RoleAssignmentArray roleAssignments)
DNString
Class to hold a DN.
getDn
Gets the DN.
Syntax: Here is the method signature:
public java.lang.String getDn()
setDn
Sets the DN.
Syntax: Here is the method signature:
public void setDn(java.lang.String dn)
DNStringArray
This section provides reference information on the DNStringArray class.
DNStringArray constructors
The DNStringArray class has two constructors.
Syntax 1: Here is the syntax for a constructor that takes no parameters:
DNStringArray()
Syntax 2: Here is the syntax for a constructor that takes an array of DNString objects as a parameter:
DNStringArray(DNString[] DNStringVal)
getDnstring
Returns an array of DNString objects.
Syntax: Here is the method signature:
DNString[] getDnstring()
Entitlement
Class to hold Entitlement information.
Entitlement constructors
The Entitlement class supports a single constructor.
Syntax: Here is the syntax for the constructor:
Entitlement()
getEntitlementDn
Gets the entitlement DN.
Syntax: Here is the method signature:
public java.lang.String getEntitlementDn()
getEntitlementParameters
Gets the entitlement parameters.
Syntax: Here is the method signature:
public java.lang.String getEntitlementParameters()
setEntitlementDn
Sets the entitlement DN.
Syntax: Here is the method signature:
public void setEntitlementDn(java.lang.String entitlementDn)
setEntitlementParameters
Sets the entitlement parameters.
Syntax: Here is the method signature:
public void setEntitlementParameters(java.lang.String
entitlementParameters)
EntitlementArray constructors
The EntitlementArray class has two constructors.
Syntax 1: Here is the syntax for a constructor that takes no parameters:
EntitlementArray()
Syntax 2: Here is the syntax for a constructor that takes an array of Entitlement objects as a
parameter:
EntitlementArray(Entitlement[] EntitlementVal)
getEntitlement
Returns an array of Entitlement objects.
Syntax: Here is the method signature:
Entitlement[] getEntitlement()
setEntitlement
Sets the array of Entitlement objects associated with the EntitlementArray class.
Syntax: Here is the method signature:
void setEntitlement(EntitlementArray EntitlementVal)
Group
Class to represent a Group object.
Group constructors
The Group class supports a single constructor.
Syntax: Here is the syntax for the constructor:
Group()
getAssociatedRoles
Gets associated roles for this identity.
Syntax: Here is the method signature:
public DNStringArray getAssociatedRoles()
getEntityKey
Gets identity entity key.
Syntax: Here is the method signature:
public java.lang.String getEntityKey()
getIdentityType
Gets identity type.
Syntax: Here is the method signature:
public IdentityType getIdentityType()
getRoleAssignments
Gets role assignments for this identity.
Syntax: Here is the method signature:
public RoleAssignmentArray getRoleAssignments()
setAssociatedRoles
Sets the associated roles for this identity.
Syntax: Here is the method signature:
public void setAssociatedRoles(DNStringArray associatedRoles)
setDescription
Sets the group description.
Syntax: Here is the method signature:
public void setDescription(java.lang.String description)
setEntityKey
Sets the identity entity key.
Syntax: Here is the method signature:
public void setEntityKey(java.lang.String entityKey)
setRoleAssignments
Sets the role assignments for this identity.
Syntax: Here is the method signature:
public void setRoleAssignments(RoleAssignmentArray roleAssignments)
IdentityType
An JAX-RPC friendly representation of com.novell.idm.nrf.api.IdentityType.
Type Name
IdentityType constructors
The IdentityType class has two constructors.
Syntax 1: Here is the syntax for a constructor that takes no parameters:
IdentityType()
Syntax 2: Here is the syntax for a constructor that takes a String as a parameter:
IdentityType(java.lang.String value)
convertToAPI
Reconstructs an API representation object from an RPC representation.
Syntax: Here is the method signature:
public com.novell.idm.nrf.api.IdentityType convertToAPI()
equals
This is an implementation of equals(). This implementation overrides the equals() method in
java.lang.Object.
Syntax: Here is the method signature:
public boolean equals(java.lang.Object obj)
fromValue
This method is for WSSDK serialization.
Syntax: Here is the method signature:
public static IdentityType fromValue(java.lang.String value)
getValue
Gets the type.
Syntax: Here is the method signature:
public java.lang.String getValue()
hashCode
This is an implementation of hashCode(). This implementation overrides the hashCode() method in
java.lang.Object.
Syntax: Here is the method signature:
public int hashCode()
setValue
Sets the type.
Syntax: Here is the method signature:
public void setValue(java.lang.String type)
toString
Implementation of toString() that returns a string representation of the class.
IdentityTypeDnMap
Class to represent DNs grouped by identity type. Used for SOD violations.
IdentityTypeDnMap
The IdentityTypeDnMap class has two constructors.
Syntax 1: Here is the syntax for a constructor that takes no parameters:
IdentityTypeDnMap()
Syntax 2: Here is the syntax for a constructor that takes a String as a parameter:
IdentityTypeDnMap(IdentityType identityType, DNStringArray dns)
getDns
Gets the DNs associated with the identity type.
Syntax: Here is the method signature:
public DNStringArray getDns()
getIdentityType
Gets identity type (USER, ROLE, GROUP, CONTAINER).
Syntax: Here is the method signature:
public IdentityType getIdentityType()
setDns
Sets the DNs to associate with the identity type.
Syntax: Here is the method signature:
public void setDns(DNStringArray dns)
setIdentityType
Sets the identity type (USER, ROLE, GROUP, or CONTAINER).
Syntax: Here is the method signature:
public void setIdentityType(IdentityType identityType)
IdentityTypeDnMapArray constructors
The IdentityTypeDnMapArray class has two constructors.
Syntax 1: Here is the syntax for a constructor that takes no parameters:
IdentityTypeDnMapArray()
Syntax 2: Here is the syntax for a constructor that takes an array of IdentityTypeDnMap objects as a
parameter:
IdentityTypeDnMapArray(IdentityTypeDnMap[] IdentityTypeDnMapVal)
getIdentitytypednmap
Returns an array of IdentityTypeDnMap objects.
Syntax: Here is the method signature:
IdentityTypeDnMap[] getIdentitytypednmap()
setIdentitytypednmap
Sets the array of IdentityTypeDnMap objects associated with the IdentityTypeDnMapArray class.
Syntax: Here is the method signature:
void setIdentitytypednmap(IdentityTypeDnMap[] IdentityTypeDnMapVal)
LocalizedValue
The LocalizedValue class has been added to support management of localized strings for role
definitions.
getValue
Returns a localized string value.
Syntax: Here is the method signature:
public String getValue()
setValue
Sets a localized string value.
Syntax: Here is the method signature:
public void setValue(final String value)
setLocale
Sets a string representation of the Locale object.
Syntax: Here is the method signature:
public void setLocale()
LongArray
This section provides reference information on the LongArray class.
LongArray constructors
The LongArray class has two constructors.
Syntax 1: Here is the syntax for a constructor that takes no parameters:
LongArray()
Syntax 2: Here is the syntax for a constructor that takes an array of Long objects as a parameter:
LongArray(long[] LongVal)
getLong
Returns an array of Long objects.
Syntax: Here is the method signature:
long[] getLong()
setLong
Sets the array of long objects associated with the LongArray class.
Syntax: Here is the method signature:
void setLong(LongArray LongVal)
NrfServiceException
This is the exception thrown by the remote Roles Web Service.
getReason
Returns the reason for the exception.
Syntax: Here is the method signature:
public java.lang.String getReason()
setReason
Sets the reason for the exception.
Syntax: Here is the method signature:
public void setReason(java.lang.String reason)
RequestCategoryType
An JAX-RPC friendly representation of com.novell.idm.nrf.persist.RequestCategoryType.
Type Name
equals
Implementation of equals(). This implementation overrides the equals() method in java.lang.Object.
Syntax: Here is the method signature:
public boolean equals(java.lang.Object obj)
fromRPC
Reconstructs an API representation object from an RPC representation.
Syntax: Here is the method signature:
public com.novell.idm.nrf.persist.RequestCategoryType fromRPC() throws
com.novell.idm.nrf.exception.NrfException
fromValue
This method is for WSSDK serialization.
Syntax: Here is the method signature:
public static RequestCategoryType fromValue(java.lang.String value)
getValue
Gets the type.
Syntax: Here is the method signature:
public java.lang.String getValue()
hashCode
This implementation overrides the hashCode() method in java.lang.Object.
Syntax: Here is the method signature:
public int hashCode()
toRPC
Constructs an RPC friendly representation off of an API object.
Syntax: Here is the method signature:
public static RequestCategoryType
toRPC(com.novell.idm.nrf.persist.RequestCategoryType type)
toString
Implementation of toString() that returns a string representation of the class.
Syntax: Here is the method signature:
public java.lang.String toString()
RequestStatus
An JAX-RPC friendly representation of com.novell.idm.nrf.persist.RequestStatus.
Type Name
RequestStatus constructors
The RequestStatus class has two constructors.
Syntax 1: Here is the syntax for a constructor that takes no parameters:
RequestStatus()
Syntax 2: Here is the syntax for a constructor that takes a String as a parameter:
RequestStatus(java.lang.String value)
equals
Implementation of equals().
Syntax: Here is the method signature:
public boolean equals(java.lang.Object obj)
fromRPC
Reconstructs an API representation object from an RPC representation.
Syntax: Here is the method signature:
public com.novell.idm.nrf.persist.RequestStatus fromRPC() throws
com.novell.idm.nrf.exception.NrfException
fromValue
This method is for WSSDK serialization.
Syntax: Here is the method signature:
public static RequestStatus fromValue(java.lang.String value)
getValue
Gets the type.
Syntax: Here is the method signature:
public java.lang.String getValue()
setValue
Sets the type.
Syntax: Here is the method signature:
public void setValue(java.lang.String type)
toRPC
Constructs an RPC friendly representation off of an API object.
Syntax: Here is the method signature:
public static RequestStatus toRPC(com.novell.idm.nrf.persist.RequestStatus
type)
toString
Implementation of toString() that returns a string representation of the class.
Syntax: Here is the method signature:
public java.lang.String toString()
ResourceAssociation
Supporting class that holds information about resource associations for a role.
getRole
Returns the DN for the role involved in the association.
public String getRole()
setRole
Sets the DN for the role involved in the association.
public void setRole(String role)
getEntityKey
Returns the entity key for the association.
setEntityKey
Sets the entity key for the association.
public void setEntityKey(String entityKey)
getResource
Returns the DN for the resource involved in the association.
public String getResource()
setResource
Sets the DN for the resource involved in the association.
public void setResource(String resource)
getDynamicParameters
Returns the list of dynamic parameters for the resource.
public DynamicParameter[] getDynamicParameters()
setDynamicParameters
Sets the list of dynamic parameters for the resource.
public void setDynamicParameters(DynamicParameter[] parameterValues)
getLocalizedDescriptions
Returns the list of localized descriptions.
public LocalizedValue[] getLocalizedDescriptions()
setLocalizedDescriptions
Sets the list of localized descriptions.
public void setLocalizedDescriptions(LocalizedValue[] descriptions)
getApprovalOverride
Returns the boolean flag indicating whether the role approval process overrides the resource
approval process.
public boolean getApprovalOverride()
getStatus
Returns the status of the association.
public int getStatus()
setStatus
Sets the status of the association.
public void setStatus(int status)
toString
Converts the resource association to a string.
public String toString()
Role
Value class to hold the role information.
Role constructors
The Role class supports a single constructor.
Syntax: Here is the syntax for the constructor:
Role()
getApprovers
Gets the approvers of the role approval.
Syntax: Here is the method signature:
public ApproverArray getApprovers()
getAssociatedRoles
Gets the associated roles.
Syntax: Here is the method signature:
public DNStringArray getAssociatedRoles()
getDescription
Gets the role description.
Syntax: Here is the method signature:
public java.lang.String getDescription()
getEntitlementRef
Gets the entitlement references.
Syntax: Here is the method signature:
public EntitlementArray getEntitlementRef()
getEntityKey
Gets the role entity key.
Syntax: Here is the method signature:
public java.lang.String getEntityKey()
getImplicitContainers
Gets the implicit container DNs.
Syntax: Here is the method signature:
public DNStringArray getImplicitContainers()
getImplicitGroups
Gets implicit group DNs.
Syntax: Here is the method signature:
public DNStringArray getImplicitGroups()
getName
Gets the role name.
Syntax: Here is the method signature:
public java.lang.String getName()
getParentRoles
Gets the parent roles.
Syntax: Here is the method signature:
public DNStringArray getParentRoles()
getQuorum
Gets the quorum amount.
Syntax: Here is the method signature:
public java.lang.String getQuorum()
getRequestDef
Gets the request definition for approval processing.
Syntax: Here is the method signature:
public java.lang.String getRequestDef()
getRoleAssignments
Gets the role assignments.
Syntax: Here is the method signature:
public RoleAssignmentArray getRoleAssignments()
getRoleCategoryKeys
Gets the role category keys.
Syntax: Here is the method signature:
public CategoryKeyArray getRoleCategoryKeys()
getRoleLevel
Gets the role level object.
Syntax: Here is the method signature:
public RoleLevel getRoleLevel()
setApprovers
Sets the approvers for role approval processing.
Syntax: Here is the method signature:
public void setApprovers(ApproverArray approvers)
setAssociatedRoles
Sets the associated roles.
Syntax: Here is the method signature:
public void setAssociatedRoles(DNStringArray associatedRoles)
setChildRoles
Sets the children roles.
Syntax: Here is the method signature:
public void setChildRoles(DNStringArray childRoles)
setDescription
Sets the role description.
Syntax: Here is the method signature:
public void setDescription(java.lang.String description)
setEntitlementRef
Sets the entitlement references.
Syntax: Here is the method signature:
public void setEntitlementRef(EntitlementArray entitlementRef)
setEntityKey
Sets the role entity key.
Syntax: Here is the method signature:
public void setEntityKey(java.lang.String entityKey)
setImplicitGroups
Sets the implicit group DNs.
Syntax: Here is the method signature:
public void setImplicitGroups(DNStringArray implicitGroups)
setName
Sets the role name.
Syntax: Here is the method signature:
public void setName(java.lang.String name)
setOwners
Sets the owner DNs.
Syntax: Here is the method signature:
public void setOwners(DNStringArray owners)
setParentRoles
Sets the parent roles.
Syntax: Here is the method signature:
public void setParentRoles(DNStringArray parentRoles)
setQuorum
Sets the quorum amount.
Syntax: Here is the method signature:
public void setQuorum(java.lang.String quorum)
setRequestDef
Sets the request definition for approval processing.
Syntax: Here is the method signature:
public void setRequestDef(java.lang.String requestDef)
setRoleCategoryKeys
Sets the role category keys.
Syntax: Here is the method signature:
public void setRoleCategoryKeys(CategoryKeyArray roleCategoryKeys)
setRoleLevel
Sets the role level object.
Syntax: Here is the method signature:
public void setRoleLevel(RoleLevel roleLevel)
setSystemRole
Sets the system role flag.
Syntax: Here is the method signature:
public void setSystemRole(boolean systemRole)
RoleAssignment
Value class to hold role assignment information.
RoleAssignment
The RoleAssignment class supports a single constructor.
Syntax: Here is the syntax for the constructor:
RoleAssignment()
getAssignmentType
Gets the role assignment type.
Syntax: Here is the method signature:
public RoleAssignmentType getAssignmentType()
getEffectiveDate
Gets the effective date.
Syntax: Here is the method signature:
public java.util.Date getEffectiveDate()
getExpirationDate
Gets the expiration date.
Syntax: Here is the method signature:
public java.util.Date getExpirationDate()
getExplicitIdentities
Gets the explicit identities DNs.
Syntax: Here is the method signature:
public DNStringArray getExplicitIdentities()
getRole
Gets the role associated with the assignment.
Syntax: Here is the method signature:
public java.lang.String getRole()
setAssignmentType
Sets the role assignment type.
Syntax: Here is the method signature:
public void setAssignmentType(RoleAssignmentType assignmentType)
setCauseIdentities
Sets the cause identities DNs.
Syntax: Here is the method signature:
public void setCauseIdentities(IdentityTypeDnMapArray causeIdentities)
setExpirationDate
Sets the expiration date.
Syntax: Here is the method signature:
public void setExpirationDate(java.util.Date expirationDate)
setExplicitIdentities
Sets the explicit identities DNs.
Syntax: Here is the method signature:
public void setExplicitIdentities(DNStringArray explicitIdentities)
setRole
Sets role associated with this assignment.
Syntax: Here is the method signature:
public void setRole(java.lang.String role)
RoleAssignmentArray
This section provides reference information on the RoleAssignmentArray class.
RoleAssignmentArray constructors
The RoleAssignmentArray class has two constructors.
Syntax 1: Here is the syntax for a constructor that takes no parameters:
RoleAssignmentArray()
Syntax 2: Here is the syntax for a constructor that takes an array of Attribute objects as a parameter:
RoleAssignmentArray(RoleAssignment[] RoleAssignmentVal)
getRoleassignment
Returns an array of RoleAssignment objects.
Syntax: Here is the method signature:
setRoleassignment
Sets the array of RoleAssignment objects associated with the RoleAssignmentArray class.
Syntax: Here is the method signature:
void setRoleassignment (RoleAssignment[] RoleAssignmentVal)
RoleAssignmentActionType
An JAX-RPC friendly representation of com.novell.idm.nrf.RoleAssignmentActionType.
Type Name
RoleAssignmentActionType constructors
The RoleAssignmentActionType class has two constructors.
Syntax 1: Here is the syntax for a constructor that takes no parameters:
RoleAssignmentActionType()
Syntax 2: Here is the syntax for a constructor that takes a String as a parameter:
RoleAssignmentActionType(java.lang.String value)
equals
Implementation of equals().
Syntax: Here is the method signature:
public boolean equals(java.lang.Object obj)
fromRPC
Reconstructs an API representation object from an RPC representation.
Syntax: Here is the method signature:
public com.novell.idm.nrf.RoleAssignmentActionType fromRPC()
getValue
Gets the type.
Syntax: Here is the method signature:
public java.lang.String getValue()
hashCode
This is an implementation of hashCode(). This implementation overrides the hashCode() method in
java.lang.Object.
Syntax: Here is the method signature:
public int hashCode()
setValue
Sets the type.
Syntax: Here is the method signature:
public void setValue(java.lang.String type)
toRPC
Constructs an RPC friendly representation off of an API object.
Syntax: Here is the method signature:
public static RoleAssignmentActionType
toRPC(com.novell.idm.nrf.RoleAssignmentActionType type)
toString
Implementation of toString() that returns a string representation of the class.
Syntax: Here is the method signature:
public java.lang.String toString()
RoleAssignmentRequest
Class to represent a role assignment request.
getActionType
Gets role assignment type (grant, revoke, extend).
Syntax: Here is the method signature:
public RoleAssignmentActionType getActionType()
getAssignmentType
Gets the role assignment type.
Syntax: Here is the method signature:
public RoleAssignmentType getAssignmentType()
getCorrelationID
Gets the correlation ID.
Syntax: Here is the method signature:
public java.lang.String getCorrelationID()
getEffectiveDate
Gets the effective date.
Syntax: Here is the method signature:
public java.util.Date getEffectiveDate()
getExpirationDate
Gets the expiration date.
Syntax: Here is the method signature:
public java.util.Date getExpirationDate()
getIdentity
Gets the identity to assign roles to.
Syntax: Here is the method signature:
public java.lang.String getIdentity()
getRoles
Gets the roles to assign to the identity.
Syntax: Here is the method signature:
public DNStringArray getRoles()
getSodOveridesRequested
Gets the SOD DNs and justification to override.
Syntax: Here is the method signature:
public SodJustificationArray getSodOveridesRequested()
setActionType
Sets the action type (grant, revoke, extend).
Syntax: Here is the method signature:
public void setActionType(RoleAssignmentActionType actionType)
setAssignmentType
Sets the role assignment type.
Syntax: Here is the method signature:
public void setAssignmentType(RoleAssignmentType assignmentType)
setCorrelationID
Sets the correlation ID.
Syntax: Here is the method signature:
public void setCorrelationID(java.lang.String correlationID)
setEffectiveDate
Sets the effective date.
Syntax: Here is the method signature:
public void setEffectiveDate(java.util.Date effectiveDate)
setIdentity
Sets the identity to assign roles to.
Syntax: Here is the method signature:
public void setIdentity(java.lang.String identity)
setReason
Sets the reason for the role assignment.
Syntax: Here is the method signature:
public void setReason(java.lang.String reason)
setRoles
Sets the roles to assign to the identity.
Syntax: Here is the method signature:
public void setRoles(DNStringArray roles)
setSodOveridesRequested
Sets the SOD DNs and justification to override.
Syntax: Here is the method signature:
public void setSodOveridesRequested(SodJustificationArray
sodOveridesRequested)
RoleAssignmentRequestStatus
This class represents the status of a role assignment.
RoleAssignmentRequestStatus
The RoleAssignmentRequestStatus class supports a single constructor.
Syntax: Here is the syntax for the constructor:
RoleAssignmentRequestStatus()
getCorrelationId
Gets the correlation ID.
Syntax: Here is the method signature:
public java.lang.String getCorrelationId()
getEffectiveDate
Gets the effective date.
Syntax: Here is the method signature:
public java.util.Date getEffectiveDate()
getEntityKey
Gets the entity key.
Syntax: Here is the method signature:
public java.lang.String getEntityKey()
getExpirationDate
Gets the expiration date.
Syntax: Here is the method signature:
public java.util.Date getExpirationDate()
getReason
Gets the reason for the role assignment.
Syntax: Here is the method signature:
public java.lang.String getReason()
getRequestDate
Gets the request date.
Syntax: Here is the method signature:
public java.util.Date getRequestDate()
getSource
Gets the source Role DN.
Syntax: Here is the method signature:
public java.lang.String getSource()
getStatus
Gets the request status.
Syntax: Here is the method signature:
public RequestStatus getStatus()
getTarget
Gets the targeted identity DN.
Syntax: Here is the method signature:
public java.lang.String getTarget()
setCategory
Sets the request category.
Syntax: Here is the method signature:
public void setCategory(RequestCategoryType category)
setCorrelationId
Sets the correlation ID.
Syntax: Here is the method signature:
public void setCorrelationId(java.lang.String correlationId)
setEffectiveDate
Sets the effective date.
Syntax: Here is the method signature:
public void setEffectiveDate(java.util.Date effectiveDate)
setExpirationDate
Sets the expiration date.
Syntax: Here is the method signature:
public void setExpirationDate(java.util.Date expirationDate)
setReason
Sets the reason for the role assignment.
Syntax: Here is the method signature:
public void setReason(java.lang.String reason)
setRequestDate
Sets the request date.
Syntax: Here is the method signature:
public void setRequestDate(java.util.Date requestDate)
setRequester
Sets the requester DN.
Syntax: Here is the method signature:
public void setRequester(java.lang.String requester)
setSource
Sets the source Role DN.
Syntax: Here is the method signature:
public void setSource(java.lang.String source)
setStatus
Sets the request status.
Syntax: Here is the method signature:
public void setStatus(RequestStatus status)
RoleAssignmentType
An JAX-RPC friendly representation of com.novell.idm.nrf.RoleAssignmentType.
Type Name
RoleAssignmentType constructors
The CategoryKey class has two constructors.
Syntax 1: Here is the syntax for a constructor that takes no parameters:
CategoryKey()
Syntax 2: Here is the syntax for a constructor that takes a String as a parameter:
CategoryKey(java.lang.String categoryKey)
convertToAPI
Reconstructs an API representation object from an RPC representation.
Syntax: Here is the method signature:
public com.novell.idm.nrf.RoleAssignmentType convertToAPI()
convertToRPC
Constructs an RPC friendly representation off of an API object.
Syntax: Here is the method signature:
public static RoleAssignmentType
convertToRPC(com.novell.idm.nrf.RoleAssignmentType type)
fromValue
This method is for WSSDK serialization.
Syntax: Here is the method signature:
public static RoleAssignmentType fromValue(java.lang.String value)
getValue
Gets the type.
Syntax: Here is the method signature:
public java.lang.String getValue()
hashCode
This is an implementation of hashCode(). This implementation overrides the hashCode() method in
java.lang.Object.
Syntax: Here is the method signature:
public int hashCode()
setValue
Sets the type.
Syntax: Here is the method signature:
public void setValue(java.lang.String type)
toString
Implementation of toString() that returns a string representation of the class.
Syntax: Here is the method signature:
public java.lang.String toString()
RoleAssignmentTypeInfo
An JAX-RPC friendly representation of the details of the com.novell.idm.nrf.RoleAssignmentType
enumeration.
convertToRPC
Constructs an RPC friendly representation from an API object.
Syntax: Here is the method signature:
public static RoleAssignmentTypeInfo
convertToRPC(com.novell.idm.nrf.RoleAssignmentType type)
getIdentityType
Returns the JAX-RPC friendly identity type.
Syntax: Here is the method signature:
public IdentityType getIdentityType()
getSubtreeIncluded
Determines whether the sub is included.
Syntax: Here is the method signature:
public boolean getSubtreeIncluded()
getSupportsApproval
Determines whether the assignment supports approval.
Syntax: Here is the method signature:
public boolean getSupportsApproval()
getSupportsEffectiveDate
Determines whether the assignment supports an effective date.
Syntax: Here is the method signature:
public boolean getSupportsEffectiveDate()
getSupportsExpiration
Determines whether the assignment supports expiration.
Syntax: Here is the method signature:
getSupportsSODApproval
Determines whether the assignment supports SOD approval.
Syntax: Here is the method signature:
public boolean getSupportsSODApproval()
setIdentityType
Sets the JAX-RPC friendly identity type.
Syntax: Here is the method signature:
public void setIdentityType(IdentityType type)
setSubtreeIncluded
Sets whether the sub is included.
Syntax: Here is the method signature:
public void setSubtreeIncluded(boolean bool)
setSupportsApproval
Sets whether the assignment supports approval.
Syntax: Here is the method signature:
public void setSupportsApproval(boolean bool)
setSupportsEffectiveDate
Sets whether the assignment supports effective date.
Syntax: Here is the method signature:
public void setSupportsEffectiveDate(boolean bool)
setSupportsExpiration
Sets whethers the assignment supports expiration.
Syntax: Here is the method signature:
public void setSupportsExpiration(boolean bool)
setSupportsSODApproval
Sets whether the assignment supports SOD approval.
RoleInfo
Value class to hold main role information. This is a small subset of the role value class.
RoleInfo constructors
The RoleInfo class supports a single constructor.
Syntax: Here is the syntax for the constructor:
RoleInfo()
getDescription
Gets the role description.
Syntax: Here is the method signature:
public java.lang.String getDescription()
getEntityKey
Gets the role entity key.
Syntax: Here is the method signature:
public java.lang.String getEntityKey()
getName
Gets the role name.
Syntax: Here is the method signature:
public java.lang.String getName()
getRoleCategoryKeys
Gets the role category keys.
Syntax: Here is the method signature:
public CategoryKeyArray getRoleCategoryKeys()
getRoleLevel
Gets the role level object.
Syntax: Here is the method signature:
setDescription
Sets the role description.
Syntax: Here is the method signature:
public void setDescription(java.lang.String description)
setEntityKey
Sets the role entity key.
Syntax: Here is the method signature:
public void setEntityKey(java.lang.String entityKey)
setName
Sets the role name.
Syntax: Here is the method signature:
public void setName(java.lang.String name)
setRoleCategoryKeys
Sets the role category keys.
Syntax: Here is the method signature:
public void setRoleCategoryKeys(CategoryKeyArray roleCategoryKeys)
setRoleLevel
Sets role level object.
Syntax: Here is the method signature:
public void setRoleLevel(RoleLevel roleLevel)
RoleInfoArray
This section provides reference information on the RoleInfoArray class.
RoleInfoArray constructors
The RoleInfoArray class has two constructors.
Syntax 1: Here is the syntax for a constructor that takes no parameters:
RoleInfoArray()
getRoleinfo
Returns an array of RoleInfo objects.
Syntax: Here is the method signature:
RoleInfo[] getRoleinfo()
setRoleinfo
Sets the array of RoleInfo objects associated with the RoleInfoArray class.
Syntax: Here is the method signature:
void setRoleinfo (RoleInfo[] RoleInfoVal)
RoleLevel
This class represent a role level.
RoleLevel constructors
The RoleLevel class supports a single constructor.
Syntax: Here is the syntax for the constructor:
RoleLevel()
getContainer
Gets the role level container.
Syntax: Here is the method signature:
public java.lang.String getContainer()
getDescription
Gets the role level description.
Syntax: Here is the method signature:
public java.lang.String getDescription()
getLevel
Gets the role level.
Syntax: Here is the method signature:
getName
Gets the role level name.
Syntax: Here is the method signature:
public java.lang.String getName()
setContainer
Sets the role level container.
Syntax: Here is the method signature:
public void setContainer(java.lang.String container)
setDescription
Sets the role level description.
Syntax: Here is the method signature:
public void setDescription(java.lang.String description)
setLevel
Sets the role level.
Syntax: Here is the method signature:
public void setLevel(long level)
setName
Sets the role level name.
Syntax: Here is the method signature:
public void setName(java.lang.String name)
RoleLevelArray
This section provides reference information on the RoleLevelArray class.
RoleLevelArray constructors
The RoleLevelArray class has two constructors.
Syntax 1: Here is the syntax for a constructor that takes no parameters:
RoleLevelArray()
getRolelevel
Returns an array of RoleLevel objects.
Syntax: Here is the method signature:
RoleLevel[] getRolelevel()
setRolelevel
Sets the array of RoleLevel objects associated with the RoleLevelArray class.
Syntax: Here is the method signature:
void setRolelevel (RoleLevel[] RoleLevelVal)
RoleRequest
The Role Request class has been added to support the creation of roles. The Role Request class is a
value class used to hold information about a request to create a role.
getName
Gets the role name.
Syntax: Here is the method signature:
public String getName()
getDescription
Gets the role description.
Syntax: Here is the method signature:
public String getDescription()
getEntityKey
Gets the entity key for the role.
Syntax: Here is the method signature:
public String getEntityKey()
getRoleLevel
Gets the role level object.
getRoleCategoryKeys
Gets the role category keys.
Syntax: Here is the method signature:
public CategoryKey[] getRoleCategoryKeys()
getQuorum
Gets the quorum amount.
Syntax: Here is the method signature:
public String getQuorum()
getRequestDef
Gets the provisioning request definition for approval processing.
Syntax: Here is the method signature:
public String getRequestDef()
getApprovers
Gets the approvers for the role definition.
Syntax: Here is the method signature:
public Approver[] getApprovers()
getOwners
Gets the owner DNs.
Syntax: Here is the method signature:
public DNString[] getOwners()
getRoleAssignments
Gets the associated roles.
Syntax: Here is the method signature:
public String getRoleAssignments()
getContainer
Gets the name of the role container.
Syntax: Here is the method signature:
public String getContainer()
setName
Sets the role name.
Syntax: Here is the method signature:
public void setName()
setDescription
Sets the role description.
Syntax: Here is the method signature:
public void setDescription()
setEntityKey
Sets the entity key for the role.
Syntax: Here is the method signature:
public void setEntityKey()
setRoleLevel
Sets the role level object.
Syntax: Here is the method signature:
public void setRoleLevel()
setRoleCategoryKeys
Sets the role category keys.
Syntax: Here is the method signature:
public void setRoleCategoryKeys()
setRequestDef
Sets the provisioning request definition for approval processing.
Syntax: Here is the method signature:
public void setRequestDef()
setApprovers
Sets the approvers for role approval processing.
Syntax: Here is the method signature:
public void setApprovers()
setOwners
Sets the owner DNs.
Syntax: Here is the method signature:
public void setOwners()
setSystemRole
Sets the system role flag, which determines whether this is a system role.
Syntax: Here is the method signature:
public void setSystemRole()
setContainer
Sets the role container.
Syntax: Here is the method signature:
public void setContainer()
RoleServiceDelegate
Delegate class to perform the actual call to the API layer. Should be used by all skeleton classes.
findSodByExample
Finds all SoD objects based on the search criteria in the given SOD object.
Syntax: Here is the method signature:
SodArray findSodByExample(Sod sod) throws NrfServiceException,
java.rmi.RemoteException
findSodByExampleWithOperator
Finds all SoD objects based on the search criteria found in the given SOD object
Syntax: Here is the method signature:
SodArray findSodByExampleWithOperator(Sod searchCriteria, boolean
useAndForMultiValueSearch) throws NrfServiceException,
java.rmi.RemoteException
findSodById
Find by key.
Syntax: Here is the method signature:
Sod findSodById(java.lang.String entityKey) throws NrfServiceException,
java.rmi.RemoteException
getAssignedIdentities
Returns a list of role assignments for a specified identity.
Syntax: Here is the method signature:
RoleAssignmentArray getAssignedIdentities(java.lang.String identityDn,
IdentityType type, boolean direct) throws NrfServiceException,
java.rmi.RemoteException
getConfiguration
Returns the role system configuration defined in the role vault root (nrfConfiguration)
Syntax: Here is the method signature:
Configuration getConfiguration() throws NrfServiceException,
java.rmi.RemoteException
getExceptionList
Returns a list of Sod instances for all SOD violations found for a specific identity and type.
Syntax: Here is the method signature:
SodArray getExceptionsList(java.lang.String identity, IdentityType
identityType) throws NrfServiceException, java.rmi.RemoteException
getGroup
Gets group and role information for a given group DN.
Syntax: Here is the method signature:
Group getGroup(java.lang.String groupDn) throws NrfServiceException,
java.rmi.RemoteException
getIdentitiesInViolation
Returns a map of identities which are in violation of a given SoD.
Syntax: Here is the method signature:
IdentityTypeDnMapArray getIdentitiesInViolation(java.lang.String sodDn)
throws NrfServiceException, java.rmi.RemoteException
getIdentityRoleConflicts
Returns a list of Sod instances for all SOD conflicts found for a given list of roles for a given identity.
Syntax: Here is the method signature:
SodArray getIdentityRoleConflicts(java.lang.String identity, IdentityType
identityType, DNStringArray requestedRoles) throws NrfServiceException,
java.rmi.RemoteException
getRole
Retrieves a role object defined by a role DN
Syntax: Here is the method signature:
Role getRole(java.lang.String roleDn) throws NrfServiceException,
java.rmi.RemoteException
getRoleAssignmentRequestStatusByIdentityType
Returns a list of role assignment request status instances given an identity and an identity type.
Syntax: Here is the method signature:
RoleAssignmentRequestStatusArray
getRoleAssignmentRequestStatusByIdentityType(java.lang.String identityDn,
IdentityType identityType) throws NrfServiceException,
java.rmi.RemoteException
getRoleAssignmentTypeInfo
Retrieves details about a RoleAssignmentType.
Syntax: Here is the method signature:
RoleAssignmentTypeInfo getRoleAssignmentTypeInfo(RoleAssignmentType type)
throws NrfServiceException, java.rmi.RemoteException
getRoleCategories
Gets role categories.
Syntax: Here is the method signature:
CategoryArray getRoleCategories() throws NrfServiceException,
java.rmi.RemoteException
getRoleConflicts
Returns a list of Sod instances found for all given roles. This method always returns a list.
Syntax: Here is the method signature:
SodArray getRoleConflicts(DNStringArray roles) throws NrfServiceException,
java.rmi.RemoteException
getRoleLevels
Gets role levels.
Syntax: Here is the method signature:
getRolesInfo
Returns a list of RoleInfo instances given a list of role DNs.
Syntax: Here is the method signature:
RoleInfoArray getRolesInfo(DNStringArray roleDns) throws
NrfServiceException, java.rmi.RemoteException
getRolesInfoByCategory
Returns a list of RoleInfo instances given a list of role category keys.
Syntax: Here is the method signature:
RoleInfoArray getRolesInfoByCategory(CategoryKeyArray roleCategoryKeys)
throws NrfServiceException, java.rmi.RemoteException
getRolesInfoByLevel
Returns a list of RoleInfo instances given a list of role levels.
Syntax: Here is the method signature:
RoleInfoArray getRolesInfoByLevel(LongArray roleLevels) throws
NrfServiceException, java.rmi.RemoteException
getTargetSourceConflicts
Returns a list of Sod instances for all SOD conflicts defined between the target role DN and the
source role DN.
Syntax: Here is the method signature:
SodArray getTargetSourceConflicts(java.lang.String targetName,
java.lang.String sourceName) throws NrfServiceException,
java.rmi.RemoteException
getUser
Gets user info including all role assignments for a given user DN stored in a UserIdentity object.
Syntax: Here is the method signature:
User getUser(java.lang.String userDn) throws NrfServiceException,
java.rmi.RemoteException
getVersion
Returns the version of this Web Service.
isUserInRole
Returns boolean flag; true if role has been assigned to a User identity
Syntax: Here is the method signature:
boolean isUserInRole(java.lang.String userDn, java.lang.String roleDn)
requestRoleAssignment
Returns a list of request DNs created by the role assignment. Be aware that the role assignment
expires only if the role is assigned to a user and not when it is assigned to a group or a container.
Syntax: Here is the method signature:
DNStringArray requestRolesAssignment(RoleAssignmentRequest
roleAssignmentRequest) throws NrfServiceException,
java.rmi.RemoteException
RoleServiceSkeletonImpl
Class to represent the skeleton server side implementation of the Role Based offered services.
RoleServiceSkeletonImpl
The RoleServiceSkeletonImpl class supports a single constructor.
Syntax: Here is the syntax for the constructor:
RoleServiceSkeletonImpl()
findSodByExample
Finds all SoD objects based on the search criteria in the given SOD object.
Syntax: Here is the method signature:
SodArray findSodByExample(Sod sod) throws NrfServiceException,
java.rmi.RemoteException
findSodByExampleWithOperator
Finds all SoD objects based on the search criteria found in the given SOD object
Syntax: Here is the method signature:
SodArray findSodByExampleWithOperator(Sod searchCriteria, boolean
useAndForMultiValueSearch) throws NrfServiceException,
java.rmi.RemoteException
getAssignedIdentities
Returns a list of role assignments for a specified identity.
Syntax: Here is the method signature:
RoleAssignmentArray getAssignedIdentities(java.lang.String identityDn,
IdentityType type, boolean direct) throws NrfServiceException,
java.rmi.RemoteException
getConfiguration
Returns the role system configuration defined in the role vault root (nrfConfiguration)
Syntax: Here is the method signature:
Configuration getConfiguration() throws NrfServiceException,
java.rmi.RemoteException
getContainer
Gets container and role information for a given container DN.
Syntax: Here is the method signature:
Container getContainer(java.lang.String containerDn)
throws NrfServiceException, java.rmi.RemoteException
getExceptionList
Returns a list of Sod instances for all SOD violations found for a specific identity and type.
Syntax: Here is the method signature:
SodArray getExceptionsList(java.lang.String identity, IdentityType
identityType) throws NrfServiceException, java.rmi.RemoteException
getGroup
Gets group and role information for a given group DN.
Syntax: Here is the method signature:
Group getGroup(java.lang.String groupDn) throws NrfServiceException,
java.rmi.RemoteException
getIdentityRoleConflicts
Returns a list of Sod instances for all SOD conflicts found for a given list of roles for a given identity.
Syntax: Here is the method signature:
SodArray getIdentityRoleConflicts(java.lang.String identity, IdentityType
identityType, DNStringArray requestedRoles) throws NrfServiceException,
java.rmi.RemoteException
getRole
Retrieves a role object defined by a role DN
Syntax: Here is the method signature:
Role getRole(java.lang.String roleDn) throws NrfServiceException,
java.rmi.RemoteException
getRoleAssignmentRequestStatus
Returns a list of role assignment request status instances given a correlation ID.
Syntax: Here is the method signature:
RoleAssignmentRequestStatusArray
getRoleAssignmentRequestStatus(java.lang.String correlationId) throws
NrfServiceException, java.rmi.RemoteException
getRoleAssignmentRequestStatusByIdentityType
Returns a list of role assignment request status instances given an identity and an identity type.
Syntax: Here is the method signature:
RoleAssignmentRequestStatusArray
getRoleAssignmentRequestStatusByIdentityType(java.lang.String identityDn,
IdentityType identityType) throws NrfServiceException,
java.rmi.RemoteException
getRoleAssignmentTypeInfo
Retrieves details about a RoleAssignmentType.
Syntax: Here is the method signature:
getRoleCategories
Gets role categories.
Syntax: Here is the method signature:
CategoryArray getRoleCategories() throws NrfServiceException,
java.rmi.RemoteException
getRoleConflicts
Returns a list of Sod instances found for all given roles. This method always returns a list.
Syntax: Here is the method signature:
SodArray getRoleConflicts(DNStringArray roles) throws NrfServiceException,
java.rmi.RemoteException
getRoleLevels
Gets role levels.
Syntax: Here is the method signature:
RoleLevelArray getRoleLevels() throws NrfServiceException,
java.rmi.RemoteException
getRolesInfo
Returns a list of RoleInfo instances given a list of role DNs.
Syntax: Here is the method signature:
RoleInfoArray getRolesInfo(DNStringArray roleDns) throws
NrfServiceException, java.rmi.RemoteException
getRolesInfoByCategory
Returns a list of RoleInfo instances given a list of role category keys.
Syntax: Here is the method signature:
RoleInfoArray getRolesInfoByCategory(CategoryKeyArray roleCategoryKeys)
throws NrfServiceException, java.rmi.RemoteException
getRolesInfoByLevel
Returns a list of RoleInfo instances given a list of role levels.
Syntax: Here is the method signature:
getTargetSourceConflicts
Returns a list of Sod instances for all SOD conflicts defined between the target role DN and the
source role DN.
Syntax: Here is the method signature:
SodArray getTargetSourceConflicts(java.lang.String targetName,
java.lang.String sourceName) throws NrfServiceException,
java.rmi.RemoteException
getUser
Gets user info including all role assignments for a given user DN stored in a UserIdentity object.
Syntax: Here is the method signature:
User getUser(java.lang.String userDn) throws NrfServiceException,
java.rmi.RemoteException
getVersion
Returns the version of this Web Service.
Syntax: Here is the method signature:
VersionVO getVersion() throws java.rmi.RemoteException
isUserInRole
Returns boolean flag; true if role has been assigned to a User identity
Syntax: Here is the method signature:
boolean isUserInRole(java.lang.String userDn, java.lang.String roleDn)
requestRoleAssignment
Returns a list of request DNs created by the role assignment
Syntax: Here is the method signature:
DNStringArray requestRolesAssignment(RoleAssignmentRequest
roleAssignmentRequest) throws NrfServiceException,
java.rmi.RemoteException
Sod
Value object to hold SOD information.
getApprovalType
Gets the SOD approval type.
Syntax: Here is the method signature:
public SodApprovalType getApprovalType()
getApprovers
Gets SOD approvers.
Syntax: Here is the method signature:
public ApproverArray getApprovers()
getDescription
Gets the SOD description.
Syntax: Here is the method signature:
public java.lang.String getDescription()
getEntityKey
Gets the SOD entity key.
Syntax: Here is the method signature:
public java.lang.String getEntityKey()
getName
Gets the SOD name.
Syntax: Here is the method signature:
public java.lang.String getName()
getQuorum
Gets the SOD quorum amount.
Syntax: Here is the method signature:
public java.lang.String getQuorum()
getRoles
Gets the SOD roles.
Syntax: Here is the method signature:
public DNStringArray getRoles()
setApprovalType
Sets the SOD approval type.
Syntax: Here is the method signature:
public void setApprovalType(SodApprovalType approvalType)
setApprovers
Sets the SOD approvers.
Syntax: Here is the method signature:
public void setApprovers(ApproverArray approvers)
setDescription
Sets the SOD description.
Syntax: Here is the method signature:
public void setDescription(java.lang.String description)
setEntityKey
Sets the SOD entity key.
Syntax: Here is the method signature:
public void setEntityKey(java.lang.String entityKey)
setName
Sets the SOD name.
Syntax: Here is the method signature:
public void setName(java.lang.String name)
setRequestDef
Sets the request definition for approval processing.
Syntax: Here is the method signature:
public void setRequestDef(java.lang.String requestDef)
setRoles
Sets the SOD roles.
Syntax: Here is the method signature:
public void setRoles(DNStringArray roles)
SodArray
This section provides reference information on the SodArray class.
SodArray constructors
The SodArray class has two constructors.
Syntax 1: Here is the syntax for a constructor that takes no parameters:
SodArray()
Syntax 2: Here is the syntax for a constructor that takes an array of Attribute objects as a parameter:
SodArray(Sod[] SodVal)
getSod
Returns an array of Sod objects.
Syntax: Here is the method signature:
Sod[] getSod()
setSod
Sets the array of Sod objects associated with the SodArray class.
Syntax: Here is the method signature:
SodApprovalType
An JAX-RPC friendly representation of com.novell.idm.nrf.api.SodApprovalType.
Type Name
SodApprovalType constructors
The SodApprovalType class has two constructors.
Syntax 1: Here is the syntax for a constructor that takes no parameters:
SodApprovalType()
Syntax 2: Here is the syntax for a constructor that takes a String as a parameter:
SodApprovalType(java.lang.String value)
equals
Implementation of equals().
Syntax: Here is the method signature:
public boolean equals(java.lang.Object obj)
fromRPC
Reconstructs an API representation object from an RPC representation.
Syntax: Here is the method signature:
public com.novell.idm.nrf.api.SodApprovalType fromRPC() throws
com.novell.idm.nrf.exception.NrfException
fromValue
This method is for WSSDK serialization.
Syntax: Here is the method signature:
public static SodApprovalType fromValue(java.lang.String value)
hashCode
This is an implementation of hashCode(). This implementation overrides the hashCode() method in
java.lang.Object.
Syntax: Here is the method signature:
public int hashCode()
setValue
Sets the type.
Syntax: Here is the method signature:
public void setValue(java.lang.String type)
toRPC
Reconstructs an API representation object from an RPC representation.
Syntax: Here is the method signature:
public com.novell.idm.nrf.api.SodApprovalType fromRPC() throws
com.novell.idm.nrf.exception.NrfException
toString
Implementation of toString() that returns a string representation of the class.
Syntax: Here is the method signature:
public java.lang.String toString()
SodJustification
Class to represent an SOD DN to override with a justification. Used for assignment of roles to be able
to pass in a justification for overrides of SODs.
SodJustification constructors
The SodJustification class has two constructors.
Syntax 1: Here is the syntax for a constructor that takes no parameters:
SodJustification()
getJustification
Gets the SOD justification for override.
Syntax: Here is the method signature:
public java.lang.String getJustification()
getSodDN
Gets the SOD DN for override.
Syntax: Here is the method signature:
public java.lang.String getSodDN()
setJustification
Sets the justification for override.
Syntax: Here is the method signature:
public void setJustification(java.lang.String justification)
setSodDN
Sets the SOD DN for override.
Syntax: Here is the method signature:
public void setSodDN(java.lang.String sodDN)
SodJustificationArray
This section provides reference information on the SodJustificationArray class.
SodJustificationArray constructors
The SodJustificationArray class has two constructors.
Syntax 1: Here is the syntax for a constructor that takes no parameters:
SodJustificationArray()
Syntax 2: Here is the syntax for a constructor that takes an array of Attribute objects as a parameter:
SodJustificationArray(SodJustification[] SodJustificationVal)
setSodjustification
Sets the array of SodJustification objects associated with the SodJustificationArray class.
Syntax: Here is the method signature:
void setSodjustification (SodJustification[] SodJustificationVal)
User
Value class to hold user identity information.
User constructors
The User class supports a single constructor.
Syntax: Here is the syntax for the constructor:
User()
getAssociatedRoles
Gets the associated roles for this identity.
Syntax: Here is the method signature:
public DNStringArray getAssociatedRoles()
getCn
Gets the cn.
Syntax: Here is the method signature:
public java.lang.String getCn()
getContainerRoles
Gets the container roles.
Syntax: Here is the method signature:
public DNStringArray getContainerRoles()
getEntityKey
Gets the identity entity key.
Syntax: Here is the method signature:
public java.lang.String getEntityKey()
getExplicitAssignments
Gets the explicit role assignments.
Syntax: Here is the method signature:
public RoleAssignmentArray getExplicitAssignments()
getFirstName
Gets the first name.
Syntax: Here is the method signature:
public java.lang.String getFirstName()
getGroupRoles
Gets the group roles.
Syntax: Here is the method signature:
public DNStringArray getGroupRoles()
getIdentityType
Gets identity type.
Syntax: Here is the method signature:
public IdentityType getIdentityType()
getImplicitAssignments
Gets the implicit role assignments.
Syntax: Here is the method signature:
public RoleAssignmentArray getImplicitAssignments()
getInheritedRoles
Gets the inherited roles.
Syntax: Here is the method signature:
public DNStringArray getInheritedRoles()
getLastName
Gets the last name.
Syntax: Here is the method signature:
public java.lang.String getLastName()
getRoleAssignments
Gets the role assignments for this identity.
Syntax: Here is the method signature:
public RoleAssignmentArray getRoleAssignments()
setAssociatedRoles
Sets the associated roles for this identity.
Syntax: Here is the method signature:
public void setAssociatedRoles(DNStringArray associatedRoles)
setCn
Sets the CN.
Syntax: Here is the method signature:
public void setCn(java.lang.String cn)
setContainerRoles
Sets the container roles.
Syntax: Here is the method signature:
public void setContainerRoles(DNStringArray containerRoles)
setEntityKey
Sets the identity entity key.
Syntax: Here is the method signature:
public void setEntityKey(java.lang.String entityKey)
setExplicitAssignments
Sets the explicit role assignments.
Syntax: Here is the method signature:
public void setExplicitAssignments(RoleAssignmentArray
explicitAssignments)
setFirstName
Sets the first name.
Syntax: Here is the method signature:
public void setFirstName(java.lang.String firstName)
setGroupRoles
Sets the group roles.
Syntax: Here is the method signature:
public void setGroupRoles(DNStringArray groupRoles)
setIdentityType
Sets the identity type.
Syntax: Here is the method signature:
public void setIdentityType(IdentityType identityType)
setImplicitAssignments
Sets the implicit role assignments.
Syntax: Here is the method signature:
setInheritedAssignments
Sets the inherited role assignments.
Syntax: Here is the method signature:
public void setInheritedAssignments(RoleAssignmentArray
inheritedAssignments)
setInheritedRoles
Sets the inherited roles.
Syntax: Here is the method signature:
public void setInheritedRoles(DNStringArray inheritedRoles)
setLastName
Sets the last name.
Syntax: Here is the method signature:
public void setLastName(java.lang.String lastName)
setRoleAssignments
Sets the role assignments for this identity.
Syntax: Here is the method signature:
public void setRoleAssignments(RoleAssignmentArray roleAssignments)
VersionVO
A value object for Version.
VersionVO constructors
The VersionVO class has two constructors.
Syntax 1: Here is the syntax for a constructor that takes no parameters:
VersionVO()
Syntax 2: Here is the syntax for a constructor that takes a String as a parameter:
VersionVO(java.lang.String version)
setValue
Sets the version.
Syntax: Here is the method signature:
public void setValue(java.lang.String version)
RoleAssignment[] assignments =
group.getRoleAssignments().getRoleassignment();
PrintRoleUtils.getAssignments(assignments);
}
else
System.out.println("Group not found");
}
catch (NrfServiceException nrf)
{
throw new Exception(nrf.getMessage());
}
catch (RemoteException re)
{
throw new Exception(re.getMessage());
}
}
...
/**
* Returns the Roles remote stub
* @param username - user name
* @param password - password
* @param acceptLanguage - HTTP header Accept-Language
* @return the Roles remote stub
* @throws Exception - catch all exceptions
*/
public static IRemoteRole getRolesStub(String username,
String password,
String acceptLanguage)
throws Exception
{
Stub stub = null;
String stubCacheKey = username + ":" + password;
if (g_rolesStubCache.containsKey(stubCacheKey)) {
g_log.debug("Using Cached Roles stub for [" + username + "]");
stub = (Stub) g_rolesStubCache.get(stubCacheKey);
} else {
g_log.debug("Using New Roles stub");
RoleService service = new RoleServiceImpl();
stub = (Stub) service.getIRemoteRolePort();
g_rolesStubCache.put(stubCacheKey, stub);
}
getRoleAssignmentRequestStatusTestCase()********************************")
;
String correlationId = "9a5feec728864b55ac443724a915e831";
try
{
IRemoteRole stub = getRoleStub(url, username, password);
RoleAssignmentRequestStatusArray reqArray =
stub.getRoleAssignmentRequestStatus(correlationId);
RoleAssignmentRequestStatus[] reqStatus =
reqArray.getRoleassignmentrequeststatus();
//Assert.assertNotNull("RoleAssignmentRequestStatus object is null
for
getRoleAssignmentRequestStatus", reqStatus);
if (reqStatus != null)
System.out.println(PrintRoleUtils.getRequestStatus(reqStatus));
else
System.out.println("RoleAssignmentRequestStatus object is null for
//result += Util.getRequestStatus(reqStatus);
}
catch (NrfServiceException nrf)
{
throw new Exception(nrf.getMessage());
}
catch (RemoteException re)
{
throw new Exception(re.getMessage());
}
getRoleAssignmentTypeInfoTestCase()********************************");
try
{
IRemoteRole stub = getRoleStub(url, username, password);
RoleAssignmentTypeInfo info =
stub.getRoleAssignmentTypeInfo(RoleAssignmentType.fromValue("ROLE_TO_ROLE"
));
//Assert.assertNotNull("Role Assignment Type Info Not Found for
getRoleAssignmentTypeInfo", info);
if (info != null)
{
System.out.println("Role Assignment Type Info:");
System.out.println(" identity type: " +
info.getIdentityType().getValue());
System.out.println(" subtree included: " +
info.getSubtreeIncluded());
System.out.println(" suports approvals: " +
info.getSupportsApproval());
System.out.println(" supports effective date: " +
info.getSupportsEffectiveDate());
System.out.println(" supports expiration: " +
info.getSupportsExpiration());
System.out.println(" supports SOD Approval: " +
info.getSupportsSODApproval());
}
"cn=Doctor,cn=Level20,cn=RoleDefs,cn=RoleConfig,cn=AppConfig,cn=HajenDrive
r,cn=TestDrivers,o=netiq"
};
try
{
IRemoteRole stub = getRoleStub(url, username, password);
boolean inRole = stub.isUserInRole(DNs[0], DNs[1]);
System.out.println(sInRole);
}
catch (NrfServiceException nrf)
{
throw new Exception(nrf.getMessage());
}
catch (RemoteException re)
{
throw new Exception(re.getMessage());
}
This section describes the Resource Web Service, which allows SOAP clients to invoke a subset of
actions that apply to resources.
WARNING: The test page is disabled by default. Since some of the methods allow data to be
updated, the test page presents a potential security vulnerability and should not be allowed in a
production environment.
WARNING: The test page is disabled by default. Since some of the methods allow data to be
updated, the test page presents a potential security vulnerability and should not be allowed in a
production environment.
To enable the test page, you need to update the WEB-INF/web.xml file in the IDMProv.war file.
Before you make your changes, the web.xml should look like this:
<servlet>
<servlet-name>Resource</servlet-name>
<servlet-
class>com.novell.idm.nrf.soap.ws.resource.impl.ResourceServiceSkeletonImpl
</servlet-class>
<init-param>
<param-name>com.novell.soa.ws.test.disable</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
Change the servlet declaration, as follows:
<servlet>
<servlet-name>Resource</servlet-name>
<servlet-
class>com.novell.idm.nrf.soap.ws.resource.impl.ResourceServiceSkeletonImpl
</servlet-class>
<init-param>
<param-name>com.novell.soa.ws.test.disable</param-name>
<param-value>false</param-value>
</init-param>
</servlet>
If you wish to change the restriction for a particular operation, you can modify the property
ResourceService/Resource/soap/operation for the method, setting its value to true to restrict access
to administrators for the operation and false to remove the restriction. If the ResourceService/
Resource/soap property is true, all methods are restricted to Resource Administrator credentials.
IRemoteResource
This section provides reference information for each method associated with the IRemoteResource
interface.
checkCodeMapValueStatus
Checks to see if a particular value exists in the code map table for a specified entitlement and logical
system. The method returns the status for the code map value as a CodeMapValueStatus object.
This method is one of three SOAP endpoints to help you keep the code map tables for the Roles
Based Provisioning Module synchronized with the code map tables for the Role Mapping
Administrator. The user interface for the Role Mapping Administrator can trigger a code map refresh
if a mismatch is discovered while a user is creating mappings. In addition, the Roles Based
Provisioning Module allows you to use the three SOAP endpoints to refresh selected entitlements
within its code map tables.
In addition to checkCodeMapValueStatus, the Roles Based Provisioning Module includes the
following endpoints to help with code map synchronization:
getRefreshStatus
refreshCodeMap
The Entitlement Query Settings section of the Configure Roles and Resources Settings page in the
identity applications allows you to specify how often the Roles Based Provisioning Module code map
tables are refreshed and also start a manual refresh. However, this page does not allow to refresh
selected entitlements. To control which entitlements are refreshed, you need to use the SOAP
endpoints.
For additional information on the getRefreshStatus endpoint, see “getRefreshStatus” on page 511.
For additional information on the refreshCodeMap endpoint, see “refreshCodeMap” on page 517.
For example:
cn=groups,cn=groupentitlementloopback,cn=driverset1,o=system
connectionName connection (logical system) name. This is an optional parameter. Only fanout
drivers need to specify the connection name.
codeMapValue code map value to verify.
For example:
\TEST1\data\groups\netiq\cambridge\rbpm\4AlphaGroup
SOAP Request: Here is the SOAP request:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/
" xmlns:ser="http://www.netiq.com/resource/service">
<soapenv:Header/>
<soapenv:Body>
<ser:checkCodeMapValueStatusRequest>
<!--Optional:-->
<ser:entitilementDN>cn=groups,cn=groupentitlementloopback,cn=driverset1,o=
system</ser:entitilementDN>
<!--Optional:-->
<ser:connectionName/>
<!--Optional:-->
<ser:codeMapValue>\WILLIAMS1\data\groups\netiq\cambridge\rbpm\4AlphaGroup<
/ser:codeMapValue>
</ser:checkCodeMapValueStatusRequest>
</soapenv:Body>
</soapenv:Envelope>
SOAP Response: Here is the SOAP response:
createResource
Creates a new resource according to the specified parameters, and returns a DN of the created
resource.
A correlation ID is generated automatically for this method that uses this format:
UserApp#RemoteResourceRequest#xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
The correlation ID is used for auditing.
Syntax: Here is the method signature:
public String createResource(Resource resource)
throws NrfServiceException, RemoteException;
The parameters are described below:
resource specifies the resource object to create.
createResourceAid
Creates a new resource, with a correlation ID that you provide. The correlation ID is used for auditing
to link a set of related resources. This method creates the resource according to the specified
parameters, and returns a DN of the created resource.
Syntax: Here is the method signature:
public String createResourceAid(Resource resource, String correlationId)
throws NrfServiceException, RemoteException;
getEntitlementCodeMap
Returns an array of ProvisioningCodeMap objects, which include code map information from the
code map and code map label tables.
Syntax: Here is the method signature:
ProvisioningCodeMap[] getEntitlementCodeMap(java.lang.String codeMapKey,
int type)
throws com.novell.idm.nrf.soap.ws.resource.NrfServiceException,
java.rmi.RemoteException;
The parameters are described below:
codeMapKey specifies the code map key to retrieve values from. The codeMapKey is a GUID
that acts as a unique identifier for the code map. For example:
\2d\13\d1\a4\7b\99\d6\4c\03\9a\2d\13\d1\a4\7b\99
type specifies the code map type. A value of 0 filters the list to include entitlement code maps
only.
getRefreshStatus
Gets the refresh status of a code map based on a specified entitlement DN. This method returns the
status as an array of CodeMapRefreshStatus objects. The structure returned contains the DN, GUID,
connection name status, and last refresh time.
This method is one of three SOAP endpoints to help you keep the code map tables for the Roles
Based Provisioning Module synchronized with the code map tables for the Role Mapping
Administrator. The user interface for the Role Mapping Administrator can trigger a code map refresh
if a mismatch is discovered while a user is creating mappings. In addition, the Roles Based
Provisioning Module allows you to use the three SOAP endpoints to refresh selected entitlements
within its code map tables.
The Entitlement Query Settings section of the Configure Roles and Resources Settings page in the
identity applications allows you to specify how often the Roles Based Provisioning Module code map
tables are refreshed and also start a manual refresh. However, this page does not allow to refresh
selected entitlements. To control which entitlements are refreshed, you need to use the SOAP
endpoints.
For additional information on the checkCodeMapValueStatus endpoint, see
“checkCodeMapValueStatus” on page 508. For additional information on the refreshCodeMap
endpoint, see “refreshCodeMap” on page 517.
For code samples that use the new methods for code map synchronization, see “Code Map
Synchronization Code Samples” on page 538.
Syntax: Here is the method signature:
public CodeMapRefreshStatus[] getRefreshStatus(String entitlementDN)
throws NrfServiceException, RemoteException;
The parameters are described below:
entitlementDN entitlement DN as a string
For example:
cn=groups,cn=groupentitlementloopback,cn=driverset1,o=system
SOAP Request: Here is the SOAP request:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/
" xmlns:ser="http://www.netiq.com/resource/service">
<soapenv:Header/>
<soapenv:Body>
<ser:getRefreshStatusRequest>
<!--Optional:-->
<ser:entitlementDN>cn=groups,cn=groupentitlementloopback,cn=driverset1,o=s
ystem</ser:entitlementDN>
</ser:getRefreshStatusRequest>
</soapenv:Body>
</soapenv:Envelope>
SOAP Response: Here is the SOAP response:
getResourceAssignmentsForCurrentUser
Returns the resource assignments for the current user.
Syntax: Here is the method signature:
ResourceAssignment[] getResourceAssignmentsForCurrentUser()
throws com.novell.idm.nrf.soap.ws.resource.NrfServiceException,
java.rmi.RemoteException;
getResourceAssignmentsForUser
Returns the resource assignments for a particular user.
Syntax: Here is the method signature:
ResourceAssignment[] getResourceAssignmentsForUser(java.lang.String
userDn)
throws com.novell.idm.nrf.soap.ws.resource.NrfServiceException,
java.rmi.RemoteException;
The parameters are described below:
userDn DN of the target user
getAssignmentsForResource
Returns the resource assignments for a particular resource.
Syntax: Here is the method signature:
ResourceAssignment[] getAssignmentsForResource(java.lang.String
resourceDn)
throws com.novell.idm.nrf.soap.ws.resource.NrfServiceException,
java.rmi.RemoteException;
getResourceRequestStatusByCorrelationId
Returns all resource request status items for a given correlation ID.
Syntax: Here is the method signature:
public ResourceAssignmentRequestStatus[]
getResourceRequestStatusByCorrelationId
(String correlationId, String locale)
throws NrfServiceException, RemoteException;
The parameters are described below:
correlationId specifies a resource assignment request correlation ID.
locale supplies an iso639 language code to format localized string values; if the parameter is
null, the language defaults to the servlet request locale.
This method returns all resource request status instances for the specified correlationId parameter
value. For more information on the ResourceAssignmentRequestStatus class, see
“ResourceAssignmentRequestStatus” on page 535.
getResourceRequestsStatusForCurrentUser
Returns all resource request status items for the authenticated user.
Syntax: Here is the method signature:
public ResourceAssignmentRequestStatus[]
getResourceRequestStatusForCurrentUser(String locale)
throws NrfServiceException, RemoteException;
The parameters are described below:
locale supplies an iso639 language code to format localized string values; if the parameter is
null, the language defaults to the servlet request locale.
This method returns all resource request status instances for the specified correlationId parameter
value. For more information on the ResourceAssignmentRequestStatus class, see
“ResourceAssignmentRequestStatus” on page 535.
getResourceRequestStatusByIdentity
Returns all resource assignment request status items for a particular user identity.
Syntax: Here is the method signature:
public ResourceAssignmentRequestStatus[]
getResourceRequestStatusByIdentity(String identity, String
locale)
throws NrfServiceException, RemoteException;
getCodeMapValues
Returns a list of code map values for a specified code map.
Syntax: Here is the method signature:
public CodeMapValue[] getCodeMapValues(String codeMapKey, String locale)
throws NrfServiceException, RemoteException;
The parameters are described below:
codeMapKey specifies the code map key to retrieve values from. The codeMapKey is a GUID
that acts as a unique identifier for the code map. For example:
\2d\13\d1\a4\7b\99\d6\4c\03\9a\2d\13\d1\a4\7b\99
locale supplies an iso639 language code to format localized string values; if the parameter is
null, the language defaults to the servlet request locale.
getResource
Returns a resource object.
Syntax: Here is the method signature:
public Resource getResource(String dn, String locale)
throws NrfServiceException, RemoteException;
The parameters are described below:
dn specifies the DN of the resource you want to retrieve.
locale supplies an iso639 language code to format localized string values; if the parameter is
null, the language defaults to the servlet request locale.
getResourceLocalizedStrings
Gets the localized strings for a resource, such as the names and descriptions. The type parameter
lets you specify whether the names or descriptions should be retrieved.
Syntax: Here is the method syntax:
public LocalizedValue[] getResourceLocalizedStrings(String resourceDn, int
type)throws NrfServiceException, RemoteException;
getResourcessInfoByCategory
Returns a list of ResourceInfo instances given a list of category keys.
Syntax: Here is the method signature:
public ResourceInfo[] getResourcessInfoByCategory(CategoryKey[]
resourceCategoryKeys)
throws NrfServiceException, RemoteException;
The parameters are described below:
resourceCategoryKeys specifies the list of resource category keys to retrieve resource
information objects for.
getResourcessInfo
Returns a list of ResourceInfo instances given a list of resource DNs.
Syntax: Here is the method signature:
public ResourceInfo[] getResourcessInfo(DNString[] resDns)
throws NrfServiceException, RemoteException;
The parameters are described below:
resDns provides a list of resource DNs for which you want to retrieve resource information
objects.
modifyResource
Modifies a resource definition. This method does not perform a localized string modification update.
To update the localized names or descriptions for a resource, you need to use the
setResourceLocalizedStrings method.
A correlation ID is generated automatically for this method that uses this format:
UserApp#RemoteResourceRequest#xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Syntax: Here is the method signature:
public Resource modifyResource(Resource resource)
throws NrfServiceException, RemoteException;
The parameters are described below:
resource specifies the resource object to modify.
refreshCodeMap
Refreshes the code map based on a specified entitlement DN. The method returns the status of the
refresh operation in the form of an EntitlementRefreshInfo object. This structure includes the
detailed status as an array of CodeMapRefreshStatus objects.
This method is one of three SOAP endpoints to help you keep the code map tables for the Roles
Based Provisioning Module synchronized with the code map tables for the Role Mapping
Administrator. The user interface for the Role Mapping Administrator can trigger a code map refresh
if a mismatch is discovered while a user is creating mappings. In addition, the Roles Based
Provisioning Module allows you to use the three SOAP endpoints to refresh selected entitlements
within its code map tables.
In addition to refreshCodeMap, the Roles Based Provisioning Module includes the following
endpoints to help with code map synchronization:
checkCodeMapValueStatus
getRefreshStatus
The Entitlement Query Settings section of the Configuration > Roles and Resources page in the
Identity Manager Dashboard allows you to specify how often the Roles Based Provisioning Module
code map tables are refreshed and also start a manual refresh.
For additional information on the checkCodeMapValueStatus endpoint, see
“checkCodeMapValueStatus” on page 508. For additional information on the getRefreshStatus
endpoint, see “getRefreshStatus” on page 511.
For code samples that use the new methods for code map synchronization, see “Code Map
Synchronization Code Samples” on page 538.
Syntax: Here is the method signature:
public EntitlementRefreshInfo refreshCodeMap(String entitlementDN rbpm-
refresh-rate="value" freeform-param="value")
throws NrfServiceException, RemoteException;
The parameters are described below:
entitlementDN entitlement DN to refresh the code map
For example:
cn=groups,cn=groupentitlementloopback,cn=driverset1,o=system
<entitlementDN>cn=groups,cn=groupentitlementloopback,cn=driverset1,o=syste
m</entitlementDN>
<guid>\2d\13\d1\a4\7b\99\d6\4c\03\9a\2d\13\d1\a4\7b\99</
guid>
<lastRefresh>1329244784180</lastRefresh>
<status>SUCCESS</status>
</codemaprefreshstatus>
</detailedStatus>
<entitlementDN>cn=groups,cn=groupentitlementloopback,cn=driverset1,o=syste
m</entitlementDN>
<guid>\2d\13\d1\a4\7b\99\d6\4c\03\9a\2d\13\d1\a4\7b\99</guid>
<status>true</status>
</result>
</ns1:refreshCodeMapResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
removeResourceAid
Deletes a specified resource from the Resource Catalog, with a correlation ID that you provide. The
correlation ID is used for auditing to link a set of related resources. This method returns the DN for
the deleted resource as a confirmation.
Syntax: Here is the method signature:
public DNString removeResourceAid(DNString resourceDn, String correlation
Id)
throws NrfServiceException, RemoteException;
requestResourceGrant
Makes a grant resource request and returns a resource request correlation ID.
Syntax: Here is the method signature:
public String requestResourceGrant(String resourceTarget, String
requester, String userTarget, String reasonForRequest,
ResourceRequestParam[] requestParams, String correlationId)
throws NrfServiceException, RemoteException;
The parameters are described below:
resourceTarget specifies the target resource DN.
requester supplies an identifier for the remote client application making the request to grant
the resource.
The requester parameter on this SOAP endpoint identifies the originator of the request. This
value is set in the resource request object nrfOriginator attribute, following this convention:
For a SOAP call: “REMOTE_CLIENT:<requester param value>”
For a workflow action: “WF:<wf process id>”
userTarget specifies the DN for the being granted the resource.
reasonForRequest provides a reason for the request.
requestResourceRevoke
Makes a revoke resource request and returns a resource request correlation ID.
The revoke invocation behavior mirrors the behavior for a grant opeation, except that a revoke
request for the resource is posted on the server.
Syntax: Here is the method signature:
public String requestResourceRevoke(String resourceTarget,
String requester, String userTarget, String reasonForRequest,
ResourceRequestParam[] requestParams, String instanceGuid,
String correlationId)
throws NrfServiceException, RemoteException;
The parameters are described below:
resourceTarget specifies the target resource DN.
requester supplies an identifier for the remote client application making the request to revoke
the resource.
The requester parameter on this SOAP endpoint identifies the originator of the request. This
value is set in the resource request object nrfOriginator attribute, following this convention:
For a SOAP call: “REMOTE_CLIENT:<requester param value>”
For a workflow action: “WF:<wf process id>”
For the identity applications user interface: “USER_APP”
userTarget specifies the DN for the user being granted the resource.
reasonForRequest provides a reason for the request.
requestParams provides the parameter values for the request.
instanceGuid provides a GUID identifier for the resource assignment instance. The resource
assignment instance GUID supports revoking a single instance of a multi-value resource
assignment, if not all instances are to be revoked.
IMPORTANT: If you do not specify the instanceGuid value, and the user has more than one
value of that resource assigned, all instances of the resource assignment will be removed.
When you create a new resource assignment request, the instanceGuid is included just above
the correlationid field:
<resourceDn>cn=Vodacom,cn=ResourceDefs,cn=RoleConfig,cn=AppConfig,cn=U
ser
Application Driver,cn=driverset1,o=system</resourceDn>
</resourceassignment>
correlationId specifies a resource assignment request correlation ID; if the parameter is null, a
correlation ID is generated.
setResourceLocalizedStrings
Sets the localized strings for a resource, such as the names and descriptions.
A correlation ID is generated automatically for this method that uses this format:
UserApp#RemoteResourceRequest#xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Syntax: Here is the method signature:
public LocalizedValue[] setResourceLocalizedStrings(String resourceDn,
LocalizedValue[] locStrings, int type)
throws NrfServiceException, RemoteException;
The parameters are described below:
resourceDn specifies the DN of the resource for which you want to set the localized strings.
locStrings provides an array of localized strings you want to define.
type specifies the type of localized strings you want to retrieve. A type value of 1 retrieves a list
of names for the resource, whereas a type value of 2 retrieves a list of descriptions.
CodeMapRefreshStatus
Supporting class that provides details about the status of a code map refresh.
getConnectionName
Returns the name of the connected system.
Syntax: Here is the method signature:
public String getConnectionName()
getEntitlementDN
Returns the DN for the entitlement.
Syntax: Here is the method signature:
public String getEntitlementDN()
getGuid
Returns the GUID for the entitlement.
Syntax: Here is the method signature:
public String getGuid()
getLastRefresh
Returns the timestamp for the last refresh.
Syntax: Here is the method signature:
public long getLastRefresh()
getStatus
Returns the refresh status as a string indicating whether the refresh was successful.
Syntax: Here is the method signature:
public String getStatus()
setEntitlementDN
Sets the entitlement DN.
Syntax: Here is the method signature:
public void setEntitlementDN(String entitlementDN)
setGuid
Sets the GUID for the entitlement.
Syntax: Here is the method signature:
public void setGuid(String guid)
setLastRefresh
Sets the last refresh timestamp.
Syntax: Here is the method signature:
public void setLastRefresh(final long lastRefresh)
setStatus
Sets the refresh status.
Syntax: Here is the method signature:
public void setStatus(String status)
CodeMapValueStatus
Supporting class that provides details about the status of a refresh for a code map value.
getUpToDate
Returns true or false to indicate whether the status is up-to-date.
Syntax: Here is the method signature:
public boolean getUpToDate()
getValue
Gets the code map value.
Syntax: Here is the method signature:
public String getValue()
setRefreshStatus
Sets the refresh as a CodeMapRefreshStatus object.
Syntax: Here is the method signature:
public void setRefreshStatus(final CodeMapRefreshStatus refreshStatus)
setUpToDate
Sets a boolean indicating whether the status is up-to-date.
Syntax: Here is the method signature:
public void setUpToDate(final boolean upToDate)
setValue
Sets the code map value.
Syntax: Here is the method signature:
public void setValue(final String value)
EntitlementRefreshInfo
Supporting class that provides refresh information for an entitlement after a code map refresh has
been performed.
getDetailedStatus
Returns the detailed status as an array of CodeMapRefreshStatus objects.
Syntax: Here is the method signature:
public CodeMapRefreshStatus[] getDetailedStatus()
getGuid
Returns the GUID for the entitlement.
Syntax: Here is the method signature:
public String getGuid()
getStatus
Returns the status of the refresh as a boolean flag.
Syntax: Here is the method signature:
public boolean getStatus()
setDetailedStatus
Sets the detailed status as an array of CodeMapRefreshStatus objects.
Syntax: Here is the method signature:
public void setDetailedStatus(final CodeMapRefreshStatus[] detailedStatus)
setEntitlementDN
Sets the DN for the entitlement.
Syntax: Here is the method signature:
public void setEntitlementDN(String entitlementDN)
setGuid
Sets the GUID for the entitlement.
Syntax: Here is the method signature:
public void setGuid(String m_guid)
setStatus
Sets the status as a boolean flag.
Syntax: Here is the method signature:
public void setStatus(boolean m_status)
getDescription
Returns the description
public String getDescription()
getName
Returns the name.
public String getName()
getEntityKey
Returns the entity key.
public String getEntityKey()
getEntityType
Returns the entity type.
public int getEntityType()
getQueryKey
Returns the query key.
public String getQueryKey()
getViewId
Returns the view ID.
public String getViewId()
getLastRefreshed
Returns the timestamp for the last refresh.
public long getLastRefreshed()
setDescription
Sets the description.
public void setDescription(String description)
setEntityKey
Sets the entity key.
public void setEntityKey(String entityKey)
setEntityType
Sets the entity type.
public void setEntityType(int entityType)
setQueryKey
Sets the query key.
public void setQueryKey(String queryKey)
setViewId
Sets the view ID.
public void setViewId(String viewId)
setLastRefreshed
Sets the timestamp for the last refresh.
public void setLastRefreshed(long lastRefreshed)
getLabels
Returns the code map labels.
public ProvisioningCodeMapLabel[] getLabels()
setLabels
Sets the code map labels.
public void setLabels(ProvisioningCodeMapLabel[] labels)
getEntitlementDn
Returns the DN for the entitlement.
setEntitlementDn
Sets the DN for the entitlement.
public void setEntitlementDn(String entitlementDn)
getDriverDn
Returns the DN for the driver.
public String getDriverDn()
setDriverDn
Sets the DN for the driver.
public void setDriverDn(String driverDn)
getDriverDisplayName
Returns the display name for the driver.
public String getDriverDisplayName()
setDriverDisplayName
Sets the display name for the driver.
public void setDriverDisplayName(String driverDisplayName)
Resource
Supporting class that provides information about resources.
getName
Returns the name of the resource.
public String getName()
setName
Sets the name of the resource.
public void setName(String name)
getDescription
Returns the description of the resource.
setDescription
Sets the description of the resource.
public void setDescription(String description)
getEntityKey
Returns the entity key for the resource.
public String getEntityKey()
setEntityKey
Sets the entity key for the resource.
public void setEntityKey(String entityKey)
getResourceCategoryKeys
Returns the keys for the resource categories.
public CategoryKey[] getResourceCategoryKeys()
setResourceCategoryKeys
Sets the keys for the resource categories.
public void setResourceCategoryKeys(CategoryKey[] resourceCategoryKeys)
getEntitlementRef
Returns the entitlement reference for the resource.
public NrfEntitlementRef[] getEntitlementRef()
setEntitlementRef
Sets the entitlement reference for the resource.
public void setEntitlementRef(NrfEntitlementRef[] entitlementRef)
getGrantApprovers
Returns the list of approvers for resource grant operations.
public Approver[] getGrantApprovers()
getGrantQuorum
Returns the quorum condition for grant operations.
public String getGrantQuorum()
setGrantQuorum
Sets the quorum condition for grant operations.
public void setGrantQuorum(String grantQuorum)
getGrantRequestDef
Returns the provisioning request definition for grant operations.
public String getGrantRequestDef()
setGrantRequestDef
Sets the provisioning request definition for grant operations.
public void setGrantRequestDef(String grantRequestDef)
getRevokeQuorom
Returns the quorum condition for revoke operations.
public String getRevokeQuorum()
setRevokeQuorom
Sets the quorum condition for revoke operations.
public void setRevokeQuorum(String revokeQuorum)
getRevokeRequestDef
Returns the provisioning request definition for revoke operations.
public String getRevokeRequestDef()
setRevokeRequestDef
Sets the provisioning request definition for revoke operations.
getRevokeApprovers
Returns the list of approvers for revoke operations.
public Approver[] getRevokeApprovers()
setRevokeApprovers
Sets the list of approvers for revoke operations.
public void setRevokeApprovers(Approver[] revokeApprovers)
getOwners
Returns the list of owners for the resource.
public DNString[] getOwners()
setOwners
Sets the list of owners for the resource.
public void setOwners(DNString[] owners)
getParameters
Returns the list of entitlement parameters defined for the resource.
public ResourceParameter[] getParameters()
setParameters
Sets the list of entitlement parameters for the resource.
public void setParameters(ResourceParameter[] parameters)
getActive
Returns a boolean flag indicating whether the resource is still active, or has been approved or
denied.
public boolean getActive()
setActive
Sets the boolean flag indicating whether the resource is still active.
public void setActive(final boolean active)
setAllowOverride
Sets the boolean flag indicating whether the approval process for the resource can be overridden by
the approval process for a role.
public void setAllowOverride(final boolean allowOverride)
getAllowMulty
Returns a boolean indicating whether the resource allows a user to request multiple resource values.
public boolean getAllowedMulty()
setAllowMulty
Sets the boolean indicating whether the resource allows a user to request multiple resource values.
public void setAllowedMulty(final boolean allowedMulty)
ResourceAssignment
Supporting class that holds resource assignment information.
setResourceDn
Sets the DN for the resource.
public void setResourceDn(String resourceDn)
getResourceDn
Returns the DN for the resource.
public String getResourceDn()
setRequesterDn
Sets the DN for the requester.
public void setRequesterDn(String requesterDn)
getRequesterDn
Returns the DN for the requester.
getRecipientDn
Returns the DN for the recipient of the assignment.
public String getRecipientDn()
setRecipientDn
Sets the DN for the recipient of the assignment.
public void setRecipientDn(String recipientDn)
getReason
Returns the reason for the assignment.
public String getReason()
setReason
Sets the reason for the assignment.
public void setReason(String reason)
getRequestDate
Returns the date of the assignment request.
public Date getRequestDate()
setRequestDate
Sets the date of the assignment request.
public void setRequestDate(Date requestDate)
setRequestParams
Sets the parameters for the request.
public void setRequestParams(ResourceRequestParam[] params)
getRequestParams
Returns the parameters for the request.
public ResourceRequestParam[] getRequestParams()
getInstanceGuid
Returns the instanceGuid for the resource assignment.
public String getInstanceGuid()
ResourceRequestParam
Supporting class that holds the name and value for a resource request parameter value.
ResourceRequestParam Constructors
The ResourceRequestParam class has two constructors.
Syntax 1: Here is the syntax for a constructor that takes no parameters:
public ResourceRequestParam()
{
}
Syntax 2: Here is the syntax for a constructor that takes two String parameters:
public ResourceRequestParam(String name, String value)
{
m_name = name;
m_value = value;
}
setName
Sets a parameter name.
Syntax: Here is the method signature:
public void setName(String name)
getName
Returns a parameter name.
Syntax: Here is the method signature:
public String getName()
setValue
Sets the value of a parameter.
getValue
Returns the value of a parameter.
Syntax: Here is the method signature:
public String getValue()
ResourceAssignmentRequestStatus
Supporting class that holds a resource request status item. The interface includes methods for
getting and setting various request status properties. However, you will not need to call the methods
for setting property values, since you are using this class to retrieve information about the request
status. After calling the requestResourceGrant() or the requestResourceRevoke() methods, you can
use the get methods to get the properties for each status object returned in the
ResourceAssignmentRequestStatus array.
setEntityKey
Sets the entity key.
Syntax: Here is the method signature:
public void setEntityKey(String entityKey)
getEntityKey
Gets the entity key.
Syntax: Here is the method signature:
public String getEntityKey()
setReason
Sets the reason for the role assignment.
Syntax: Here is the method signature:
public void setReason(String reason)
getReason
Gets the reason for the role assignment.
Syntax: Here is the method signature:
public String getReason()
setStatusDescription
Sets the status description for the request.
Syntax: Here is the method signature:
public void setStatusDescription(String description)
getStatusValue
Gets the status value for the request.
Syntax: Here is the method signature:
public int getStatusValue()
getStatusDescription
Gets the localized description for the request.
Syntax: Here is the method signature:
public String getStatusDescription()
setCorrelationId
Sets the correlation ID.
Syntax: Here is the method signature:
public void setCorrelationId(String correlationId)
getCorrelationId
Gets the correlation ID.
Syntax: Here is the method signature:
public String getCorrelationId()
setRequester
Sets the requester DN.
Syntax: Here is the method signature:
public void setRequester(String requester)
setRequestDate
Sets the request date.
Syntax: Here is the method signature:
public void setRequestDate(Date requestDate)
getRequestDate
Gets the request date.
Syntax: Here is the method signature:
public Date getRequestDate()
setSource
Sets the source resource DN.
Syntax: Here is the method signature:
public void setSource(String source)
getSource
Gets the source resource DN.
Syntax: Here is the method signature:
public String getSource()
setTarget
Sets the DN for the target identity.
Syntax: Here is the method signature:
public void setTarget(String target)
getTarget
Gets the DN for the target identity.
Syntax: Here is the method signature:
public String getTarget()
getRequestParams
Gets the dynamic request parameters.
Syntax: Here is the method signature:
public ResourceRequestParam[] getRequestParams()
//refreshCodeMap
EntitlementRefreshInfo refreshResult =
stub.refreshCodeMap("cn=Devices,cn=DevicesLoopback,cn=driverset1,o=system"
);
System.out.println(refreshResult .getDetailedStatus());
System.out.println(refreshResult .getEntitlementDN());
System.out.println(refreshResult .getGuid());
System.out.println(refreshResult .getStatus());
//getRefreshStatus
CodeMapRefreshStatus[] refreshStatus
=stub.getRefreshStatus("cn=Devices,cn=DevicesLoopback,cn=driverset1,o=syst
em");
for (CodeMapRefreshStatus item : refreshStatus) {
System.out.println("Connection Name is: " +
item.getConnectionName());
System.out.println("Entitlement DN is: " +
item.getEntitlementDN());
System.out.println("Entitlement GUID is: " + item.getGuid());
System.out.println("Last Refresh of this Entitlement is: " +
item.getLastRefresh());
System.out.println("Status is: " + item.getStatus());
}
stub.checkCodeMapValueStatus("cn=Devices,cn=DevicesLoopback,cn=driverset1,
o=system",connectionName, codeMapValue);
System.out.println(checkStatus.getUpToDate());
System.out.println(checkStatus.getValue());
stub._setProperty(Stub.ENDPOINT_ADDRESS_PROPERTY,url +"/resource/
service");
stub._setProperty(Stub.SESSION_MAINTAIN_PROPERTY, Boolean.TRUE);
This section describes the Forgot Password Web Service, which allows SOAP clients to invoke a
subset of the actions available through the Password Management system.
NOTE: The URL for the Forgot Password Web Service can be changed on the Forgot Password Settings
page on the Administration tab in the identity applications. To change the URL, enter the new URL in
the Forgot Password Web Service URL field at the bottom of the page.
processForgotConf
Gets the forgot password configuration parameters.
This method returns an object of type ForgotPasswordConfWSBean. This object contains the
following information about the configuration:
Field Description
When a single user match is found, the user should be presented with the Challenge Response
screen. If getChaResInUse() returns false, then call processChaRes() and show the Forgot Success
screen directly without presenting the Challenge Response screen.
Syntax: Here is the method signature:
public ForgotPasswordWSBean processUser(final String userName)
throws RemoteException;
The parameters are described below:
userName specifies the name of a user.
processChaRes
Processes one or more challenge response answers for a particular user.
If the challenge response operation is authenticated, the following events may occur:
If the password policy action is EmailHint, the operation will send an email with the hint to the
user, and set the message to indicate that the operation succeeded. Therefore, the caller of this
method should go to the Forgot Password Change Success screen, and display the message.
If the password policy action is ShowHint, the operation will set the message to the user’s hint.
Therefore, the caller of this method should go to the Forgot Password Change Success screen,
and display the message with the hint on the page.
If the getAction() method returned by the processUser() operation is ChangePassword, then present
the user with the Password Change screen. Otherwise, go to the Forgot Success screen and present
the user with the message returned from the getMessage() method.
Syntax: Here is the method signature:
public ForgotPasswordWSBean processChaRes(final String userDN, final
String[] chaAnswers) throws RemoteException;
The parameters are described below:
userDN specifies the DN for a particular user.
chaAnswers provides an array of challenge response answers. The answers are processed in the
order in which they are presented.
processChgPwd
Resets the password for a particular user.
After the processChgPwd operation is called, the following events may occur:
If the change password operation succeeds, the caller of this method should go to the Forgot
Password Success screen, and display the success message.
If the change password operation fails, the error field on the ForgotPasswordWSBean object is
set to true, and the message field is populated with the corresponding error message.
Therefore, the caller of this method should stay on the password screen and display the error
message.
This method returns an object of type ForgotPasswordWSBean. After the processChgPwd operation
is called, the following methods are populated with values:
getTimeout()
getError()
If the getError() method returns false, you need to present the user with the Password Change
Success screen.
ForgotPasswordWSBean
Here is the complete structure of the ForgotPasswordWSBean object:
Field Description
Configured Return Link Shows the Return link to be used after the user
performs a forgot password operation.
Show Return Link Indicates whether to show the Return link after the
user performs a forgot password operation.
Identity Manager
By default, Identity Manager uses OSP for single sign-on access in Identity Manager. When you install
Identity Reporting and the identity applications, you specify the basic settings for user
authentication. However, you can also configure the OSP authentication server to accept
authentication from the Kerberos ticket server or SAML. For example, you can use SAML to support
authentication from NetIQ Access Manager. You can also enable single-sign by configuring Access
Gateway as a reverse proxy server that provides single sign-on and restricts access to the identity
applications and Identity Reporting servers by securely providing credential information for
authenticated users. For more information about OSP, “Understanding How OSP Works with Identity
Manager” on page 556.
NetIQ recommends that you complete the steps in the following checklist:
Checklist Items
1. Understand how OSP works in Identity Manager. For more information, see “Understanding
How OSP Works with Identity Manager” on page 556.
2. Understand how Identity Manager uses OSP for single sign-on access. For more information,
see “Understanding Authentication with One SSO Provider” on page 552.
3. Install the identity applications and password management components. For more
information, see the installation guide for your platform.
4. (Optional) Install Identity Reporting. For more information, see the installation guide for
your platform.
5. Configure the identity applications for single sign-on access using OSP. For more
information, see “Using One SSO Provider for Single Sign-on Access in Identity Manager” on
page 561.
6. Install the authentication system that you want to use with Identity Manager. For example,
Access Manager or Kerberos.
7. (Conditional) Configure Access Manager and OSP. For more information, see the following:
8. Verify the single sign-on settings. For more information, see Chapter 40, “Verifying Single
Sign-on Access for the Identity Applications,” on page 601.
in Identity Manager
Identity Manager includes NetIQ Self Service Password Reset (SSPR) to help users who have access
to the identity applications to reset their passwords without administrative intervention. The
installation process enables SSPR by default when you install or upgrade to the latest version of
Identity Manager. In a new installation, SSPR uses a proprietary protocol for managing
authentication methods. However, after an upgrade, you can instruct SSPR to use the NetIQ Modular
Authentication Services (NMAS) that Identity Manager traditionally has used for its legacy password
management program.
Depending on whether you want to use complex password management, you can configure one of
the following providers:
SSPR
NetIQ Self Service Password Reset is the default option when you install or upgrade Identity
Manager. For more information, see “Understanding the Default Self-Service Process” on
page 551.
Third-Party Provider Password Management
You can use an third-party program for managing forgotten passwords. You need to modify
some configuration settings for Identity Manager. For more information, see Using an External
System for Forgotten Password Management in the NetIQ Identity Manager Setup Guide for
Windows.
You configure this response in the SSPR Configuration Editor. After upgrading to a new version of
Identity Manager, you can configure SSPR to use the NMAS method that Identity Manager
traditionally has used for password management. However, SSPR does not recognize your existing
password policies for managing forgotten passwords.
You also can configure SSPR to use its proprietary protocol instead of NMAS. If you make this change,
you cannot return to using NMAS without resetting your password policies.
OSP Concepts
This section describes the basic concepts of OSP.
OSP Configuration
The configuration template for OSP resides in the osp-conf.jar file. The template includes
information from the following resources:
ism-configuration.properties file
identity applications configuration locations including Identity Vault and the file system
Most of the OSP properties are configured by using the Configuration Update utility
(configupdate.sh or configupdate.bat).
Each time an access token expires, the application requests a new access token from OSP. Each time
a browser request is made to OSP, the session time-to-live token is reset. Therefore, as long as a user
is using an application and the application is getting new access tokens, the user is not logged out.
A refresh token allows an application to obtain a new access token without user interaction. Refresh
tokens are used by applications that can keep them secure. Therefore, refresh tokens have long
lifetimes (default 30 days although effective lifetime is 48 hours due to revocation timeout). The
identity applications use refresh tokens in the backend.
OSP automatically revokes a refresh token that was obtained through a browser-based request when
an OSP session is logged out.
Applications that obtain refresh token through a backend request use the http[s]://
<host>[:port]/osp/a/idm/auth/oauth2/revoke endpoint as described in RFC 7009. A
refresh token obtained through OAuth 2.0 Resource Owner Password Grant (backend name/
password method) must be manually revoked. If a refresh token is not revoked through session
logout or through a backend request, then the token revocation information remains in the
oidpInstanceData (osp.sch) attribute on the LDAP user object. When a user does not log out of the
identity applications, OSP does not remove the login entry from the oidpInstanceData. If the user
continues to log in without logging out, the size of the entry grows large and prevents OSP from
updating the attribute and may cause a login failure for the user. For troubleshooting this issue, see
“Managing the Size of oidPInstancedata Attribute” on page 650.
OSP Cookies
OSP uses the following types of cookies in the authentication process:
OSP Session Cookie: Records user information, such as user identifier and time-to-live. It is
stored in temporary memory and not retained after the browser is closed. This type of cookie is
removed when a user closes the web browser. Absence or expiry of this cookie means that the
user is not authenticated. An OSP session cookie is represented as x-oidp-session<group
of hex chars>.
OAuth2 Cookie: Records OAuth 2.0 state between redirects. The default settings of Microsoft
browsers sometimes prevent the submission of OSP cookies to the OSP server that can be
determined by using browser developer tools or the OSP log. An OAuth2 cookie is represented
as x-oidp-oauth2-<group of hex chars>.
OSP URLs
OSP uses the following URLs in authentication:
grant
getattributes
logout
Examples used in the following sections assume a secured connection (HTTPS), where OSP is hosted
on a server named authentication host with the default port 8443, and the tenant is named
idm.
grant URL
Invoke this URL in a browser: https://authenticationhost:8443/osp/a/idm/auth/
oauth2/grant
This is the OAuth 2.0 Authorization endpoint defined by Section 3.1 of RFC 6749.
An implicit grant request can look similar to this:
https://authenticationhost:8443/osp/a/idm/auth/oauth2/
grant?response_type=token&redirect_uri=http://applicationhost:8180/
landing/com.netiq.ualanding.index/
oauth.html&client_id=ualanding&state=spiffystate0.5457210745662451
The allowable HTTP methods and parameters are as defined in Section 4 of RFC 6749.
getattributes URL
Invoke this URL in a browser: https:// authenticationhost:8443/osp/a/idm/auth/
oauth2/getattributes
This is the OAuth 2.0 Token endpoint defined by Section 3.2 of RFC 6749. The identity applications
issue this token to obtain identity information about the entity for which an access token was
created. The identity information is presented in the form of attributes (name-value pairs).
A token validation request from a web page can look similar to this:
https://authenticationhost:8443/osp/a/idm/auth/oauth2/
getattributes?attributes=name+expiration&access_token=eHwA[...etc.]&callba
ck=jQuery20305550091890618205_1463435676921&_=1463435676922
logout URL
Invoke this URL in a browser: https://authenticationhost:8443/osp/a/idm/auth/app/
logout
This is an OSP-specific endpoint that identity applications use to inform OSP that a user has
requested a logout and that OSP must invalidate the OSP session information from the encrypted
browser cookie. Typically this endpoint is invoked when a user selects Logout link on the identity
application's web page.
The following figure illustrates the components and process flow involved in basic authentication:
Implicit grant request
in response to 401 error
4
1
5
GET (http://<Identity Applications
DNS Name or IP Address>:8180/idmdash) Client Browser With access token One SSO
Provider (OSP)
WHO AM I
401 Error
WHO AM I
2 6
NOTE: The redirection endpoint URI must be an absolute URI as defined by Section 4.3 of
RFC3986. The endpoint URI may include an application/x-www-form-urlencoded
formatted query component according to Section 3.4 of RFC3986, which must be retained when
adding additional query parameters. The endpoint URI must not include a fragment
component. For more information, see sections 4.2.1 and 4.2.2 of RFC 6759.
8 The identity applications inject the access token in the HTTP Authorization header (typically
using the Bearer authentication type) and request the identity applications server for
validating the token.
9 The identity applications server contacts OSP via a back-channel HTTP request to validate the
supplied token and to obtain identity information associated with the token. The identity
applications server then responds to the HTTP request appropriately.
10 If the token is validated, the identity applications web pages allow the user to perform the tasks
the user is allowed to do. When additional HTTP requests are made to the identity applications
server, the access token is supplied as part of the request in an HTTP authorization header.
11 The access token in use is set to expire within the default expiration time interval of two
minutes. If the identity applications server attempts to validate an access token after the token
has expired, OSP informs the identity applications server that the token is no longer valid. The
identity applications server then responds with an HTTP 401 status. The web application page
again directs the client browser to OSP to request an access token.
12 OSP determines (via OSP's secure session cookie) that the user is still authorized (the session
has not timed-out due to inactivity and has not been explicitly logged out) and redirects the
user back to the web application page with an access token without asking the user for re-
entering the credentials.
To understand the authentication process through REST endpoints, see “OSP Login Request Example
by Using REST Endpoints” on page 648
export JAVA_OPTS
export CATALINA_OPTS="-Dcom.netiq.ism.config=/opt/netiq/idm/apps/tomcat/
conf/ism-configuration.properties -Dcom.netiq.osp.ext-context-file=/opt/
netiq/idm/apps/osp/lib/osp-conf-edir.jar -
Dcom.netiq.idm.osp.logging.level=INFO -
Dcom.netiq.idm.osp.client.host=10.71.128.247 -
Dcom.netiq.idm.osp.audit.enabled=false -
Dcom.netiq.idm.osp.logging.file.dir=${CATALINA_BASE}/logs -
Djava.awt.headless=true -Dsspr.applicationPath=/opt/netiq/idm/apps/sspr/
sspr_data -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8 -
Didmuserapp.logging.config.dir=/opt/netiq/idm/apps/tomcat/conf/ -
Dextend.local.config.dir=/opt/netiq/idm/apps/tomcat/conf/ -
Dlog4j.configuration=file:///opt/netiq/idm/apps/tomcat/conf/userapp-
log4j.xml -Dlogging.configuration=file:///opt/netiq/idm/apps/tomcat/conf/
logging.properties -Dcom.netiq.rpt.config.file=/opt/netiq/idm/apps/tomcat/
conf/ism-configuration.properties -Dlogback.configurationFile=/opt/netiq/
idm/apps/tomcat/conf/logback.xml -Dcom.novell.afw.wf.engine-id=ENGINE -
Dcom.microfocus.workflow.logging.level=INFO -
Djdk.tls.rejectClientInitiatedRenegotiation=true -
Djava.net.preferIPv4Stack=true"
The property, -Dcom.netiq.idm.osp.logging.level=ALL, controls the amount of
information that OSP logs. The Apache Foundation defines the following trace levels for log4j:
OFF
FATAL
ERROR
WARN
INFO
DEBUG
TRACE
ALL
By default, OSP logging is set to INFO. You can set other levels depending on what you are
troubleshooting. After setting the log level, restart Identity Applications. For example, restart Tomcat
by performing the following command:
systemctl restart netiq-tomcat.service
Using One SSO Provider for Single Sign-on Access in Identity Manager 561
This “public” host name or IP address should be the same as the value of
PublicServerName that you specified when you installed OSP.
In a distributed or clustered environment, all of the OAuth URLs should be the same
value. The URL should drive client access through your L4 switch or load balancer.
Also, the osp.war and configuration files must be installed on each deployment in
the environment.
2c For LDAP DN of Admins Container, click the Browse button, then select the container within
the Identity Vault that contains your identity applications administrator.
2d Specify the OAuth keystore file that you created when you installed OSP.
Include the keystore file path, keystore file password, key alias, and key password. The
default keystore file is osp.jks, and the default key alias is osp.
3 To modify the single sign-on settings, complete the following steps:
3a Click SSO Clients.
3b (Conditional) To specify the actual server DNS name or IP address, change all instances of
localhost.
The specified address must be resolvable from all clients. Use localhost only if all
access to the Dashboard will be local, including access through a browser.
This “public” host name or IP address should be the same as the value of
PublicServerName that you specified when you installed OSP.
In a distributed or clustered environment, all of the OAuth redirect URLs should be the
same value. The URL should drive client access through your L4 switch or load
balancer.
3c (Conditional) If you use non-default ports, update the port numbers for the following
Identity Manager components:
Identity Applications Administration
Identity Manager Dashboard
Identity Reporting
Identity Applications
4 Click OK to save your changes, then close the configuration utility.
5 Start Tomcat.
For more information about setting a secure channel, see “Setting Up a Secure Channel Between the
Application Server and the LDAP Server ” in the “Self Service Password Reset Administration Guide”.
562 Using One SSO Provider for Single Sign-on Access in Identity Manager
36 Using NetIQ Access Manager for Single
36
Sign-On
This section helps you configure NetIQ Access Manager and OSP to support single sign-on access in
Identity Manager.
Before beginning, review the following assumptions for these instructions:
You have installed a new, supported version of Access Manager.
You have installed a new version of Identity Manager.
Both installations use DNS names for the host name configuration.
Both installations use SSL protocol for communication.
(Conditional) For reverse-proxy single sign-on service, Access Manager and Identity Manager
are pointing to the same user store for authentication.
(Conditional) For SAML supported authentication, Access Manager and Identity Manager are
pointing to any supported user store. For more information, see NetIQ Access Manager
Administration Guide.
You have installed the certificate using DNS on application server where OSP is installed.
You need to be familiar with NetIQ Access Manager capabilities so that you understand the context
of the content in this section. For more information about NetIQ Access Manager, see the Access
Manager documentation website.
Identity
Identity Provider
Applications
SAML
Identity
Access One SSO Reporting
Gateway Provider
Self-Service
Password Reset
For more information, see “Customizing the Identity Server Login Page” in the NetIQ Access
Manager Administration Guide.
1 Modify the top.jsp file according to TID 7004020 and TID 7018468.
2 (Optional) For backup purposes, copy and rename the login.jsp file. For example, rename it
to idm_login.jsp.
3 Open the Administration Console for Access Manager.
4 Create a new user store to connect to Identity Vault.
4a Click Devices > Identity Servers > Edit > Local > User Stores.
4b Click New and specify the required Identity Vault details:
Name
Specify the DNS of the Identity Vault.
Admin Name
Specify the Identity Vault administrator name in the LDAP format.
Admin Password
Specify the Identity Vault administrator password.
Directory type
Select eDirectory from the list.
Server Replica
1. Click New and specify Name and IP Address/DNS Name of Identity Vault.
2. Check Use Secure LDAP connections.
3. Click Auto import trusted root to import the Identity Vault certificate.
4. Click OK.
Search Contexts
1. Click New.
2. In Search Context, specify the search container.
3. In Scope, select Subtree.
4. Click OK.
Name Value
JSP idm_login
MainJSP true
5f Click OK.
5g Click Finish.
6 To create a contract that uses the new login method, complete the following steps:
6a Click Contracts > New.
6b In the Configuration tab, specify the Display Name for the new contract. For example, IDM
Name/Password.
6c For URI, specify name/password/uri/idm.
6d Under Methods, add the method that you created in Step 5. For example, IDM Name/
Password.
6e Click Next.
6f In the Authentication Card tab, specify an ID for the card. For example,
IDM_NamePassword.
6g Specify an image for the card.
6h Click Finish.
7 To specify the default values for how the system processes the new authentication contract,
complete the following steps:
7a On the Local tab, click Defaults.
7b For User Store, specify Identity Vault as an LDAP user store.
7c For Authentication Contract, specify the contract that you created in Step 6. For example,
IDM Name/Password-Form.
7d Click OK.
8 To update the Identity Server, click Devices > Identity Servers > Update > Update All
Configuration.
Identity
Identity Provider
Applications
Identity
Reporting
Users
Access
Gateway
Self-Service
Password Reset
One SSO
Provider
You can either use an existing reverse proxy and add a new proxy service for protecting the web
resources or configure a new reverse proxy. While configuring the reverse proxy, create domain-
based services for the servers hosting OSP and SSPR, identity applications, and Identity Reporting to
enable single sign-on. You must configure these web resources as protected resources and specify
the authentication procedures and the policies that should be used to enforce protection.
This section discusses a domain based proxy-service method with an example configuration. For
more information about these proxy-service methods, see the NetIQ Access Manager 4.5
Administration Guide. Use information from the following table to understand the configuration
required for different deployment scenarios.
NOTE: In a distributed environment, if your applications do not have a common domain name and
reverse proxy is configured, then you cannot access the applications even after adding the
com.netiq.oauth.domain parameter in ism-configuration-properties file.
OSP and SSPR osp.mycompan osp.privatedns. Enable the /osp/* Page Matching
on a different y.com com following: Criteria
server /sspr/* <title>NetI
Rewrite Q Access</
Inbound title>
Query
String Required only
Data for OSP.
Rewrite
Inbound
Headers
Enable
Rewrite
Actions
You must be familiar with NetIQ Access Manager capabilities to understand the context of the
content in this section. For more information about NetIQ Access Manager, see the Access Manager
documentation website.
“Creating and Configuring the Proxy Service” on page 570
“Creating Protected Resources” on page 572
“Creating and Assigning a Form Fill Policy to a Protected Resource” on page 574
“Configuring a Rewriter Profile” on page 576
“Configuring Identity Providers” on page 577
“Configuring Additional Redirect URLs in OSP Configuration File” on page 578
“Testing the Single Sign-On” on page 579
You will first create a reverse proxy, for example rbpm, and then configure it to include domain-
based multi-homed proxy services.
Remember that for the Web Server IP Address setting of the proxy service, you need to specify the IP
Address for the identity applications server, and for the Web Server Host Name setting of the proxy
service, you need to specify the DNS name of the identity applications web server.
1 Log in to the Administration Console. For example, https://idmnam.acmeinfotech.com/
nps.
2 Click Devices > Access Gateways > AG-Cluster > NAM-RP.
4b Click OK.
5 Click the newly added proxy service (rbpm), then select the Web Servers tab.
The Web servers added to this list must contain identical web content. Configuring your system
with multiple servers with the same content adds fault tolerance and increases the speed for
processing requests.
For caching to work correctly, the web servers must be configured to maintain a valid time. They
should be configured to use an NTP server.
5a To enable SSL connections between the proxy service and its web servers, select Connect
Using SSL and select Do not verify or Import SSL Mutual Certificate for the Web Server
Trusted Root option.
Use Do not verify when you want the information between the Access Gateway and the
identity applications server encrypted, but you do not need the added security of verifying
the certificate of the identity applications server.
Use Import SSL Mutual Certificate to set up mutual authentication so that the identity
applications server can verify the proxy service certificate.
5b In the Connect Port field, specify the port that the web server uses for SSL communication.
This is the port that the identity applications server is listening from Access Gateway. For
example, by default, the listening port is 8180.
If the identity applications server is listening on an SSL port, ensure that you specify that
port and enable Connect Using SSL.
If identity applications are listening on a non-SSL port, ensure that you configure that port
and verify that Connect Using SSL is disabled.
5c Leave the other settings unchanged.
5d Click OK.
5e Under Access Gateway Servers, click Update All for AG-Cluster to apply changes of reverse
proxy service created.
/idmadmin/*
/IDMPROV/*
For Identity Reporting protected resource, include the following path:
/IDMRPT/*
/IDMDCS/*
Click OK.
3c Click the Protected Resources breadcrumb at the top of the Overview page to return to the
Protected Resources page.
Configuring Single Sign-On to Work With Active Directory Federation Service 581
Landing Page
Select the landing page for your users. The available options are Internal, External, and
None. The default value is None.
None: Specifies that the landing page will not be used. Select this option if the
IDP URL is indicated.
Internal: Specifies that the internal OSP landing page will be used.
External: Specifies that you will be redirected to an external OSP landing page.
Metadata Source
Select URL to use the AD FS metadata.
Metadata URL
Specify the AD FS metadata URL in this field.
https://adfs-server/FederationMetadata/2007-06/
FederationMetadata.xml
Load On Save
Select this option to load the metadata.
2g Click OK.
2h Click Yes to accept the certificate.
2i Restart Tomcat.
3 Create a relying party trust in AD FS to the OSP server using the OPS metadata. For more
information, see Microsoft documentation.
3a Use OSP metadata URL to finish the configuration. The default location of the URL is:
https://osp-server:port/osp/a/idm/auth/saml2/spmetadata
3b At the end of the configuration, ensure that you select Configure claims assurance policy
for this application.
3c (Conditional) If the Configure claims assurance policy configuration does not automatically
load, right click on the Relaying Party Trust you created in Step 3, then select Edit Claims
Insurance Policy.
3d Add two custom rules to have AD FS send the email attribute and a local Active Directory
server information to the OSP server. For more information, see Microsoft documentation.
Sending the email attribute
Use the following information to create the first custom rule to send the email
attribute:
Name
Specify a name for the rule.
582 Configuring Single Sign-On to Work With Active Directory Federation Service
Provide the Custom Rule
The following is a sample rule that you might need to edit for your environment.
c:[Type == "http://schemas.microsoft.com/ws/2008/06/
identity/claims/windowsaccountname", Issuer == "AD
AUTHORITY"]
=> issue(store = "Active Directory", types = ("mail",
"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/
upn"), query = ";mail,userPrincipalName;{0}", param =
c.Value);
Sending Via SAML
Use the following information to create the second rule to send the attribute to the
OSP server via SAML:
Name
Specify a name for the custom rule.
Provide the Custom Rule
The following is a sample rule that you might need to edit for your environment.
c:[Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/
claims/upn"]
=> issue(Type = "http://schemas.xmlsoap.org/ws/2005/05/
identity/claims/nameidentifier", Issuer = c.Issuer,
OriginalIssuer = c.OriginalIssuer, Value = c.Value,
ValueType = c.ValueType, Properties["http://
schemas.xmlsoap.org/ws/2005/05/identity/claimproperties/
format"] = "urn:oasis:names:tc:SAML:2.0:nameid-
format:transient", Properties["http://schemas.xmlsoap.org/
ws/2005/05/identity/claimproperties/namequalifier"] =
"http://adfs-server/adfs/services/trust", Properties["http:/
/schemas.xmlsoap.org/ws/2005/05/identity/claimproperties/
spnamequalifier"] = "https://osp-server:osp-port/osp/a/idm/
auth/saml2/metadata", Properties["http://
schemas.xmlsoap.org/ws/2005/05/identity/claimproperties/
spprovidedid"] = c.Value);
Configuring Single Sign-On to Work With Active Directory Federation Service 583
584 Configuring Single Sign-On to Work With Active Directory Federation Service
38 Using Kerberos for Single Sign-On
38
You can use Kerberos as an authentication method for the identity applications that allows single
sign-on (SSO). This also allows users to use Integrated Windows Authentication to log in to the
applications. This section provides instructions for configuring Active Directory to use Kerberos for
connecting to the identity applications:
“Configuring the Kerberos User Account in Active Directory” on page 585
“Configuring the Identity Applications Server” on page 586
“Configure the End-User Browsers to Use Integrated Windows Authentication” on page 588
“Logging In Using the Name Password Form” on page 589
NOTE: For domain or realm references, use uppercase format. For example @MYCOMPANY.COM.
setspn -A HTTP/DNS_Identity_Applications_server@WINDOWS-DOMAIN
userID
For example:
setspn -A HTTP/rbpm.mycompany.com@MYCOMPANY.COM rbpm
2c Verify setspn by entering setspn -L userID.
IMPORTANT: For domain or realm references, use uppercase format. For example,
@MYCOMPANY.COM.
NOTE: For domain or realm references, use uppercase format. For example @MYCOMPANY.COM.
1 To define your operating system settings for the Kerberos configuration, complete the following
steps:
1a Open the krb5 file in a text editor on the server that hosts the identity applications.
Linux: /etc/krb5.conf
Windows: C:\Windows\krb5.ini
UNIX: /etc/krb5/krb5.conf
1b Add the following information to the krb5 file:
NOTE: The novlua user needs permissions to create the Kerberos_login.config file.
com.sun.security.jgss.krb5.accept {
com.sun.security.auth.module.Krb5LoginModule required
debug="true"
refreshKrb5Config="true"
useTicketCache="true"
ticketCache="/opt/netiq/idm/apps/tomcat/kerberos/
spnegoTicket.cache"
doNotPrompt="true"
principal="HTTP/DNS_Identity_Applications_server@WINDOWS-
DOMAIN"
useKeyTab="true"
keyTab="/absolute_path/filename.keytab"
storeKey="true";
};
An example on a Windows server is as follows:
principal="HTTP/rbpm.mycompany.com@MYCOMPANY.COM"
keyTab="/home/usr/rbpm.keytab"
The value for principal must match the same value that you specified for Kerberos.
For more information, see Step 3 on page 586.
Provide the absolute path of the keytab file on your identity applications server. The
file does not have to reside in the default directory for the identity applications.
2c Refer to the Kerberos_login.config file in JVM java.security file with the
following line:
login.config.url.1=file:/opt/netiq/idm/apps/tomcat/kerberos/
Kerberos_login.config
The path listed is the default installation location for a Linux server.
An example of the java.security file on a Windows server is as follows:
login.config.url.1=file:c:/NetIQ/IdentityManager/apps/tomcat/
kerberos/Kerberos_login.config
3 To specify the Authentication method in the RBPM Configuration utility, complete the following
steps:
3a Open the Configupdate utility.
3b Click the Authentication tab.
3c Scroll down to the Authentication Method section.
3d In the Method field, select Kerberos.
3e In the Mapping attribute name field, specify cn.
4 (Optional) Repeat these steps for Identity Reporting if you installed the reporting component on
a separate server.
5 Configure the browsers that end-users use to access the identity applications. For more
information, see “Configure the End-User Browsers to Use Integrated Windows Authentication”
on page 588.
1 Log in to the computer where users will need single sign-on access.
2 Open the Internet options control panel.
3 Click Security.
4 Click Trusted Sites > Sites.
5 Add the DNS name of the identity applications server.
For example: rbpm.mycompany.com
6 Click Add, then click Close.
7 Click Custom level....
8 Under User Authentication, select Automatic logon with current user name and password.
9 Click OK.
10 In Internet Options, click Advanced.
11 Under Security, select Enable Integrated Windows Authentication.
12 Repeat this procedure for each end-user computer where you want to provide single sign-on
access to the identity applications and identity reporting.
Identity Governance
If you have installed Identity Manager, your users can log in a single time to access Identity
Applications, Identity Reporting, and Identity Governance from the Identity Manager Home page. To
ensure single sign-on access, you must configure both Identity Manager and Identity Governance for
single sign on. Users can easily shift between the two applications without needing to enter their
credentials a second time. Identity Governance must use the same authentication server that the
identity applications use.
This chapter includes the following topics:
“Ensuring Rapid Response to Authentication Requests” on page 591
“Configuring Identity Governance for Integration” on page 592
“Configuring Identity Manager for Integration” on page 595
NOTE: Identity Applications use https communication by default. You should create a wildcard
certificate on one of the servers and copy the certificate on all the servers.
For example, the wildcard certificate *.example.com is created on OSP server.
1 Add this certificate to the keystoreFile on all the servers.
2 Restart Tomcat on all the servers.
1 Stop Tomcat.
systemctl stop identity_tomcat.service
2 Navigate to the /opt/netiq/idm/apps/idgov/bin directory and run the ./
configutil.sh -password <passwd> command.
3 In the configuration utility (configutil), navigate to the Authentication Server Details tab and
perform the following steps:
1. De-select the Same as IG Server check box.
2. Specify the authentication server details that is deployed with Identity Applications in the
Protocol, Host Name, and Port fields.
3. Set the value for the Authentication Source parameter from File to Identity Vault
and then specify the LDAP user DN in the Name field. Specify the complete DN of the user.
For example, cn=uaadmin,ou=sa,o=data.
(Conditional) If you are using Identity Governance 3.6, then you must use the LDAP
bootstrap user.
(Conditional) If you are using Identity Governance 3.5.x, then setting the LDAP bootstrap
user is optional based on the authentication method you used.
4. Specify the values for the Client ID and Redirect URL under the OAuth SSO Client parameter.
NOTE: The values for these settings must match the values that you specify for Identity
Governance in the Identity Applications Configuration update utility.
NOTE: The values for these settings must match the values that you specify for Identity
Governance in the Identity Applications Configuration update utility.
Before adding the Identity Governance widgets in the Identity Manager dashboard, you must
configure the Identity Governance URL from the Identity Governance settings page.
1 Log in to Identity Manager Dashboard as an administrator.
2 Select Configuration > Identity Governance.
For more information, see “Configuring the Identity Governance Settings” on page 227.
Configuring Identity Manager for Integration When Identity Manager is Installed for
the First Time
Perform the following steps if you are configuring Identity Manager for integration when Identity
Manager is installed for the first time.
1 On the server where you installed Identity Applications, log in as an administrator.
2 Navigate to the /opt/netiq/idm/apps/configupdate directory.
3 Modify the configupdate.sh.properties file and update the following details:
Update the Identity Governance version in the apps_versions parameter. The supported
versions are 3.6.0 and 3.5.0, where 3.5.0 includes all versions of 3.5.x. The entries are a
comma-separated list. For example,
app_versions="ua#4.8.0,rpt#6.5.0,ig#3.6.0"
Add the entry for ig to the list of applications in the sso_apps parameter. The entries are a
comma-separated list. For example, sso_apps=ua,rpt,ig
4 Run the configuration update utility.
./configupdate.sh
5 Navigate to the Authentication tab and click Show Advanced Options.
6 (Conditional) If you are using Identity Governance 3.6, you must select the LDAP user check box
under the Identity Governance Bootstrap Administrator settings.
7 (Conditional) If you are using Identity Governance 3.5.x and the authentication method is set to
Kerberoes or SAML 2.0, then you must select the LDAP user check box under the Identity
Governance Bootstrap Administrator settings. If the authentication method is set to Name and
Password, you can select the file-based user system or the LDAP user as your bootstrap
administrator.
8 Navigate to the IG SSO Clients tab.
9 (Conditional) If you want to change the authentication server for Identity Governance after
installation, specify the values based on the settings that you specified in Step 3 and Step 4 of
the “Using the Same Authentication Server as Identity Manager” on page 592 section.
The following considerations apply to these settings:
(Conditional) If you are using Identity Governance 3.6, the default OAuth client ID is ig.
NOTE: The client secret is specified during the Identity Governance installation. You can
change the client ID and client secret after installation.
NOTE: The client secret is specified during the Identity Governance installation. You can
change the client ID and client secret after installation.
NOTE: Based on the Identity Governance version that you are using (3.6 or 3.5.x), you can
choose whether LDAP user is required or not. For more information, see Step 6 and Step 7.
11 (Conditional) If you have already installed Identity Governance, log in to the server where
Identity Governance is installed and update the configuration values in the configuration utility
(configutil) and configuration update utility (configupdate). For more information, see
Step 3 through Step 6 of the “Using the Same Authentication Server as Identity Manager” on
page 592 section.
12 Delete the localhost folder in the tomcat/work/Catalina directory.
13 Delete all the files and folders in the /opt/netiq/idm/apps/tomcat/temp directory.
14 Restart Tomcat on the Identity Governance server.
systemctl restart identity_tomcat.service
15 Restart Tomcat on the Identity Applications server.
systemctl restart netiq-tomcat.service
16 Add a link to Identity Governance from the Identity Manager Home page:
1. Log in to the Identity Manager dashboard.
2. Navigate to the Applications page.
3. Click Manage Applications and add the Identity Governance tile to the home page and
modify the widget to add the Identity Governance URL.
Configuring Identity Manager for Integration When Identity Manager and Identity
Governance are Upgraded
Perform the following steps to configure Identity Manager for integration when Identity Manager is
upgraded to 4.8 version.
1 (Conditional) If the uaconfig-ig-defs.xml or uaconfig-ig36-defs.xml file exists in the
/opt/netiq/idm/apps/tomcat/conf directory, move (or delete) it to a different location,
for example, /home directory.
2 (Conditional) If you are upgrading to Identity Governance 3.6 version from 3.5.x version,
perform the following steps:
1. Navigate to the /opt/netiq/idm/apps/tomcat/conf directory.
2. Back up the ism-configuration.properties file.
3. Open the ism-configuration.properties file with a text editor and delete the
following properties:
com.netiq.iac.redirect.url
com.netiq.cx.clientPass._attr_obscurity
com.netiq.cx.clientPass
com.netiq.idm.osp.fileauthsrc.filename
com.netiq.idm.osp.fileauthsrc.path
com.netiq.iac.bootstrapadmin.authsrc
4. Save and close the ism-configuration.properties file.
3 On the server where Identity Applications is running, navigate to the /opt/netiq/idm/apps/
configupdate directory.
4 Modify the configupdate.sh.properties file and update the following details:
Update the Identity Governance version in the apps_versions parameter. The supported
versions are 3.6.0 and 3.5.0, where 3.5.0 includes all versions of 3.5.x. The entries are a
comma-separated list. For example,
app_versions="ua#4.8.0,rpt#6.5.0,ig#3.6.0"
Add the entry for ig to the list of applications in the sso_apps parameter. The entries are a
comma-separated list. For example, sso_apps=ua,rpt,ig
5 Launch configuration update utility by running the ./configupdate.sh command and
perform the following steps:
1. (Conditional) If the configuration settings are reset to the default values during upgrade,
you must change the settings manually.
2. (Conditional) If you are using Identity Governance 3.6, you must select the LDAP user check
box under the Identity Governance Bootstrap Administrator settings.
3. Navigate to the IG SSO clients Tab and modify the values as per the considerations listed in
Step 9.
Identity Applications
After you install the identity applications and configure the settings for single sign-on, you should
verify that you can log in to the individual applications and switch among them without logging out.
By default, the applications use the following suffix in the URL link:
Identity Manager Administration: /idmadmin
Identity Manager Dashboard: /idmdash
Identity Reporting: /IDMRPT
To customize the suffix, use the Configupdate utility. For more information, see Configuring the
Settings for the Identity Applications in the NetIQ Identity Manager Setup Guide for Linux or
Configuring the Settings for the Identity Applications in the NetIQ Identity Manager Setup Guide for
Windows.
https://server:port/idmdash
Do not log in to the Dashboard.
2 In your browser, navigate to the User Application:
https://server:port/IDM-context
3 Verify that the User Application displays the same login page as shown in Step 1.
4 Log in to the User Application.
5 In the top right corner, click the Home icon and verify that you can access the Dashboard
without logging on again.
The identity applications and Identity Reporting use HTML forms for authentication. As a result, the
login process might expose user credentials. NetIQ recommends that you enable SSL protocol to
protect sensitive information. SSL protocol ensures that all communication between Identity
Manager components is secured.
You must have certificates to configure Tomcat server to communicate using SSL. You can obtain
certificates in two ways:
External trusted Certificate Authority (CA) issued certificate
Self-signed certificate
On Linux, the installation program automatically configures Identity Applications and Identity
Reporting components with a secured connection (HTTPS) using the certificate issued by the Identity
Vault. For a production environment, you are recommended to use a certificate issued by an
external Certificate Authority. You need to manually configure a secured connection on Windows.
Checklist Items
1. Ensure that you have a keystore to store the authentication certificates. For more
information, see “Creating a Keystore and Certificate Signing Request” on page 604.
2. (Conditional) In a test environment, use self-signed certificates. For more information, see
“Enabling SSL with a Self-signed Certificate” on page 607. For production environment, it is
recommended to use external CA issued certificate.
3. Ensure that you have configured the authentication server, identity applications, and
Identity Reporting to support SSL communication. For more information, see “Updating the
SSL Settings in the Configuration Utility” on page 614.
4. Configure the authentication server, identity applications, and Identity Reporting to support
SSL communication. For more information, see “Updating the SSL Settings for the
Application Server” on page 613 and “Updating the SSL Settings in the Configuration Utility”
on page 614.
cd /opt/netiq/idm/apps/tomcat/conf
export PATH=/opt/netiq/common/jre/bin:$PATH
or
cd C:\NetIQ\idm\apps\tomcat\conf
set PATH=C:\NetIQ\idm\apps\jre\bin:%PATH%
3 Create the keystore using the following command:
MyTomcatServer.NetIQ.com
Use correct spelling. If you spell any words incorrectly, you will see errors when you
generate your signed certificate from the signing authority.
5 (Optional) Create a simple text file to save a copy of the information that you provide for the
parameter values.
Saving this information helps ensure that you supply the same information when you apply to
the signing authority and when you import your certificate.
6 Copy the keystore file to the /tomcat/conf directory for each application server instance
where you have deployed Identity Manager components and SSPR.
NOTE: In Linux system, you should change the owner of the file to novlua:
After creating a keystore and generating CA certificate request, perform the following procedures to
import the certificates into the keystore:
For external CA signed certificate, see “Enabling SSL with a External CA Signed Certificate” on
page 605.
For self-signed certificate, see “Enabling SSL with a Self-signed Certificate” on page 607.
NOTE: When a system certificate expires, you must manually renew the expired certificates. For
more information, see NetIQ Identity Manager Certificate Management Guide.
After importing the certificate, the server displays Certificate was added to keystore.
3c Verify that the signed certificate is imported correctly into the conf directory using the
following command:
keytool -list -v -alias root -keystore keystore_name
For example:
keytool -list -v -alias root -keystore tomcat.ks
The server lists your certificates.
4 NetIQ recommends you to import the signed certificates to idm.jks. This is a centralized
keystore that stores all the certificates used by the identity applications and Identity Reporting.
For example:
Linux: keytool -import -trustcacerts -alias root -keystore /opt/netiq/
idm/apps/tomcat/conf/idm.jks -file IDMTESTREE.der
Windows: keytool -import -trustcacerts -alias root -keystore
C:\NetIQ\idm\jre\lib\security\cacerts -file IDMTESTREE.der
5 Update the SSL settings for the application server, see “Updating the SSL Settings for the
Application Server” on page 613.
After importing the certificate, the server displays Certificate was added to keystore.
15b NetIQ recommends you to import root certificate to Java cacerts location also.
For example:
keytool -import -trustcacerts -alias root -keystore /opt/netiq/
common/jre/lib/security/cacerts -file cert.der
or
keytool -import -trustcacerts -alias root -keystore
C:\NetIQ\idm\jre\lib\security\cacerts -file cert.der
15c Verify the signed certificate is imported correctly in the conf directory by using following
command:
keytool -list -v -alias root -keystore keystore_name
For example,
keytool -list -v -alias root -keystore tomcat.ks
The server lists the certificates.
After importing the certificate, the server displays Certificate was added to keystore.
8b NetIQ recommends that you also import the self-signed certificate to the Java cacerts
location.
For example:
keytool -import -alias IDMkey -keystore
/opt/netiq/common/jre/lib/security/cacerts -file IDMcertrequest.der
or
keytool -import -alias IDMkey -keystore
C:\NetIQ\idm\jre\lib\security\cacerts -file IDMcertrequest.der
8c Verify the signed certificate is imported correctly in the conf directory using the following
command:
keytool -list -v -alias alias_name -keystore keystore_name
For example,
keytool -list -v -alias IDMkey -keystore tomcat.ks
The server lists the certificates.
9 Update the SSL settings for the Application server. For more information, see “Updating the SSL
Settings for the Application Server” on page 613.
10 Update the SSL settings in the Configuration utility. For more information, see “Updating the SSL
Settings in the Configuration Utility” on page 614.
11 Update the SSL settings for Self Service Password Reset. For more information, see “Updating
the SSL Settings for Self Service Password Reset” on page 615
12 Restart Tomcat.
NOTE: By default, it is configured to use Open (insecure) mode to allow initial connectivity.
However, when you are using it in a production environment, ensure that you set the mode
to Strict.
7e Click Import and navigate to the certificate you created in Step 6. For example,
idmkeystore.ks.
7f Click Open and then click Save.
7g Restart Audit Server.
8 Restart Identity Manager services.
NOTE: By default, it is configured to use Open (insecure) mode to allow initial connectivity.
However, when you are using it in a production environment, ensure that you set the mode
to Strict.
10e Click Import and navigate to the certificate you created in Step 9. For example,
idmKeystore.ks.
10f Click Open and then click Save.
10g Restart Audit Server.
11 Restart Identity Applications.
Linux: /opt/netiq/idm/apps/tomcat/conf/
Windows: C:\NetIQ\idm\apps\tomcat\conf
<Connector port="https_port"
protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150"
SSLEnabled="true" scheme="https" secure="true" clientAuth="false"
sslProtocol="TLSv1.2" keystoreFile="path_to_keystore_file"
keystorePass="keystore_password" sslEnabledProtocols="TLSv1.2" />
where:
keystoreFile
Specifies the path to the keystore file, for example, idmapps.keystore file. Place the file in
the respective directories based on your platform:
Linux: /opt/netiq/idm/apps/tomcat/conf/
Windows: C:\NetIQ\idm\apps\tomcat\conf
keystorePass
Specifies the password for the idmapps.keystore file.
You must verify that the keystore password and the keystore file path are correct in server.xml
file.
To modify the values supplied by the installation, perform the following actions:
1 Stop Tomcat.
systemctl stop netiq-tomcat.service
2 Navigate to the conf directory for Tomcat, located by default in the following directories:
Linux: /opt/netiq/idm/apps/tomcat/conf/
Windows: C:\NetIQ\idm\apps\tomcat\conf
3 Ensure that you have a keystore file in the conf directory. For example, tomcat.ks on Linux or
idmapps.keystore on Windows.
If you create the keystore file after performing this procedure, ensure that you use the same file
name that you provide in this procedure. For more information, see “Creating a Keystore and
Certificate Signing Request” on page 604.
4 In a text editor, open the server.xml file from the conf directory.
5 Configure SSL port for the Tomcat server.
For example, connector port for SSL is 8543.
Also, update the redirectPort attribute to 8543 and save server.xml.
On Windows, when you install the identity applications and Identity Reporting, you should specify
https for the communication method. For example, Protocol. However, after installation, you can use
the ConfigUpdate utility to ensure that the applications communicate with SSL. For more
information about these parameters, see Configuring the Settings for the Identity Applications in the
NetIQ Identity Manager Setup Guide for Linux or Configuring the Settings for the Identity
Applications in the NetIQ Identity Manager Setup Guide for Windows.
To update the SSL settings:
1 Stop Tomcat.
2 Navigate to the RBPM Configuration utility, located by default in the installation directory for
the identity applications.
Linux: /opt/netiq/idm/apps/configupdate
Windows: C:\NetIQ\idm\apps\UserApplication
3 At the command prompt, use one of the following methods to run the configuration utility:
Linux: ./configupdate.sh
Windows: configupdate.bat
NOTE: You might need to wait a few minutes for the utility to start up.
4 (Conditional) If you configure SSL in the configupdate utility, navigate to the Authentication tab
and replace all the references mentioned in the SSO Clients tab.
https://<IP address>:<SSL Port number>
For example,
https://192.168.0.1:8543
5 Click Authentication > Show Advanced Options, and then modify the following settings:
OAuth server TCP port
Specifies the port for the authentication server.
Troubleshooting Tip
After updating the SSL settings for SSPR, if you are not able to access the SSPR landing page, perform
the following actions to update the necessary URLs in the SSPRConfiguration.xml file.
1 Navigate to the SSPRConfiguration.xml file:
/opt/netiq/idm/apps/sspr/sspr_data
2 Update all the URLs with appropriate IP address and port numbers.
The identity applications components incorporate several REST APIs that enable different features
within Identity Applications. The REST APIs and the corresponding documentation are available in
the idmappsdoc.war file. The war is automatically deployed when Identity Applications are
installed.
The APIs are broadly classified into three categories:
Access
This category includes the APIs that are related to administrator settings, user navigation rights,
user permissions, and assignment details.
Admin
This category includes the APIs that are related to logging, caching provisioning display settings,
and administrator assignments.
Catalog
This category includes the APIs that are related to roles, resources, SoDs, and driver services.
For more information about REST services, access idmappsdoc in your identity applications server.
NOTE: Identity applications REST services use OAUTH2 protocol to provide authentication. You can
invoke these APIs using a browser or curl command in scripts to automate the administrative tasks.
For more information, see the REST API documentation.
To access the REST API documentation on the server where identity applications are installed,
specify https://<identity applications servername>:<Port>/idmappsdoc, in the
address bar of your browser. For example: https://192.168.0.1:8543/idmappsdoc
Use Cases
The following use case describe some of the basic operations that can be performed by using
Identity Applications REST APIs:
User Management
A user is an individual in an organization (typically an employee) who requires access to one or more
resources. Users are added to Identity Manager to provision resources to them. When you create a
user, the user is stored as a user object in the Identity Vault. Each user object is associated with
attributes that act as identifiers for the user. For example, a user’s attributes can include user’s first
name, last name, phone numbers, employee number, manager, and e-mail address.
The following examples describe some of the basic user management operations, such as create a
user, delete an existing user, and update the details of an existing user such as change the email ID,
phone number, and manager. You can edit a single user or multiple users at the same time.
Access Rights Needed: Provisioning Administrator
Task Management
Tasks are the activities assigned to a user who is responsible for granting permissions. The user can
either approve or deny the request for permissions one at a time or perform a bulk action for
multiple simple requests that do not require detailed information.
The following examples describe the basic operations that can be performed by using the REST APIs,
such as getting a task list and filtering tasks based on recipients.
NOTE: The query parameters provided with the IDMProv/rest/access/tasks/list REST API
can be used to match the legacy /v1/wf/workitems?filter={recipient}={value} RIS API
to obtain the task list for a specific recipient. However, the IDMProv does not provide a dedicated
REST API (similar to the RIS API) and can only filter the recipient’s tasks that assigned to the logged-in
user. For more information on the Identity Applications REST APIs and supported query parameters,
see the REST API documentation.
The following sections contain information about troubleshooting different components of identity
applications:
“Using Log Files for Troubleshooting” on page 629
“Troubleshooting E-Mail Based Approval Issues” on page 646
“Troubleshooting Self Service Password Reset Issues” on page 647
“Troubleshooting Authentication Issues” on page 648
“Troubleshooting General Issues” on page 653
“Troubleshooting Multi-Threaded Role and Resource Service driver Issues” on page 658
“Troubleshooting Workflow Related Errors” on page 661
Troubleshooting 629
to
<param name="ConversionPattern" value="%d [%p] %C %m%n"/>
After making this change, the following example trace entry:
2017-08-29 16:05:05,392 DEBUG [RBPM] Entity Definition found: sys-nrf-navitem
NOTE: The examples in the subsequent sections contain a complete class path to help you correctly
interpret the meaning of log entries in the catalina.out file.
630 Troubleshooting
com.novell.srvprv.spi.vdata.util.CacheUtil- [RBPM] DAL Definition RETRIEVED from
cache: VDD_ENTITY_ATTR_sys-nrf-navitem
Troubleshooting 631
2017-08-29 16:05:05,478 [http-bio-8443-exec-10] DEBUG
com.novell.srvprv.impl.vdata.model.VirtualDataAccess- [RBPM] Attribute ID:
givenName
632 Troubleshooting
2017-08-29 16:05:05,481 [http-bio-8443-exec-10] DEBUG
com.novell.srvprv.impl.vdata.model.VirtualDataAccess- [RBPM] VDA.getLdapAttributes
Attributes and values
When an entity model is changed, you must clear the VDA cache for the changes to take effect. For
example, entity changes occur when a new attributes is added or the existing attributes are modified
or removed.
The first entry indicates that code map table refresh action is being initiated. The second entry
specifies that it is unable to refresh the code map table for
cn=exchangemailbox,cn=ad,cn=dset,ou=idm,o=system entitlement. The next line has the
time interval when the entitlement will be refreshed. The next two lines specify that code map table
was not refreshed for cn=group,cn=ad,cn=dset,ou=idm,o=system and
cn=useraccount,cn=ad,cn=dset,ou=idm,o=system entitlements.
The code map refresh process can fail when either connected system or the Identity Vault is not up
at the time of obtaining entitlement information. The trace logs the actual reason for failure.
Troubleshooting 633
When Multiple Users Try to Authenticate From Different
Interfaces
OSP supports the OAuth2 specification and requires an LDAP authentication server. By default,
Identity Manager uses Identity Vault (eDirectory) as an authentication server. When multiple users
try to log in to OSP from different user interfaces of the identity applications, the users are
redirected to the default landing page upon a successful login. When the access token expires within
the login session, OSP validates the token and refreshes the session by generating a new access
token without the user’s involvement. Otherwise, it directs the user to the login page. Such a trace
looks similar to the following:
2016-03-08 06:14:28,509 [http-bio-8443-exec-801] DEBUG
com.netiq.idm.auth.oauth.OAuthFilter- [RBPM] Original request going to RBPM is:
https://www.snet.acme.com:443/IDMProv/
workDashboard.do?apwaLeftNavItem=JSP_MENU_TASKS
634 Troubleshooting
request from SSO filter oauth
This trace indicates that the user is accessing the application after some idle time. The last message
indicates that the token has expired. When the user tried to log in again, the token failed the
validation and as a result the user cannot be logged in.
at com.sun.mail.smtp.SMTPTransport.issueCommand(SMTPTransport.java:879)
at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:599)
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:319)
at com.novell.soa.notification.impl.MailEngine.send(MailEngine.java:344)
... 1 more
When an e-mail approval notification is not delivered, the first step should be to look at the logs and
determine whether the connection is proper, mail server is running and accessible. Sometimes the
e-mail fails to comply with e-mail template and fails to deliver.
Troubleshooting 635
2016-03-08 08:43:10,660 [pool-2-thread-5] INFO
com.novell.idm.nrf.service.RoleManagerService- [RBPM] [Role_Request] Requested by
cn=David.Scully,ou=Active,ou=People,o=acme, Target DN:
CN=Kaitlin.Demore,OU=active,OU=People,O=acme, Source
DN:cn=PennDOT_Vehicle_Certification,cn=Application
Access,cn=Level10,cn=RoleDefs,cn=RoleConfig,cn=AppConfig,cn=UserApplication,cn=idm
361,ou=services,o=acme, Request DN:cn=20160308084310-
15da49b28ddf4ee1b7d71b4ce220c080-
0,cn=Requests,cn=RoleConfig,cn=AppConfig,cn=UserApplication,cn=idm361,ou=services,
o=acme, Request Category: 10, Request Status: 0, Original Request Status: 0,
Correlation ID: UserApp#UserStartWorkflow#082080ec-5b10-498f-b87d-28825ab63278
636 Troubleshooting
5339699630814a91ac44530a244a02ba-
5,cn=Requests,cn=RoleConfig,cn=AppConfig,cn=UserApplication,cn=idm361,ou=services,
o=acme, Request Category: 10, Request Status: 0, Original Request Status: 0,
Correlation ID: UserApp#UserStartWorkflow#082080ec-5b10-498f-b87d-28825ab63278
Troubleshooting 637
0,cn=Requests,cn=RoleConfig,cn=AppConfig,cn=UserApplication,ou=services,o=acme</
value>
<value>cn=20160308084310-3c5b20b79cc046bb8267a41cad88a96a-
1,cn=Requests,cn=RoleConfig,cn=AppConfig,cn=UserApplication,ou=services,o=acme</
value>
<value>cn=20160308084310-fc24ac874aca4fc8b1db0e1d7662d9b3-
2,cn=Requests,cn=RoleConfig,cn=AppConfig,cn=UserApplication,ou=services,o=acme</
value>
<value>cn=20160308084310-411abb1e8f6f488182c37c8629275245-
3,cn=Requests,cn=RoleConfig,cn=AppConfig,cn=UserApplication,ou=services,o=acme</
value>
<value>cn=20160308084310-211a591e09b04fbbb195fb14d7f4df07-
4,cn=Requests,cn=RoleConfig,cn=AppConfig,cn=UserApplication,ou=services,o=acme</
value>
<value>cn=20160308084310-5339699630814a91ac44530a244a02ba-
5,cn=Requests,cn=RoleConfig,cn=AppConfig,cn=UserApplication,ou=services,o=acme</
value>
<value>cn=20160308084310-df2398cf36a042f0ac2241e693efb93c-
6,cn=Requests,cn=RoleConfig,cn=AppConfig,cn=UserApplication,ou=services,o=acme</
value>
</attr>
</wfRoleRequest>
2017-09-22 09:28:26,495 [DEBUG] CacheUtil [RBPM] Role object was found in cache:
cache-key-nrf-config
2017-09-22 09:28:26,495 [DEBUG] CacheUtil [RBPM] Role object RETRIEVED from cache:
cache-key-nrf-config
2017-09-22 09:28:26,510 [DEBUG] CacheUtil [RBPM] Role object was found in cache:
cache-key-nrf-config
2017-09-22 09:28:26,510 [DEBUG] CacheUtil [RBPM] Role object RETRIEVED from cache:
cache-key-nrf-config
638 Troubleshooting
Authorized result for:
cn=resourceManager,cn=System,cn=Level20,cn=RoleDefs,cn=RoleConfig,cn=AppConfig,cn=
User Application Driver,cn=driverset1,o=system:role:read=true
2017-09-22 09:28:26,522 [DEBUG] CacheUtil [RBPM] Role object was found in cache:
cache-key-nrf-config
2017-09-22 09:28:26,522 [DEBUG] CacheUtil [RBPM] Role object RETRIEVED from cache:
cache-key-nrf-config
2017-09-22 09:28:26,534 [DEBUG] CacheUtil [RBPM] Role object was found in cache:
cache-key-nrf-config
2017-09-22 09:28:26,534 [DEBUG] CacheUtil [RBPM] Role object RETRIEVED from cache:
cache-key-nrf-config
2017-09-22 09:28:26,545 [DEBUG] CacheUtil [RBPM] Role object was found in cache:
cache-key-nrf-config
2017-09-22 09:28:26,545 [DEBUG] CacheUtil [RBPM] Role object RETRIEVED from cache:
cache-key-nrf-config
2017-09-22 09:28:26,557 [DEBUG] CacheUtil [RBPM] Role object was found in cache:
cache-key-nrf-config
2017-09-22 09:28:26,557 [DEBUG] CacheUtil [RBPM] Role object RETRIEVED from cache:
cache-key-nrf-config
2017-09-22 09:28:26,567 [DEBUG] CacheUtil [RBPM] Role object was found in cache:
cache-key-nrf-config
2017-09-22 09:28:26,567 [DEBUG] CacheUtil [RBPM] Role object RETRIEVED from cache:
cache-key-nrf-config
Troubleshooting 639
2017-09-22 09:28:26,582 [DEBUG] RuntimeAuthDelegatorBase [RBPM] Time to calculate
sel service access rights: 0milliseconds.
2017-09-22 09:28:26,582 [DEBUG] JuiceHelper [RBPM] Kicked out of main loop with:
openR=-1 closeR=-1 i=0 idx=-1
2017-09-22 09:28:26,583 [DEBUG] CacheUtil [RBPM] Role object was found in cache:
cache-key-nrf-config
2017-09-22 09:28:26,583 [DEBUG] CacheUtil [RBPM] Role object RETRIEVED from cache:
cache-key-nrf-config
The first log entry is the request to find the role object from the cache. The second log entry is the
response that is returned, and it indicates that the role object was found. The object is then read and
displayed in Role Catalog.
640 Troubleshooting
at
org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:
1284)
at
org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:
1197)
at
org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1087)
at
org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.jav
a:5229)
at
org.apache.catalina.core.StandardContext.startInternal(StandardContext.jav
a:5516)
at
org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at
org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java
:901)
at
org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
at
org.apache.catalina.core.StandardHost.addChild(StandardHost.java:649)
at
org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1083)
at
org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1880)
at
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:
1142)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java
:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: liquibase.exception.LockException:
liquibase.exception.DatabaseException: Error executing SQL CREATE TABLE
ora_user_id.DATABASECHANGELOGLOCK (ID NUMBER(10) NOT NULL, LOCKED NUMBER(1)
NOT NULL, LOCKGRANTED TIMESTAMP, LOCKEDBY NVARCHAR2(255), CONSTRAINT
PK_DATABASECHANGELOGLOCK PRIMARY KEY (ID)): ORA-01031: insufficient
privileges
at
liquibase.lockservice.StandardLockService.acquireLock(StandardLockService.
java:209)
at
liquibase.lockservice.StandardLockService.waitForLock(StandardLockService.
java:148)
at liquibase.Liquibase.clearCheckSums(Liquibase.java:886)
at
com.novell.soa.persist.DatabaseSchemaUpdate.unappliedChangeSets(DatabaseSc
hemaUpdate.java:340)
... 20 more
Troubleshooting 641
To resolve this issue, set the following Java system properties for Liquibase in the setenv startup
script at /opt/netiq/idm/apps/tomcat/bin/ or c:\NetIQ\idm\apps\tomcat\bin:
-Dliquibase.schemaName={schema_owner_id}
-Dliquibase.catalogName={schema_owner_id}
The first log entry indicates that a connection to the database is initiated. The second log entry
specifies that the database schema is being validated. The subsequent entries specify that the
presence of database tables is being checked. The last trace entry indicates that afdocument table
is not found.
642 Troubleshooting
When Liquibase validates the database schema, it generates log entries similar to the following:
2017-09-22 09:39:47,693 [INFO] liquibase liquibase: Reading from
public.databasechangelog
Troubleshooting 643
You must restart the application server to apply the changes. You cannot bring up the identity
applications until the schema validation succeeds.
The trace displays object unavailable errors only when errors occur while retrieving an object.
644 Troubleshooting
2017-09-22 11:53:33,646 [TRACE] EngineStateDAO [RBPM] Updating heartbeat of Engine
Engine State: engineId = ENGINE, heartBeat=
2017-09-22 11:52:33.637, startTime= 2017-09-22 09:55:31.532, shutdownTime= 2017-
09-22 09:52:58.773, engineState= Running
If the workflow engine is not properly shutdown due to some reason, the identity applications
assume that the engine is still running when you start it the next time. The following example traces
are logged to indicate this situation.
2017-09-22 12:01:43,384 [WARN] EngineImpl [RBPM] Duplicate engine id detected. This
engine may not have been shutdown cleanly or another engine is running with engine-
id: ENGINE. Waiting 60000 ms for heartbeat to timeout.
If SELinux is configured to run in Enforcing mode, logrotate might not work as expected.
Workaround: Run the following command:
semanage fcontext -a -t var_log_t '/opt/netiq/idm/apps/tomcat/logs(/.*)?'
restorecon -Frvv /opt/netiq/idm/apps/tomcat/logs
Troubleshooting 645
Troubleshooting E-Mail Based Approval Issues
Empty E-Mail Based Approval Token in the Provisioning Request
Mail
This can occur if E-Mail Based Approval is not enabled. For example, the feature is accidentally
disabled while using the new e-mail templates in PRDs.
Check the configuration in the Identity Manager Dashboard and enable the feature.
646 Troubleshooting
When is Server Restart Needed
On a cluster setup, if you made changes to the incoming mailbox properties or turned off E-Mail
Based Approval, you may require to restart the cluster nodes other than the active node.
If you are continuously getting errors while trying to connect to the mailbox and the issue persists
for hours, verify the connectivity between the mailbox and the host.
Troubleshooting 647
Workaround: Disable Compatibility View in Internet Explorer for the domain that hosts your SSPR
web application.
648 Troubleshooting
Landing Page makes “who am I” REST call to the Identity Applications server
The Landing Page makes a request to Identity Applications with no authorization header as the
landing page has no access token.
GET http://prvdvnam850.namdom025.lab:8180/IDMProv/rest/access/users/
fullName
Authorization header: none
Result: 401 error
Troubleshooting 649
Browser redirects to the Landing OAuth Result Page
GET http://<ipaddress>:8180/idmdash/oauth.html
Cookies: x-oidp-session59303d34382c2d310 200-AZ...b/HQ~~ End Of Session
Result: 200
A fragment containing the access token (see section 4.2.2 of RFC 6749) is appended to the URL. The
Landing page extracts the OAuth access token from this fragment. You cannot see this fragment
because HTTP does not capture it.
650 Troubleshooting
If a user is not required to log out from the identity applications, perform one of the following
actions to manage the size of the oidPInstancedata attribute:
Shorten the validity period of the login entry for the user. This allows OSP to automatically
remove the login entry for the user. The validity period is controlled by Refresh token lifetime
(hours) setting for OSP in the ConfigUpdate utility. The default value to store a login entry is 48
hours (2 days). After making the change in the ConfigUpdate utility, restart the Tomcat server
where OSP is deployed.
Periodically delete the oidpInstanceData attribute from the user by using an LDAP based tool
(iManager, jXplore, Apache Studio, and so on).
When the user logs in again, OSP fails to update the attribute with the new login entries
because of insufficient space to store the entries. However, you can change the maximum
length for storing the login entries based on your requirement.
The user does not does not have sufficient rights in the Identity Vault.
The OSP schema has not been extended in the Identity Vault and the user does not have this
attribute.
Troubleshooting 651
Identity Applications Does Not Terminate the Dashboard Session
Even After the Session Expires When Configured With a Third-
Party Authentication Service
Issue: When you configure the Identity Applications for single sign-on with NetIQ Access Manager
(NAM) or Active Directory Federation Service (AD FS) as an authentication service, then the
Dashboard session will not terminate even after the session expires. This issue is observed because
the default session timeout values for the Identity Applications, NAM, and AD FS are different.
Workaround: Ensure that you set the same session timeout values for all the sessions. For example,
20 minutes. To set the session timeout value for Identity Applications, see Authentication
Configuration in the NetIQ Identity Manager Setup Guide for Linux or Authentication Configuration
in the NetIQ Identity Manager Setup Guide for Windows.
To set the session timeout for NAM, perform the following actions:
1 Open the Administration Console for Access Manager.
2 Navigate to Devices > Identity Servers > IDPCluster and click Edit to modify the cluster
configuration.
3 In IDPCluster, go to Local > Contracts and select the contract between the Access Manager and
Identity Manager.
4 In the General tab, specify the Authentication Timeout value in minutes.
5 Click Apply.
To set the session timeout value for AD FS, perform the following actions:
1 (Conditional) To set the session timeout from the command line:
1a Launch the Windows PowerShell application on the server where Identity Applications is
installed.
1b Execute the following command:
Set-ADFSRelyingPartyTrust [-Targetname <relying_party>] [-
TokenLifetime <Int32>]
where,
-Targetname: Specifies the name of the relying party trust that is used to connect to the AD
FS.
-TokenLifetime: Specifies the duration (in minutes) for which the claims that are issued to
the relying party are valid (that is, the session timeout).
2 (Conditional) To set the session timeout from the AD FS user interface,
2a Open Microsoft AD FS Management console.
2b Right-click Service and then select Edit Federation Service Properties.
2c In the General tab, specify the Web SSO lifetime value in minutes.
2d Click Apply.
652 Troubleshooting
Troubleshooting General Issues
You might encounter the following issues while working with the identity applications:
“Mismatch of Certificates Used by Identity Manager Engine and User Application Causes Code (-
9205) Error in vnd.nds.stream” on page 653
“User Application Driver Fails to Communicate with the User Application Server on a Secured
Connection” on page 654
“Entitlement Configuration Error During Codemap Refresh” on page 654
“Error After Logging Out of the Dashboard on Linux” on page 655
“Bulk Import of Roles and Resources May Not Update the Permission Index” on page 655
“Absence of Notification Templates Causes Workflow Error” on page 655
“Error Occurs When You Add a New Application With a Logo” on page 656
“User Application Driver Fails to Process Delete Events” on page 656
“Identity Applications login failure while attempting to contact the authentication service” on
page 656
“Searching an Entity With a Combination of String and Integer Value Is Not Supported” on
page 657
“Searching an Entity with Substring Value for DN Attribute Is Not Supported” on page 657
“Unable to Change the Availability Status in the Availability Settings Page” on page 657
“New Request Page Not Listing Users in the Recipients Field” on page 658
“Advanced Search for User Entities Displaying an Error When the Search Attribute Contains a
Hyphen” on page 658
Troubleshooting 653
For example, /opt/novell/eDirectory/lib64/nds-modules/jre/lib/security/
cacerts on Linux.
2 Determine the certificate used by the User Application.
2a Navigate to the User Application keystore.
For example, /opt/netiq/idm/apps/jre/lib/security/cacerts.
2b List the certificates by running the following command from the command line:
654 Troubleshooting
2017-11-03 15:55:21,373 [http-bio-8443-exec-340] ERROR
com.novell.idm.nrf.persist.DirXMLDriverDAO- [RBPM] Error occurred parsing
the entitlement configuration XML: cn=EntitlementConfiguration,cn=AD
Driver for Groups,cn=DriverSet,o=system
java.lang.StringIndexOutOfBoundsException: String index out of range: 0
Workaround: Add the missing values in the entitlement configuration for the driver. For example,
<entitlement data-collection="false" dn="CN=ExchangeMailbox,CN=AD Driver
for Groups,CN=DriverSet,O=system"parameter-format="idm4" resource-
mapping="true" role-mapping="true">.
Troubleshooting 655
Workaround: Deploy the required packages for notification, email, and provisioning templates to
the Identity Vault.
1 Open your project in Designer.
2 In the Outline pane, expand your project.
3 Right-click Default Notification Collection.
4 Select Add All Templates.
5 Select Overwrite Existing Templates, then click OK.
6 Right-click Default Notification Collection, select Live, and click Deploy.
7 Click OK to deploy.
656 Troubleshooting
ERROR [com.netiq.idm.auth.oauth.OAuthRestFilter] (https-jsse-nio-8543-
exec-1) [RBPM] An error occurred while attempting to contact the
authentication service.
In case of Kubernetes environment, resolve this issue by performing the following actions:
1. Stop tomcat.
2. Go to the setenv.sh file located in tomcat directory under the idm/apps. For example,
Linux: /opt/netiq/idm/apps/tomcat/bin/setenv.sh
Windows: C:\NetIQ\idm\apps\tomcat\bin\setenv.bat
3. Add the property -Dcom.sun.net.ssl.checkRevocation=false in JAVA_OPTS as:
export JAVA_OPTS="-Dcom.sun.net.ssl.checkRevocation=false"
Alternatively, you can set JAVA_OPTS="-Dcom.sun.net.ssl.checkRevocation=false"
4. Start tomcat.
Troubleshooting 657
This issue can be observed in one scenario when the Identity Applications 4.8 version is installed for
the first time and other when you upgrade Identity Applications from 4.8 to 4.8.1 version. Upgrading
from a prior version of Identity Applications does not display any error.
Workaround: To resolve this issue, create a new Provisioning Request Definition (PRD) and assign
the trustee rights to the required user or data container to access the PRD. For more information,
see Creating a Provisioning Request Definition in the NetIQ Identity Manager - Administrator’s Guide
to Designing the Identity Applications.
658 Troubleshooting
[02/22/18 12:34:14.586]:Role and Resource Service driver ST:Submitting
document to subscriber shim:
[02/22/18 12:34:14.586]:Role and Resource Service driver ST:
<nds dtdversion="4.0" ndsversion="8.x">
<source>
<product edition="Advanced" version="4.7.0.0">DirXML</product>
<contact>NetIQ Corporation</contact>
</source>
<input>
<nrf:resrequest Disjoint-Set="NETIQ"
dn="O=system\CN=driverset1\CN=User Application
Driver\CN=AppConfig\CN=RoleConfig\CN=ResourceRequests\CN=2018022212341
4-b4645d87e41043459ae4546fd000dcb8-0" event-id="idm-sles12-
195#20180222070414#1#1:bc9e66f7-ddf3-45bf-8b4d-f7669ebcf3dd"
xmlns:nrf="urn:dirxml:nrf"/>
</input>
</nds>
While storing an event in the driver storage, check the log for information about the disjoint set
and the event IDs of all the commands for which processing is yet to complete.
[02/22/18 12:29:06.544]:Role and Resource Service driver :: Thread
ID:40 Processing request
DN: O=system\CN=driverset1\CN=User Application
Driver\CN=AppConfig\CN=RoleConfig\CN=Requests\CN=20180222122835-
9b90b601af744f5e890151b97d7fe7e4-0
[02/22/18 12:29:06.545]:Role and Resource Service driver ST:Receiving
DOM document from application.
[02/22/18 12:29:06.545]:Role and Resource Service driver ST:
<nds>
<source>
<product version="4.7.0.0">NetIQ Role and Resource Service Driver</
product>
<contact>NetIQ Corporation</contact>
</source>
<input>
<status level="success">Updating DirXML-DriverStorage attributes</
status>
<init-params event-id="storage">
<subscriber-state>
<nrf:request Disjoint-Set="NETIQ" dn="O=system\CN=driverset1\CN=User
Application
Driver\CN=AppConfig\CN=RoleConfig\CN=Requests\CN=20180222122835-
9b90b601af744f5e890151b97d7fe7e4-0" event-id="idm-sles12-
195#20180222065835#1#39:f1f354dc-81fa-4d8c-aa7c-dc54f3f1fa81"
xmlns:nrf="urn:dirxml:nrf"/>
<nrf:request Disjoint-Set="NETIQ" dn="O=system\CN=driverset1\CN=User
Application
Driver\CN=AppConfig\CN=RoleConfig\CN=Requests\CN=20180222122835-
de01c6eb63b34ec28ae66e1057e3f524-0" event-id="idm-sles12-
195#20180222065835#1#40:fdff5c1e-74d6-4415-9a61-1e5cfffdd674"
xmlns:nrf="urn:dirxml:nrf"/>
</subscriber-state>
Troubleshooting 659
You can check the commands for which processing is yet to complete through iManager.
1. In iManager, open the Identity Manager Administration page.
2. Open the driver set that contains the multi-threaded Role and Resource Service driver.
3. If the driver set is not listed on the Driver Sets tab, use the Search In field to search for and
display the driver set.
4. Click the driver set to open the Driver Set Overview page.
5. Locate the driver icon, then click the upper right corner of the driver icon to display the
Actions menu.
6. Click Edit Properties to display the driver’s properties page.
7. Click General > DirXML-DriverStorage.
Logs display the following information:
Disjoint key which the driver evaluates from the request command.
Information about the worker threads to which the driver will submit the request.
Thread Id's of the worker threads.
Below is a sample log file content.
[02/23/18 11:59:34.977]:Role and Resource Service driver ST:: Thread
ID:65 Worker threads not found for the disjoint key. Disjoint Key: NETIQ
[02/23/18 11:59:34.979]:Role and Resource Service driver ST:: Thread
ID:65 Registered the worker threads with disjoint key. Disjoint Key:
NETIQ
<status event-id="idm-sles12-195#20180223062903#1#1:78daa132-558c-4d3f-
b088-32a1da788c55" level="success">Thread ID:65 Successfully updated
the event in the Driver Storage.
Request DN: O=data\OU=netiq\CN=netiq1</status>
If the driver storage is full, information about event retry is printed in the logs. The log file
contains entries similar to the following:
[01/20/18 18:53:45.484]:Role and Resource Service Driver ST:: Thread
ID:30 Cant update the command in Driver Storage. Driver storage is
full!!!
[01/20/18 18:53:45.484]:Role and Resource Service Driver ST:: Request
processing completed in Roles and Resource driver
[01/20/18 18:53:45.485]:Role and Resource Service Driver ST:Requesting
30 second retry delay.
[01/20/18 18:53:45.485]:Role and Resource Service Driver ST:
DirXML Log Event -------------------
Driver: \NOVELL_1\system\driverset1\Role and Resource Service
Driver
Channel: Subscriber
Status: Retry
Message: Code(-9006) The driver returned a "retry" status
indicating that the operation should be retried later. Detail from
driver: Thread ID:30 Cant update the command in Driver Storage. Driver
storage is full!!!
660 Troubleshooting
Troubleshooting Workflow Related Errors
Resolving StackOverflow Error on Recursive Workflows
Issue: In a recursive workflow, when the event does not flow to the next approval, the following
StackOverflow error is seen in the catalina.out log file:
Servlet.service() for servlet [spring] in context with path [/IDMProv]
threw exception [Handler dispatch failed; nested exception is
java.lang.StackOverflowError] with root cause java.lang.StackOverflowError
This issue may be observed in a specific environment in which Identity Manager is deployed. For
more information, see “Increasing the Stack Size for Recursive Workflows” on page 99.
Workaround: To resolve this issue, set the value for the maxThreads attribute to 400 in the
server.xml file located at:
Linux: /opt/netiq/idm/apps/tomcat/conf
Windows: C:\NetIQ\idm\apps\tomcat\conf
Troubleshooting 661
662 Troubleshooting
VII Appendix
VI
The following sections provide additional reference information and advanced topics for the identity
applications.
Appendix A, “Configuring the Identity Manager Approvals App,” on page 665
Appendix B, “Schema Extensions for the Identity Applications,” on page 677
Appendix C, “JavaScript Search API,” on page 689
Appendix D, “Trouble Shooting,” on page 699
Appendix E, “Workflow Service,” on page 703
Appendix 663
664 Appendix
A Configuring the Identity Manager
A
Approvals App
The NetIQ Identity Manager Approvals app allows managers and resource owners to approve or
deny requests remotely, using an iPhone or iPad with the iOS operating system or any device with
Android operating system installed. Your users can see and work with the same approval tasks in the
app that they would normally see in the identity applications interface. All changes are synchronized
between the Approvals app and the identity applications.
This appendix provides information about configuring your environment to allow users to use the
new interfaces. These sections are intended to provide necessary information to administrators who
want to enable and configure the Approvals app in their environment.
Most users should not need to refer to this document, but should instead be able to install,
configure, and use the app without additional instructions. For information about installing or using
the Approvals app, see “Using the Identity Manager Approvals App” in the NetIQ Identity Manager -
User’s Guide to the Identity Applications.
Product Requirements
The Approvals app has the following prerequisites:
On the Identity Applications server:
Identity Manager 4.5 Advanced Edition or later
Identity Manager Roles Based Provisioning Module 4.5 or later
Designer for Identity Manager 4.5 or later with User Application driver and latest User
Application Base package installed
Enable SSL using valid Certificate Authority (CA) issued certificate. For detailed information
on configuring and enabling SSL in your Identity Manager environment, see “Using SSL for
Secure Communication” on page 603.
On the device: Apple iPhone or iPad with Apple iOS 5, iOS 6, or iOS 7 operating system.
NOTE: Opening SOAP endpoints to non-provisioning administrator users does not compromise
security. Identity Manager continues to enforce all other existing security checks.
3 Open the ism-configuration.properties file and change the following configuration file
properties to the specified values:
Property Value
WorkflowService/SOAP-End- false
Points-Accessible-By-
ProvisioningAdminOnly
WorkflowService/soap/ false
addComment
WorkflowService/soap/ false
getComments
VirtualDataService/soap false
userid Specifies the user name the user uses to access the
Identity Applications server.
NOTE: The PRD and notification template provided in the User Application Base package are generic.
Most administrators need to modify the generic PRD and template for their specific environments.
However, we recommend that only users familiar with PRDs modify the default templates.
8 When finished making any customizations, close and save the notification template.
9 In the Outline view, right-click IDM Approval Mobile Access Granted and select Live > Deploy.
10 Click Deploy.
11 Click OK.
6 (Optional) By default, the User DAL entity does not have an attribute configure for a user’s
mobile telephone number. If you do not currently have a Mobile attribute configured for User
entities in your environment, you may need to add the attribute. Complete the following steps
to add the attribute to the entity:
6a In the Provisioning view, expand User Application Driver > Directory Abstraction Layer >
Entities.
6b Right-click User and select Edit.
6c In the Data Abstraction Layer view, expand Entities > User.
6d Right-click User and select Add Attribute.
6e In the Add Attribute window, select the mobile attribute in the Available Attributes for
Entity Class list.
6f Click Add Attribute to move the attribute to the Entity Attributes list.
6g Click OK.
6h Close and save the Data Abstraction Layer.
7 Click the Workflow tab.
8 Click Mobile Configuration (prov admin must edit these).
9 Click Data Item Mapping.
10 Edit the data item mapping expressions for the Mobile Configuration workflow activity. Ensure
that the data item mapping matches the way your DAL User entity is configured.
The following image shows the workflow activity and data item mapping:
NOTE: By default, the PRD trustee rights are set to [ROOT]. This default setting allows all
users to request access to the Approvals app. Administrators can configure the trustee
rights to limit access to only certain users, if necessary.
For more detailed information about creating forms in Designer, see “Creating Forms for a
Provisioning Request Definition,” in the NetIQ Identity Manager - Administrator’s Guide to Designing
the Identity Applications.
As an administrator, you can also localize the form text displayed in the Approvals app. For example,
the Approvals app does not provide localized text for specific Approval tasks. You must localize text
strings for each of your PRDs, including form text, using Designer. For information about localizing
objects in Designer, see “Localizing Provisioning Objects,” in the NetIQ Identity Manager -
Administrator’s Guide to Designing the Identity Applications.
Applications
This section describes the schema extensions used by the identity applications.
srvprv Object.
nrfDynamicParameters XML document that describes allowable parameter values that can be
specified at request time when the resource is being granted.
nrfAllowMulti Allow the resource to be assigned to the same user multiple times.
Attribute Description
nrfEntitlementRef Entitlement reference value of the resource being granted. This value is
copied from the resource definition with parameter values populated at
the time of the request.
nrfTargetDN DN of user who will be granted the resource or from whom the resource
will be revoked.
nrfStatus Status of request. Valid codes are described in “Resource Request Status
Codes (nrfStatus)” on page 683.
12 Approval_Retry
13 Pending_Approval_RETRY
Attribute Description
nrfQuorum Used to support quorum approvals in template PRDs. This is the quorum
condition. Can be percentage or number of approvers required.
nrfStatus Status of role. Valid codes are described in “Role Status Codes (nrfStatus)”
on page 685.
Attribute Description
nrfDecisionDate Indicates date when the request cleanup process evaluation should
happen.
nrfSODApprovalProcessId Provisioning request definition used for SOD Approval if SOD conflict
arises.
nrfTargetDN DN of user who will be granted the resource or from whom the resource
will be revoked.
nrfStatus Status of request. Valid codes are described in “Request Status Codes
(nrfStatus)” on page 686.
03 SOD RETRY PENDING Occurs when the driver is not able to start a
SOD workflow.
Attribute Definition
Attribute Description
Resource Containers
ResourceRequests (nrfResourceRequests): A container objects that persists resource requests.
ResourceDefs (nrfResourceDefs): A container object that persists the definition of a resource.
The underlying framework for theidentity applications supports a JavaScript API for executing
searches that access the Directory Abstraction Layer. This API lets you build, save, and execute
queries from a JSP page running outside of the identity applications itself. To run a query, you can
invoke the services of the SearchListPortlet, passing parameters that specify the search criteria and
formatting options. Alternatively, you can run a search by using the API directly without involving the
SearchListPortlet.
equals
present
not_equals
not_present
starts_with
ends_with
contains
not_starts_with
not_ends_with
not_contains
greater
greater_or_equal
less
less_or_equal
not_greater
not_greater_or_equal
not_less
not_less_or_equal
The following table describes the JSON structure for defining a condition group:
The following table describes the JSON structure for defining a condition row:
Table C-4 JSON Structure for Defining the Fields for a Condition Row
<script type="text/javascript">
//This line must precede any code using JUICE.
dojo.require("JUICE.*");
</script>
3 To take advantage of the JUICE.IDM services, which include entity searching, also add this
JavaScript statement:
<script type="text/javascript">
//This line must precede any code using JUICE.IDM services.
dojo.require("JUICE.IDM.*");
</script>
To build the query, you need to call the create() method on the JUICE.IDM.Entities.Search object,
passing in the name you want to give to the query. The create() method is a static method. Here’s
how you invoke it:
var newQuery = JUICE.IDM.Entities.Search.create("My New Search");
Once you’ve created the query object, you can call methods on this object to define the basic
settings for the query, as well as the condition groups and condition rows. The query structure you
create with the JavaScript API follows the model of the JSON representation. After you’ve created
the query object you append it to the QUERY request parameter.
The JavaScript example shown below illustrates how you use the JavaScript API to build a query:
function buildQuery3() {
var newQuery = JUICE.IDM.Entities.Search.create("My New Search");
newQuery.setFrom("user");
var selAttrs = ["FirstName","LastName"];
newQuery.setSelects(selAttrs);
var newCondGrp1 = newQuery.addConditionGroup();
var newCondRow1_1 = newCondGrp1.addConditionRow();
newCondRow1_1.setRowAttr("FirstName");
newCondRow1_1.setRowRop("contains");
newCondRow1_1.setRowVal("C");
openSearchResults("QUERY=" + newQuery);
}
Method Description
<Query> get(uuid) Returns the user's saved search with uuid as a Query
<String[]> getNames() Returns the names of all the logged in user's saved
searches
<String> getUUID(searchName) Returns the uuid of the saved search with the
searchName
The following table describes the methods for the Query object:
Method Description
The following table describes the methods for the CondGroup object:
Method Description
The following table describes the methods for the CondRow object:
Method Description
openSearchResults("QUERY=" + myQuery);
}
or
Or, increase the PermSpace value by passing -XX:MaxPermSize to the Java virtual machine by
means of JAVA_OPTS in the start-tomcat script, for example:
-XX:MaxpermSize=128m
Verify that Email Notification templates have been defined. You define them through the
Administration > RBPM Provisioning and Security > Delegation and Proxy.
javax.naming.SizeLimitExceededException
If you encounter a javax.naming.SizeLimitExceededException when you use the
Administration > Page Admin > Set As Default, you might have encountered a maximum size limit. You
can modify this limit in the PortalGroupPageDefaults portlet settings in the portlet.xml as
follows:
<portlet>
<portlet-name>PortalGroupPageDefaults</portlet-name>
<portlet-class>
com.novell.afw.portal.portlet.core.permission.PortalGroupPageDefaults
</portlet-class>
<init-param>
<name>MIN_CACHE_SIZE</name>
<value>20</value>
</init-param>
<init-param>
<name>MAX_CACHE_SIZE</name>
<value>200</value>
</init-param>
<init-param>
<name>PAC_MAX_RESULTS</name>
<value>2000</value>
</init-param>
...
</portlet>
If you have more than 200 groups and want to assign groups to the View permissions for the Page
Admin tab, you also need to update the settings for the PortalUserGroupSelection portlet.
Modify this limit in the portlet.xml as follows:
Identity Manager 4.8 provides Workflow Engine as a separate service. This Workflow Engine replaces
the Workflow Engine that was embedded with Identity Applications in the previous versions of the
product.
Features
The Workflow Engine continues to provide the same functionality as previous versions such as
starting a workflow process, logging, generating reminder and escalation notifications, retrying
failed processes, and heartbeat monitoring. In this release, it is packaged as a separate component
which has introduced a change in its interaction with Identity Vault and Identity Applications
components. The following diagram depicts how the Workflow Engine fits in the overall Identity
Applications architecture:
REST Layer
Email
Server Common
Event
Format (CEF) Audit
Workflow Core Activities Server
ActiveMQ Email Email-Based
Notification Approval
Identity Manager Activities
DAL Layer
Client
REST
Database
LDAP Proxy
Authorization
Authentication
One SSO
Provider
Identity Vault Identity Governance Workflow Database
Operations Database
A workflow is a separate process. When a workflow executes, it may execute expressions to query
the identity store of the application it is connected to and modify one or more objects in the Identity
Vault. For example, it can create, modify, and delete users and other objects.
OAuth-Based Authentication
The Workflow Engine requires details about user objects and attributes that it requires to execute a
workflow. It uses Oauth-based authentication to communicate with Identity Applications. It validates
the requests it receives from known clients like Identity Applications.
Identity Applications use their own client credentials to authenticate to the Workflow Engine.
The Workflow Engine authenticates to Identity Applications through client credentials. It uses
client credentials to generate an OSP token and then uses that token while running Identity
Manager role and resource tasks to perform role or resource requests through REST service.
Role/Resource
Request
Identity
Manager OAuth Token
R Identity
E Workflow
Manager
S Service
Activity
T
Workflow States
The Workflow Engine stores workflow states in its own database, which is different from the User
Application database. The process of storing workflow states is same as the earlier versions except
that the new database is added in this version.
NOTE: If the JSON based templates option is selected, then the next step is not required.
9 In the Workflow tab, right click the Start activity icon or the activity icon to which you wish to
associate the form. In the Data Item Mapping view, complete the data item mapping for the
form fields. The values in the Target Form Field are prepopulated from the new form.
10 Deploy the provisioning request definition and the form to the Identity Vault from Designer. The
form is saved in the Workflow Forms container in the User Application driver.
Any new requests from the workflows created using this procedure use the new form.
Repeat the procedure for adding new forms to a Provisioning Request Definition.
4 In the Workflow tab, right click the Start activity icon or the activity icon to which you wish to
associate the form to display the Data Item Mapping view for the selected activity.
The values in the Target Form Field are prepopulated from the new form.
5 Deploy the provisioning request definition and form to the Identity Vault from Designer. The
form is saved in the Workflow Forms container in the User Application driver.