RapidIdentity Cloud Product Guide

Identity Providers and Federation
RapidIdentity Federation Overview

Use RapidIdentity Federation Partners to exchange secure identity information across two or more federated domains. When an application or service is in one network and a user account is in another network, typically the user is prompted for secondary credentials when he or she attempts to access the application or service. These secondary credentials represent the user's identity in the realm where the application or service resides.

Identity federation allows secure identity information exchange across two or more federated domains. Secure exchange requires business agreements between the asserting party sending information and the relying party receiving information. These agreements also require both parties to engage in cryptographic key exchange.

RapidIdentity Federation uses various security realms to perform the mandatory operations to facilitate secure information exchange between requesting and relying parties across different domains. A requestor and the relying party must exchange configuration metadata before beginning to exchange protocol messages that specify unique identifiers to indicate the security realms represented and distinguish them from other possible federation partners and applicable URLs that indicate where protocol messages are to be sent.

Federation Terminology Used in this Guide
  • Attributes: User account information and associated values used to authenticate the users/principals

  • Federation: Identity Federation is the process of delegating an individual's or entity's authentication responsibility to a trusted external party. Each partner in federation plays the role of either an identity provider or a service provider.

  • FQDN (Fully Qualified Domain Name): The complete domain name for a specific computer, or host, on the internet and consists of two parts, the hostname and the domain name.

  • IdP (Identity Provider): Provides attributes to identify and authenticate the end user and sends that data to the service provider along with the user’s access rights for the service to enforce the Service Provider's authentication policies.

  • LDAP (Lightweight Directory Access Protocol): Application protocol for querying and modifying directory services running over TCP/IP. A directory consists of a set of Entries and their attributes, typically organized hierarchically.

  • Relying Party: Relies on authentication and identification services provided by the IdP

  • SAML (Security Assertion Markup Language): Allows identity providers (IdP) to pass authorization credentials to service providers for SSO. SAML is the link between the authentication of a user’s identity and the authorization to use a service.

  • SAML Assertion: The XML document which the Identity Provider sends to the Service Provider that asserts if the user has authenticated successfully. Usually contains attributes about the authenticating user which the Service Provider uses for various identification and authorization purposes.

    • Authentication Assertions: Asserts that the user identified by the assertion successfully authenticated at a particular timestamp and with a particular method.

    • Attribute Assertions: Passes SAML attributes (provides information about the user) to the service provider

  • SP (Service Provider): Requires authentication from the identity provider to grant access rights for a service to the user.

  • SSO (Single Sign-on): Allows users to log in once and those same credentials are reused to log into other service providers.

RapidIdentity Federation contains a joined User and Administrator guide, as the end user is most often a system administrator or otherwise equivalent level technology professional.

RapidIdentity IdP and Portal Sessions

When a user logs into RapidIdentity, they establish both an Identity Provider (IdP) session and a Portal session. The best practice to securely complete user interaction with RapidIdentity dictates that Portal users must log out of Portal and completely close their web browser to terminate a session.

RapidIdentity Federation provides the IdP for federated authentication. The IdP is accessed by Portal for user authentication, and the session timeout is set to 9 hours. Currently, there is not an option to modify the IdP Session timeout.

IdP sessions are invalidated under any of these conditions:

  1. IdP session timeout expires

  2. User logs out of Portal, which redirects to the IdP logout

  3. User logs out of the IdP directly or is redirected to the IdP logout by some other means (e.g., logging out of another federated web application)

  4. User completely closes the web browser

Portal sessions are relevant to browser interactions with RapidIdentity Portal, and are managed by an administrator in the Configuration module. Administrators can kill portal sessions from Configuration > Security > Session Management. Portal session timeouts default to 8 hours, and can be set from Configuration > General > Settings > Authentication.Authentication

Note that when a Portal session is closed either manually or through a session timeout, the user loses access to web interaction with Portal. However, while the IdP session remains active, users will not be prompted to re-authenticate when accessing Portal again.

Federation IdP and Federation Partners Configuration
RapidIdentity Federation IdP Setup
RapidIdentity IdP

The RapidIdentity Federation Identity Provider setup requires access to the RapidIdentity Configuration Module. Users must log in to RapidIdentity as a user with the System Administrator or Tenant Administrator role.

  1. From Configuration, click Identity Providers in the Security options.

    configuration_identity.png
  2. idp_pagefed2.png
New Identity Provider Setup

If the Identity Provider has not yet been set up, follow the below steps.

  1. From Identity Providers, select IDP Configuration and click Create New Configuration.

    create_new_idp.png
  2. From the Identity Provider Configuration window enter the following values:

    idp_configuration2.png
    1. Identity Provider Configuration Type*: Automatic/Quick Configuration

    2. Domain*: Enter the IP address of the appliance that will serve as the portal that users will access and that is allocated to the Federation activity.

  3. The Identity Configuration workspace will then be populated with the Identity Provider Configuration data. Click here for more information on Identity Provider configuration data.

    idp_pagefed2.png
  4. From the Configuration menu, click Integration from the Security section.

    systems_integration.png
  5. From the Integration menu, click Federation.

    config_federation.png
    1. Federation Hostname: "localhost'

    2. Federation Username: Enter your domain adminstrator's name

    3. Federation Debug Level: None

    4. Click Update Password.

      1. Enter the Domain Administrator's password.

    5. Click Save.

    Important

    You must select to Trigger Service Reload and Trigger Web Reload to activate the new attributes, or upon logging out, the server configuration will not be saved and future access will fail. An error similiar to this will appear

    SAML_idp_error.png
Validate the Identity Provider Setup

If the Identity Provider setup was performed successfully, you will be able to validate the Adminstrator login in the RapidIdeintity Portal.

Perform these steps using an appliance that has Portal_UI capability.

  1. Log into your Portal using the Domain Administrator account used above in the IdP configuration as the Internal-Appliance Configuration-LDAP.

    image2020-1-22_10-6-21.png
  2. Answer the Setup Security Questions.

    setup_security_qurstions.png
    1. Choose either the Pre-defined or the custom Your Choice questions.

RapidIdentity IdP Configuration

The Identity Provider Configuration page contains various URL sites, links to download metadata and certificate information, the certificate fingerprint, and an option to ensure consistent client addresses. This page provides administrators with their Registered Identity Provider information for user authentication in web applications.

Expand Identity Providers from the Left Menu Items, and click IDP Configuration.

idppage2fed2.png

The current Identity Provider Configuration will be displayed in the workspace. For details, refer to the below table.

Field

Description

Entity ID

The SAML EntityID of the Identity Provider

Base URL

The base URL to the IdP

Logout URL

The IdP's logout URL

Live Metadata URL

The URL to view the metadata associated with the provider which allows the remote vendor to access the metadata at any time.

Metadata

Click to download the registered metadata for the Identity Provider to save as an XML file.

Signing Certificate .PEM File

Click to download the (.PEM) encryption certificate used by the Identity Provider.

Signing Certificate .CER File

Click to download the (.CER) signing certificate used by the Identity Provider.

Certificate Fingerprint

The SHA1 fingerprint of the IdP's signing and encryption certificate

Ensure Consistent Client Address Checkbox

When this box is checked, the client address is maintained across clustering and is bound to a particular client IP address. Requests from that session are only considered valid when used from that same IP address.

Warning

Checking this box can cause users to be forced to re-authenticate from devices any time their connection changes cell towers or wireless access points, or when the DHCP lease expires.

  • The Delete Configuration function should be used only if there is an issue with the IdP configuration, such as a mismatch of IP address or a change to the DNS name, as the IdP configuration will be deleted and must be reconfigured completely.

    Caution

    Deleting an IdP configuration will also result in deleting all SAML Relying Party configurations and will require reconfiguration of the IdP, Relying Parties, and all federated Service Providers.

Certificate Management

Certificates are created and signed with an expiration date, and Relying Parties use this certificate to establish trust between the Relying Party and the Identity Provider. Once this certificate expires, it will need to be rotated out with a newly generated certificate that is not expired to retain trust with the Relying Parties.

  1. At the bottom of IdP Configuration screen is an option to Rotate certificate now. Click this to generate a new certificate and nullify the old one.

    IDP_Configuration.jpg
  2. A sidebar with a notification will pop up with a note and a checkbox. The Proceed button will not activate until I Understand has been checked.

    Rotate_Certificate_Notice.jpg

    Note

    Doing this is instant, and may cause some authentication failures with SAML integrations. Ensure you update all service providers with the new certificate once it has been rotated.

    Important

    Due to a known issue, a bounce of RapidIdentity Federation servers will be required before the new certificate is fully active.

Federation Partners Overview

Use RapidIdentity Federation Partners to exchange secure identity information across two or more federated domains. When an application or service is in one network and a user account is in another network, typically the user is prompted for secondary credentials when he or she attempts to access the application or service. These secondary credentials represent the user's identity in the realm where the application or service resides.

RapidIdentity Federation uses various security realms to perform the mandatory operations to facilitate secure information exchange between requesting and relying parties across different domains. A requestor and the relying party must exchange configuration metadata before beginning to exchange protocol messages that specify unique identifiers to indicate the security realms represented and distinguish them from other possible federation partners and applicable URLs that indicate where protocol messages are to be sent.

Refer to the following currently supported Federation Partner sections for configuration information.

SAML 2.0 Overview

The overall goal of the SAML SSO Configuration Process is to federate the Customer and Service Provider to provide Customer-environment users a Single Sign-On (SSO) experience to access the Service Provider's web-based service. Users access the web-based service through an Applications icon in the RapidIdentity Portal. This document focuses on configuring a third-party application to be authenticated via SAML to the RapidIdentity Portal as an Identity Provider.

SAML 2.0 SSO Settings and Attribute Mapping

The SAML authentication process typically begins when the Identity Provider (IdP) receives an Authentication Request <AuthnRequest> generated by a SAML Service Provider and conveyed by the authenticating user's web browser. The <AuthnRequest> often indicates where the IdP is to send the SAML Response/Assertion after the authentication completes successfully. Under normal circumstances, the IdP will only honor that requested URL if it is defined as a valid "Assertion Consumer Service" in the Relying Party metadata.

RapidIdentity Federation supports the Oasis SAML V2.0 Enhanced Client or Proxy (ECP) profile. RapidIdentity supports ECP and can be enabled if required by a particular Federation Partner which may require SAML ECP to authenticate and their ECP Advanced Settings, such as Microsoft Office 365™.

The SAML SSO and ECP Advanced Settings are both configured utilizing similar Federation Partners SSO Settings Menu options, therefore, the configuration options are combined below in the SAML SSO / ECP Advanced Settings Table.

  1. Access the SAML SSO Advanced Settings from the Configuration menu and select Federation Partners from the left-hand menu items.

    Fed_Partners.png
    1. If there are Federation Partners that have been configured, they will display in the workspace. Hover in the far right of the row and click the Edit button.

      fed_partner_or_add_new.png
    2. If there are no Federation Partners already configured, click Add Federation Partner and select SAML 2.0 from the drop-down to open the configuration settings.

      Add_fed_partner_saml_2_0.png
    3. The Community Federation Partners workspace will load. Refer to the Community section to learn more about that topic.

      Community_SAML_Relying_Parti4es3.png
    4. Click Create SAML Relying Party to open the configuration options.

  2. Enter all relevant settings in the General section.

    SAML_RP_-_General.jpg

    Field

    Description

    Name (Required)

    Give the Relying Party a unique name.

    Description (Optional)

    Provide a short but accurate description if desired.

    Is InCommon

    Check this box if the Relying Party is a registered entity in the InCommon Federation.

    Note

    This will require two specific Attributes to be added and open a Metadata Refresh Interval* field. Metadata must be pulled from an InCommon configuration for this setting.

    *Metadata Refresh Interval (Hours) -- InCommon Only

    Set the interval in hours between RapidIdentity refreshing the Relying Party's metadata by retreiving it from the InCommon Metadata Service. Valid refresh intervals are from 1-24 hours.

    Metadata (Required)

    Enter the metadata for the Relying Party.

  3. From the Federation Partners configuration screen, click on SSO Settings.

    sso_adv_settings_saml.png

Note

By default, the ECP Settings are not active. Click Enable ECP Settings to enable ECP Settings. When selecting the Enable ECP Settings checkbox, the ECP Settings section will become available beneath the SSO Settings along with the configuration options.

ECP_Enable.png

When selecting the Enable ECP Settings checkbox, the ECP Settings section will become available beneath the SSO Settings along with the configuration options.

ECP__settings.png
Table 70. SAML SSO and ECP Advanced Settings

Field

Description

Include SAML2 Attribute Statement

If selected the SAML2 SSO or ECP Assertion generated for this Relying Party will contain an <AttributeStatement> element.

SAML2 SSO Assertion Lifetime

Defines the period of time that a SAML2 SSO Assertion generated for this Relying Party will be valid in hours, minutes, and seconds. This setting directly affects the "NotOnOrAfter" attribute in the SAML Assertion which indicates to the Relying Party who receives the Assertion that the Assertion should only be considered valid if it is received before this time instant.

Sign SAML2 SSO or ECP Responses

Determines if the SAML2 SSO or ECP Responses should be cryptographically signed. Choose "Always" to enable signatures on the Response and "Never" to disable signatures on the Response.

Sign SAML2 SSO or ECP Assertions

Determines if the SAML2 SSO or ECP Assertions should be cryptographically signed. Choose "Always" to enable signatures on the Response and "Never" to disable signatures on the Response.

Encrypt SAML2 SSO or ECP Assertions

Determines if the SAML2 SSO or ECP Assertions should be encrypted. Note: this is only possible if the IdP is provided with an "encryption" certificate in the SAML metadata for the Relying Party. Choose "Always" to enable encryption and "Never" to disable encryption.

Encrypt SAML2 SSO or ECP Name IDs

Determines if the Name IDs present in the SAML2 SSO Assertions should be encrypted. Note: this is only possible if the IdP is provided with an "encryption" certificate in the SAML metadata for the Relying Party. Choose "Always" to enable encryption and "Never" to disable encryption.

Signature Algorithm

The algorithm to use when cryptographically signing the SAML2 SSO or ECP Responses and/or SAML2 SSO or ECP Assertions.

SHA-1: Use only when the Relying Party does not support SHA-256.

SHA-256: In general, "SHA-256" should be chosen unless the Relying Party does not support it.

Skip Endpoint Validation When Signed

If the <AuthnRequest> is cryptographically signed and if the IdP can successfully verify that signature by using a public signing key present in the Relying Party's metadata, then the IdP can be instructed to comply with an un-recognized Assertion Consumer Service URL by enabling this option.



Note

After a user authenticates successfully, a SAML Assertion is generated by the IdP. The SAML Assertion contains attributes about the user (e.g. name, email address, etc) and other information describing how and when authentication occurred at the IdP. The SAML Assertion is then embedded inside of a more consolidated generic SAML Response and it is the SAML Response, containing the Assertion, which is ultimately conveyed to the Relying Party.

Attribute Mapping

The SAML Attributes available for assignments will have been set up already under the Federation Partners SAML Attributes section.

  1. Select the Federation Partner from the Federation Partners workspace, and click Edit by hovering in the last column.

    assign_attributes.png
  2. From the Federation Partners window, scroll down to Attribute Mapping.

    attribute_mapping2.png
  3. Click Choose an Attribute to DENY or PERMIT.

  4. Click to expand the drop-down of available attributes to deny or permit mapping.

  5. The Add New Attribute window will load. Select the attribute type from the drop-down.

    select_new_attribute_drop-down_list.png
    1. Based on the type of attribute being added, different menu options will display. Refer to the SAML Attributes section for details on completing the configuration for each attribute type.

    2. For InCommon configurations, the two following attributes must be set:

      1. eduPersonPrincipalName - this attribute must correspond to the name of the user

      2. eduPersonScopedAffiliation - this attribute must correspond to the user's relationship to the institution (e.g., Student, Teacher, etc.)

    3. Note

      An error message will display until these attributes are configured.

  6. Select to Permit or Deny the attribute mapping.

    permit_or_deny_attribute_maping.png
  7. Click Add New Attribute+ to add additional SAML attributes. Repeat steps 2-8.

  8. Click Save to add the attribute to the selected Federation Partner.

    attribute_success.png
    1. A confirmation notice will display if updates are successful.

  9. Click to Trigger Service Reload from the attributes screen and Trigger Web Reload from the Identity Providers screen to activate the new attributes.

SAML Attribute Configuration

SAML Attributes are added during the setup or editing of a SAML Federation Partner and define attributes which may be released to SAML Relying Parties after a user successfully authenticates.

Technology professionals can view the SAML 2.0 technical overview .

The SAML protocol there are several important aspects, the Identity Provider, SAML transactions use Extensible Markup Language (XML) for standardized communications between the identity provider and service providers.

In the SAML protocol, the Identity Provider (IdP) is in charge of authenticating users and if successful, generating a SAML assertion which relays to the Relying Party that the user has successfully authenticated. Often times this information includes when and how they authenticated, and other information about the user required by the Relying Party. This information about the authenticating user is referred to as the attributes of the authenticating user. Common attributes are user's email address and name, but ultimately the Relying Party must communicate which attributes are required from the Identity Provider to release.

  1. From the Configuration menu, select Identity Providers from the Security menu.

    Identity_providers2.png
  2. Expand Identity Providers in the left hand menu items and click Federation Partners.

    Fed_Partners.png
  3. Click Add Federation Partner and select SAML2.0 from the drop-down selector.

    fed_partner_saml2.png
    1. If configuring the SAML Attributes after the Federation Partner has been added, hover and click the edit icon on the far right column of the workspace to select existing attributes.

      saml_edit.png
  4. The current Federation Partners will be displayed in the workspace. Click the SAML Attributes icon in the action buttons at the bottom of the page.

    SAML_Attributes.png

    Note

    The SAML Attributes icon will only display if there are SAML Federation Partners in the system.

  5. The SAML Attributes will load with four separate attribute tabs, LDAP, Static, Name ID, and Static Name ID. Required fields are marked with an asterisk when setting up each attribute.

  6. The first tab is the LDAP Attributes tab. This is where administrators define attributes for values that come directly from LDAP.

    Important

    Administrators define the total pool of attributes which might be allowed to be released to any Relying Party. After the attributes are defined, administrators can choose from the pool which attributes will actually be released to each Relying Party, individually.

    LDAP_Attributes.png
  7. Click the Add LDAP Attribute + button to open the LDAP attribute window.

    create_ldap_attribute.png
    1. LDAP Attribute: The name of the LDAP attribute holding the values which are intended to be released. Each attribute can have one or more values.

    2. SAML Name: The name of the attribute as it will appear in SAML assertions. Different Relying Parties might require the same attribute value, such as a user email address, to be released for them, but could require different names. For example, for a user email address, multiple names such as "EMAIL", "mail", or "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/address."

    3. Friendly Name: This is the name as the LDAP attribute will appear in the SAML Assertion.

    4. Name Format Friendly Name: Select the format value type to be used for the LDAP Attribute Value. SAML Name Formats are typically URIs which convey information to the Relying Party of what format the attribute takes. Depending upon the requirements of the Relying Party, a certain value may or may not be required. This drop-down allows you to choose from some common values or allows you to choose "Custom Name Format" in the event the required value is not one of the provided common values. If the Relying Party does not require a specific value, select "Unspecified."

      name_format_friendly_name.png
      1. Unspecified: urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified

      2. URI Reference: urn:oasis:names:tc:SAML:2.0:attrname-format:uri

      3. Basic: urn:oasis:names:tc:SAML:2.0:attrname-format:basic

      4. Custom Name Format: The format value is a free form text field to enter the custom name format.

    5. Name Format Value: The format will adjust based on the Name Format Friendly Name selected

  8. The next tab is the Static tab. Static Attributes are attributes whose values are based on values which generally do not change from user to user. For instance, if a Relying Party wants the IdP to release a common value for all users in a particular organization, then a Static Attribute should be used. When using an LDAP Attribute, then every user in your organization must have the attribute on their LDAP entry containing the same value.

    static_attributes.png
  9. Click the Add Static Attribute + button to open the Create Static Attribute window.

    create_static_id_attribute2.png
    1. Friendly Name: This is the name as the Static attribute will appear in the SAML Assertion.

    2. SAML Name: The name of the attribute as it will appear in SAML assertions. Different Relying Parties might require the same attribute value, such as a user email address, to be released for them, but could require different names. For example, for a user email address, multiple names such as "EMAIL", "mail", or "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/address."

    3. Values: Enter the Static Attribute

      1. Click +Add Another Value to enter multiple acceptable values

    4. Resolvable: Allows the static value to contain tokens which can be resolved to real value(s) at the time the SAML Assertion is being generated.

      1. For example, If two Static attributes exist, first being "givenname" that contains a user's first name and the second "sn" which contains a user's surname, then a third attribute can be generated representing the first two attributes. The Relying Party could request that the Identity Provider release an attribute called "name" containing the surname followed by a comma and space, then by the first name. This could be accomplished with a "Resolvable" static attribute where the value is defined as "%sn%, %givenName%."

    5. Name Format Friendly Name: Select the format value type to be used for the Static Attribute Value. Name ID Formats are typically URIs which convey information to the Relying Party of what format the attribute takes. Depending upon the requirements of the Relying Party, a certain value may or may not be required.

      1. Unspecified: urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified

      2. URI Reference: urn:oasis:names:tc:SAML:2.0:attrname-format:uri

      3. Basic: urn:oasis:names:tc:SAML:2.0:attrname-format:basic

      4. Custom Name Format: If the provided common values in the drop-down do not provide the correct format choose "Custom Name Format." If the Relying Party does not require a specific value, select "Unspecified." The format will adjust the Name Format Value.

    6. Name Format Value: This value will adjust based on the Name Format Friendly Name selected.

  10. The next tab is the Name ID Tab. A SAML Assertion may contain 0 or 1 Name ID attribute and 0 or more non-Name ID attributes. Name ID attributes will typically provide information about the format of the value. The Relying Party must specify any requirements that may exist for the Name Format.

    nameid_attributes.png
  11. Click Add Name ID Attribute+. Name ID attributes are typically used to convey the "primary identifying attribute" about the user to the Relying Party. Often times, this will be the user's email address, but ultimately it's up to the Relying Party to communicate what value is expected, if any, and define the format, etc.

    create_name_id_attribute.png
    1. LDAP Attribute: Enter the name of the LDAP Attribute

    2. Name Format Friendly Name: Select the format value type to be used for the Name ID Value. Name ID Formats are typically URIs which convey information to the Relying Party of what format the attribute takes. Depending upon the requirements of the Relying Party, a certain value may or may not be required.

      nameidname_format_friendly_name.png
      1. Unspecified: Allows a free from entry (urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified)

      2. Email Address: Uses the email format ( (urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress)

      3. X.509 Subject Name: Uses the subject name of the X509 Certificate (urn:oasis:names:tc:SAML:1.1:nameid-format:X509SubjectName)

      4. Windows Domain Qualified Name: Uses the FQDN of the hostname and domain name (urn:oasis:names:tc:SAML:1.1:nameid-format:WindowsDomainQualifiedName)

      5. Kerberos Principal Name: Uses the Principal Name to identify the user or service (urn:oasis:names:tc:SAML:2.0:nameid-format:kerberos)

      6. Entity Identifier: Uses a URI is a URL that contains the domain name of the entity (urn:oasis:names:tc:SAML:2.0:nameid-format:entity)

      7. Persistent Identifier: Reliably points to a digital entity as an identifier to build trusted connections (Directsurn:oasis:names:tc:SAML:2.0:nameid-format:persistent)

      8. Transient Identifier: An identifier intended to be used for a single session only (urn:oasis:names:tc:SAML:2.0:nameid-format:transient)

      9. Custom Name Format: The drop-down contains some common Name Format values, but if the required value is not present in the list of available values, choose the Custom Name Format option and provide a custom value. If the Relying Party does not require a specific value, select "Unspecified. "The format will adjust the Name Format Value.

    3. Name Format Value: This value will adjust based on the Name Format Friendly Name selected.

  12. The last tab is the Static Name ID tab. Static Name ID Attributes are like Static Attributes, except they define the value of the Name ID Attribute in the SAML Assertion.

    static_name_id_attributes.png
  13. Click Add Static Name ID Attribute+.

    create_static_id_attribute.png
    1. Values: Enter a Name ID Attribute

      1. Click +Add Another Value to enter multiple acceptable values

    2. Resolvable: Allows the static value to contain tokens which can be resolved to real value(s) at the time the SAML Assertion is being generated.

      1. For example, If two Static attributes exist, first being "givenname" that contains a user's first name and the second "sn" which contains a user's surname, then a third attribute can be generated representing the first two attributes. The Relying Party could request that the Identity Provider release an attribute called "name" containing the surname followed by a comma and space, then by the first name. This could be accomplished with a "Resolvable" static attribute where the value is defined as "%sn%, %givenName%."

    3. Name Format Friendly Name: Select the format value type to be used for the Static Name ID Value. SAML, Static Name ID Formats are typically URIs which convey information to the Relying Party of what format the attribute takes. Depending upon the requirements of the Relying Party, a certain value may or may not be required.

      nameidname_format_friendly_name.png
      1. Unspecified: Allows a free from entry (urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified)

      2. Email Address: Uses the email format (urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress)

      3. X.509 Subject Name: Uses the subject name of the X509 Certificate (urn:oasis:names:tc:SAML:1.1:nameid-format:X509SubjectName)

      4. Windows Domain Qualified Name: Uses the FQDN of the hostname and domain name (urn:oasis:names:tc:SAML:1.1:nameid-format:WindowsDomainQualifiedName)

      5. Kerberos Principal Name: Uses the Principal Name to identify the user or service (urn:oasis:names:tc:SAML:2.0:nameid-format:kerberos)

      6. Entity Identifier: Uses a URI is a URL that contains the domain name of the entity (urn:oasis:names:tc:SAML:2.0:nameid-format:entity)

      7. Persistent Identifier: Reliably points to a digital entity as an identifier to build trusted connections (Directsurn:oasis:names:tc:SAML:2.0:nameid-format:persistent)

      8. Custom Name Format: If the provided common values in the drop-down do not provide the correct format choose "Custom Name Format". If the Relying Party does not require a specific value, select "Unspecified."The format will adjust the Name Format Value.

    4. Name Format Value: This value will adjust and populate based on the Name Format Friendly Name selected.

SAML Relying Party Authentication Configuration Examples

There are a variety of web-based applications that support a SAML-based Single Sign-On service to configure your Identity Provider (IdP) server connection. In the information provided in the link above, the third-party identity provider is Identity Automation through RapidIdentity Federation.

This guide provides steps to configure the following SAML Relying Parties with RapidIdentity:

Follow the steps in each section above to configure SAML authentication for the appropriate web-based application.

Sample RapidIdentity SAML Integrations

Identity Automation supports SAML authentication for numerous web-based applications. For example, Google Apps and Salesforce SAML authentication configurations are examples, and are not required for all RapidIdentity Federation deployments. The Identity Automation Federation guides detail SAML integration, where available, on an application-specific basis.

RapidIdentity Community SAML Relying Party Configuration - New UI

Google supports a SAML-based Single Sign-On service for its web-based application to configure your Identity Provider (IdP) server connection. In the information provided in the link above, the third party identity provider is Identity Automation through RapidIdentity Federation.

The RapidIdentity Community provides preconfigured SAML Relying Parties to supported web-based applications to simplify the IdP server connection. Importing from the Community preconfigures required relying party data for the IdP.

Follow these steps to configure a SAML Relying Party authentication configuration using the Community.

Note

Third party SAML Relying Parties may update their setup sequence without notification, therefore, the steps below may vary slightly.

  1. From the RapidIdentity Configuration Module, select Identity Providers from the Security menu.

    configuration_identity.png
  2. The Identity Provider Configuration workspace will launch. Select Federation Partners from the Identity Providers left menu items. From the Add Federation Partner drop-down button, select SAML 2.0.

    fed_partner_saml2.png
  3. The Community-SAML Relying Parties workspace will launch.

    Community_SAML_Relying_Parti4es4.png
    1. The Community contains basic configuration for commonly used SAML Relying Parties. Before manually adding a new SAML Relying Party, search the Community for the entry. The Community will be updated on an ongoing basis with new SAML Relying Parties.

    Tip

    The Community provides some general information about the available preconfigured SAML Relying Parties. Community entries can be created by individual users or by RapidIdentity. Click Federation Partners in the path "Federation Partners>Community>SAML Relying Parties" to return to the main Federation Partners page.

    Community_SAML_menu.png
    • Check Marks:

      • Green = Verified (RapidIdentity Administrators have validated operability.)

      • Grey = Unverified (RapidIdentity Administrators have not validated operability.)

    • Headphones:

      • Green = Supported (Contact RapidIdentity Support for questions or issues.)

      • Grey = Unsupported (RapidIdentity Support is not available for questions or issues.)

  4. Hover over an entry in the Community - SAML Relying Parties workspace and click Import.

    Community_SAML_Relying_Parti4es2.png
  5. A confirmation message will appear and the imported SAML Relying Parties will be imported into the Federation Partners workspace and will display.

    fed_partner_added_2.png

    All information to register the SAML Relying Party will automatically be configured. Click Edit next to the SAML Relying Party to view the details.

    registered_saml_community2.png
Salesforce SAML Integration Guide - New UI

Salesforce supports SAML Single Sign-on and provides a SAML Single Sign-on overview with a Single Sign-on Implementation Guide.

Fortunately, within RapidIdentity Federation, Salesforce SAML authentication configuration is very similar to G Suite SAML authentication configuration.

The preliminary Salesforce SAML authentication configuration steps require that both RapidIdentity Portal and RapidIdentity Federation (IdP) are internet accessible and are configured as described in the provided links. In this topic, the IdP is the Identity Provider which is the system that is logged into using credentials, which is RapidIdentity. The Service Provider (SP) is the system that automatically receives the credentials for login, which is Salesforce, in this case.

Follow these steps to configure Salesforce SAML Authentication.

  1. From the RapidIdentity Configuration Module, select Identity Providers from the Security menu.

    Identity_providers2.png
  2. The Identity Provider Configuration workspace will launch. The following RapidIdentity fields will be mapped into Salesforce as shown below:

    • Entity ID = Issuer = https://saml.salesforce.com

    • Entity ID + /profile/SAML2/POST/SSO = Identity Provider Login URL

    • Logout URL = Identity Provider Logout URL

    Table 71. Salesforce Fields' URL Values

    Field Name

    URL

    Issuer

    Enter your identity provider URL, such as https://company.net/idp

    Identity Provider Login

    Enter your identity provider login URL, such as https://company.net/idp/profile/SAML2/POST/SSO

    Identity Provider Logout

    Enter your identity provider logout URL, such as https://company.net/idp/logout

    Entity ID

    Enter the Salesforce SAML URL, such as https://saml.salesforce.com



  3. Select which format of the certificate to download, either a .PEM or a .CER file and click the download link to the signing/encryption certificate used by the Identity Provider.

    idp_certificate_download2.png
  4. Log in to the service provider, Salesforce, as an administrator.

  5. Navigate to the Setup Gear, and select Setup.

    sf_settings.png
  6. Search in Setup for Single Sign-On Settings.

    sf_sso_settings.png
  7. Click New and fill out the form using the data from Step 2, including the Certificate.

    sf_data_form.png
  8. Click Save.

  9. Navigate to Security Controls | Single Sign-on Settings.

  10. Click on the Name of the SSO (IdAuto_IDP).

    sf_copy_name.png
  11. Click Download Metadata.

    download_metadata.png
  12. Return to the RapidIdentity IdP Configuration page.

  13. Click Federation Partners from the Identity Providers left menu items and click the Add Federation Partner drop-down button, select SAML 2.0.

    fed_partner_saml2.png
  14. The Community- SAML Relying Parties workspace loads. Search the list for Salesforce, as the list will be updated on an ongoing basis. If Salesforce is not in the list, click Create New SAML Relying Party+.

    SF_create_new_saml_relying_party.jpg
  15. The Create SAML Relying Party window will load.

    create_saml_sf2.png
  16. Enter the following:

    Return to the RapidIdentity Appliance IdP Configuration page and click Edit Attributes.

    1. Name: Salesforce

    2. Description: Salesforce for SAML

    3. Metadata: Paste the Salesforce metadata in the box.

  17. Click Save.

  18. Salesforce will now be listed as a Federation Partner under the Identity Providers section in theConfiguration module.

    sf_fed_partner2.png
  19. Click SAML Attributes from the action bar.

  20. Select the Name ID tab.

    name_id_tab.png
  21. Click Add Name ID Attribute+.

    1. The example used is for the mail attribute for the username.

  22. Add a Name ID Attribute that contains the Salesforce information.

    create_name_attribute_sf.png
    1. LDAP Attribute: Enter a value that contains the Salesforce username (Ex. "mail").

    2. Name Format Friendly Name: Select "Unspecified" from the drop-down list.

      1. The value will be similar to: "urn:oasis:names:tc:SAML:2.0:nameid-format:unspecified."

  23. Click Save. A confirmation will display at the top of the workspace and the Name ID Attribute will be added.

    sf_saml_name_attributes.png
  24. Return to Federation Partners and select to Edit the Salesforce entry.

    edit_sf_fed_partner.png
  25. Click Attribute Mapping in the Salesforce (SAML) details screen.

    choose_sf_name_attribute.png
  26. Click Choose an Attribute to DENY or PERMIT.

  27. From Add Attribute Mapping, select the newly created attribute from the drop-down

    permit_name_attribute.png
  28. Click Permit to add as a permitted attribute.

  29. A confirmation message will display and requests a Trigger Service Reload. Perform the additional steps first.

    attribute_confirmation.png
  30. From Choose an Attribute to DENY or PERMIT, select the [INTERNAL] SAML Transient ID attribute from the drop-down, if applicable, and click Deny.

  31. From the bottom action buttons, click Trigger Service Reload.

    trigger_reload_action_bar_button.png
  32. After the confirmation appears at the top, return to the IDP Configuration workspace, and click Trigger Web Reload.

    trigger_web_reload.png
  33. When both reloads are complete, access Salesforce from the RapidIdentity Portal, and the <https://{SALESFORCE DOMAIN}.my.salesforce.com >properly configured SAML authentication will direct to the user's homepage.

    sf_app.png
Google SAML Integration Guide - New UI

Google supports a SAML-based Single Sign-On service for its web-based application to configure your Identity Provider (IdP) server connection. In the information provided in the link above, the third party identity provider is Identity Automation through RapidIdentity Federation.

The preliminary SAML authentication configuration steps require that both RapidIdentity Portal and RapidIdentity Federation IdP are internet accessible and are configured as described.

Follow these steps to configure G Suite for SAML. A G Suite Admin Console login is required to complete this configuration.

Note

Google may update their setup sequence without notification, therefore, the steps below may vary slightly.

Launch the Identity Provider Configuration Workspace
  1. From the RapidIdentity Configuration Module, select Identity Providers from the Security menu.

    Identity_providers2.png
  2. The Identity Provider Configuration workspace will launch.

    download_cert_pem.png
  3. Click Download the certificate used by the Identity Provider (.pem) to download the certificate.

    1. Keep this browser window open as the Base URL and Logout URL are necessary during upcoming steps. At that time, the certificate will be uploaded to the G-Suite Admin portal.

    Set up SSO in the G Suite Admin Console
  4. In a different browser window, authenticate to G Suite Admin Console with an administrator account and click Security.

    google_security.png
  5. Click Set up single sign-on (SSO) with a third party IdP. .

    gsuite_sso_option.png
  6. For the Third-party Identity Provider section, enter the information as described below: Sign-in page URL and the Sign-out page URL.

    1. Enter the Sign-in page URL.

    2. Enter the Sign-out page URL.

      Note

      The base URL for these values must be entered using the format: "**/idp/profile/SAML2/Redirect/SSO"

    3. Click REPLACE CERTIFICATE to upload the certificate that was downloaded in Step 3.

    4. Click Save at the bottom of the page to save the configuration.

    set_up_sso_with_a_third_party_idp.png
  7. Click Download IDP Metadata and copy the information to the clipboard. The metadata ends with "</EntityDescriptor>."

    sso_gsuite_metadata.png
  8. Create a SAML 2.0 Federation Partner for G Suite

    In the RapidIdentity Configuration module, click Federation Partners from the Identity Providers section.

    Fed_Partners.png
  9. Click the Add Federation Partner drop-down button and select SAML 2.0.

    fed_partner_saml2.png
  10. The Federation Partners>Community-SAML Relying Parties workspace will launch.

    Community_SAML_Relying_Parti4es4.png

    Tip

    The Community contains basic configuration for commonly used SAML Relying Parties. Before manually adding a new SAML Relying Party, search the Community for the G-Suite entry. The Community will be updated on an ongoing basis with new SAML Relying Parties.

  11. Click Create SAML Relying Party+. Enter the following information in the Federation Partners > Create SAML Relying Party window.

    1. The tables and respective screens below depict the values that are to be entered for each section, "General," and "SSO Settings," for the G Suite Relying Party registration the Register SAML Relying Party window.

      gsuite2.png
    Table 72. General

    Field

    Value

    Name

    G-Suite

    Description

    G Suite SAML Authentication Configuration

    Metadata

    Paste the metadata from the previously copied metadata from the Google Admin console.

    The metadata should appear similar to what is shown in the image; modify the GOOGLE_DOMAIN, as necessary.

    google_metadata.png


    • Click SSO Settings at the bottom of the General page to expand the SSO Settings optons.

      gsuitesso2.png
    1. Table 73. SSO Advanced Settings

      Field

      Value

      Description

      Include SAML2 Attribute Statement

      True

      If selected the SAML2 SSO Assertion generated for this Relying Party will contain an <AttributeStatement> element. Default value.

      SAML2 SSO Assertion Lifetime

      • Hours = 0

      • Minutes = 5

      • Seconds = 0

      Defines the period of time that a SAML2 SSO Assertion generated for this Relying Party will be valid in hours, minutes, and seconds. This setting directly affects the "NotOnOrAfter" attribute in the SAML Assertion which indicates to the Relying Party who receives the Assertion that the Assertion should only be considered valid if it is received before this time instant.

      Sign SAML2 SSO Response

      Conditional

      Determines if the SAML2 SSO Responses should be cryptographically signed. The default value is "Conditional" and should be used to query for assertions that meet particular criteria. Choose "Always" to enable signatures on the Response and "Never" to disable signatures on the Response.

      Sign SAML2 SSO Assertions

      Never

      Determines if the SAML2 SSO Assertions should be cryptographically signed. Choose "Always" to enable signatures on the Response and "Never" to disable signatures on the Response. Default value.

      Encrypt SAML2 SSO Assertions

      Never

      Determines if the SAML2 SSO Assertions should be encrypted. Note: this is only possible if the IdP is provided with an "encryption" certificate in the SAML metadata for the Relying Party. Choose "Always" to enable encryption and "Never" to disable encryption. Default value is "Conditional."

      Encrypt SAML2 SSO Name IDs

      Never

      Determines if the Name IDs present in the SAML2 SSO Assertions should be encrypted. Note: this is only possible if the IdP is provided with an "encryption" certificate in the SAML metadata for the Relying Party. Choose "Always" to enable encryption and "Never" to disable encryption.

      Signature Algorithm

      SHA-1

      The algorithm to use when cryptographically signing the SAML2 SSO Responses and/or SAML2 SSO Assertions.

      • SHA-256: In general, "SHA-256" should be chosen unless the Relying Party does not support it.

      • SHA-1: Use only when the Relying Party does not support SHA-256.

      Skip Endpoint Validation When Signed

      False

      If the <AuthnRequest> is cryptographically signed and if the IdP can successfully verify that signature by using a public signing key present in the Relying Party's metadata, then the IdP can be instructed to comply with an un-recognized Assertion Consumer Service URL by enabling this option.

      Enable ECP Settings

      False

      When selecting the Enable ECP Settings checkbox, the ECP Settings section will become available beneath the SSO Settings along with the configuration options. In this case, ECP settings are not to be enabled.



    DEFINE the LDAP ATTRIBUTES
  12. SAML Service Providers typically define one or more attributes required from the Identity Provider to release to Google during SAML authentication about the authenticating user. These attributes are typically things like Email and Name, but could also be things like Group Membership.

  13. From the Security menu, access to SAML 2.0 Federation Partner that was created earlier in this process. Click SAML Attributes at the bottom of the workspace to view or add attributes.

    gsuitesamlattributes.png
    1. In this example, the Name ID will be the attribute used for authentication.

      1. A SAML assertion typically contains a single "Name ID" attribute and 0 or more other attributes about the authenticated user.

    2. A Name ID attribute is typically the main identifier of the user and is associated with a particular "Name Format." The Name Format generally indicates the type of value to the Relying Party.

      1. For example, a value of "urn:oasis:names:tc:SAML:2.0:nameid-format:email" indicates that the Name ID attribute is an email address.

      2. A value of "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified" indicates the value is of an "unspecified" type.

  14. The Federation Partners > SAML Attributes workspace will load. Click the Name ID tab.

    add_name_id_attribute.png
    1. Enter Name ID for the LDAP Attribute, and select the Name Format Friendly Name from the drop-down list. In this example, the name format is an email address.

      1. Refer to the SAML Attributes section for additional information on the available options.

    2. Click Save.

  15. The Name ID attribute will now be populated in the workspace.

  16. From the newly added Name ID Attribute, Click Edit

    saml_name__attributes.png
  17. The urn will be similar to this: "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified." Ensure the SAML version and the format matches the information that is in the metadata from G Suite. In this case, the updated urn will be" urn:oasis:names:tc:SAML:2.0:nameid-format:email ." Click Save.

    edit_urn.png

    Note

    Editing attributes creates a link from the LDAP attributes to the “Name Format” defined by the service provider. Editing attribute mappings specifies what attributes to allow and deny for a specific service provider. It is often recommended to deny the [INTERNAL] SAML Transient ID as in many cases conflicts with some service providers. [INTERNAL] attributes are the attributes defined by default by Rapid Identity to processes SAML interactions between internal apps like the Portal and Connect.

  18. A service reload is required.

    trigger_service_reload2.png
    1. Navigate to IDP Configuration.

    2. Click Trigger Service Reload in the action bar buttons.

    3. A confirmation message will appear briefly at the top of the workspace.

  19. Navigate to the G Suite Admin console, Security section.

  20. Select Set up single sign-on (SSO).

  21. Enter the data fields that were entered in step 2a. These values will vary based on setup.

    google_settings.png
    1. The Sign-in page URL is the IdP Base URL to sign into your system and G Suite.

    2. The Sign-out page URL is the Logout URL for redirecting users to sign out.

    3. The Change password URL is the organization specific URL to allow users to change their password.

  22. Upload the IdP security certificate and ensure Use a domain specific issuer is unchecked. Network masks are optional and organization specific.

    Replace_Certification.png
  23. Create a G Suite App link in the RapidIdentity Portal.

  24. Once the application is created, click the icon in the portal to initiate a valid IdP initiated SAML connection to your G-Suite tenant.

    google_mail.png
  25. Access http://mail.google.com/a/{GOOGLE_DOMAIN}to be directed to a user's homepage.

    gmail.png
OAuth 2.0 Federation Partner Authentication Configuration

There are a variety of web-based applications that support the OAuth 2.0 protocol.

Follow the steps in each section to configure OAuth authentication for RapidIdentity.

  1. From the Configuration menu, select Identity Providers.

    Identity_providers2.png
  2. From the Security section in the left menu items, click the caret to expand the Identity Providers menu and select Federation Partners.

  3. From the Federation Partners workspace, select OAuth 2.0 from the Add Federation Partner selector.

    oauth2_add_from_fed_partners.png
  4. In the Create New OAuth 2.0 Partner window, enter the required information. Refer to the below table for details.

  5. Click Save to add the OAuth 2.0 Partner.

    1. Once the OAuth 2.0 Partner has been saved, in the details of the configuration both a "Client ID" and a "Client Secret Key" field will be displayed. Click the Copy Icon to copy the Client ID to the clipboard.

      partner_id.png
    2. Click the Show Client Secret Key bar to see the key. There is an option to Regenerate Client Secret Key on the bottom action bar.

      regenerate_key.png

Note

If there is at least one External Authentication Realm enabled, a drop-down list will be available on the login page to allow selection of which realm to authenticate against.

Field

Description

Name

Enter name of the OAuth 2.0 Partner

Description

Enter description of the OAuth 2.0 Partner

Internal Realm Name

This value is editable. If a custom name is not used, the internal realm name will be listed as "internal."

Callback URLs

Enter one or multiple callback URLs.

AUTH Code Expiration Seconds

Default value is "60"

Token Expiration Seconds

Default value is "32400"

Allow Refresh Tokens

Select checkbox to allow refresh tokens

Refresh Expiration Seconds

Default value is "2592000"

Attributes

add_attribute.png

Click +Add Attribute and enter the following information:

ldap_attributte.png
  • Type: LDAP is the type.

  • Name: Enter the name of the LDAP attribute, such as displayName.

  • Single Valued: Select this checkbox if there is only one allowable value for the attribute.

  • LDAP Attribute: Enter the LDAP attribute, such as surname or displayName

OpenID Connect

OpenID Connect is an OAuth 2.0 Federation Partner with OpenID Connect Support enabled. Much of the configuration required for OpenID Connect will have already been performed during the OAuth 2.0 setup. View the OpenID Connect Federation Partner section for additional details on configuring OpenID Connect,

OpenID Connect Federation Partners Authentication Configuration

There are a variety of web-based applications that support the OpenID Connect protocol.

OpenID Connect is an OAuth 2.0 Federation Partner with OpenID Connect Support enabled. Much of the configuration required for OpenID Connect will have already been performed during the OAuth 2.0 setup. View the OAuth 2.0 Federation Partner section for additional details on configuring

OpenID Connect

Follow the steps in each section to configure OpenID Connect authentication for RapidIdentity.

  1. From the Configuration menu, select Identity Providers.

    Identity_providers2.png
  2. From the Security section in the left menu items, click the caret to expand the Identity Providers menu and select Federation Partners.

  3. From the Federation Partners workspace, select OpenID Connect from the Add Federation Partner selector.

    connect.png
  4. In the Create New OpenID Connect Partner window, enter the required information. Refer to the below table for details.

  5. Click Save to add the OpenID Connect Partner. After saving an OpenID Connect Partner, the configuration details will display a field for both a "Client ID" and a "Client Secret Key."

Field

Description

Name

Enter the name for the OpenID Connect Federation Partner.

Description

Enter a description for the OpenID Connect Federation Partner.

Callback URLs

Any and all callback URLs requested by the client must be present in this list to be honored.

AUTH Code Expiration Seconds

The number of seconds before authorization codes issued to this client expire. The default value is "60" (1 minute).

Token Expiration Seconds

Default value is "32400."

Allow Refresh Tokens

Select checkbox to designate if refresh tokens should be issued to this client. The default value is "true."

Refresh Expiration Seconds

The number of seconds before refresh tokens issued to this client expire. A value of "0" indicates that refresh tokens do not expire. The default value is "2592000" (30 days).

Attributes

add_attribute.png

If primarily using the OpenID Connect protocol, these values can be left blank, as these attributes are required when operating as an OAuth 2.0 client instead of an OpenID Connect client.

Note

RapidIdentity only supports releasing LDAP attributes to OAuth 2.0 clients.

Field

Description

Name

The name of the attribute when released to the client

LDAP Attribute

The name of the LDAP attribute whose value(s) should be released to the client

Single-Valued

In the event the LDAP attribute contains multiple values, checking this box will release only the first value.

OpenID Connect Configuration

  • Enable OpenID Connect Support: Default = True

    Note

    Checking this means that the Federation Partner is enabled for the OpenID Connect protocol as well.

  • ID Token Lifetime (Seconds): The duration of time in seconds that ID tokens issued to this client should be valid. Default = 60 seconds (1 minute)

  • Sign ID Token (RSA with SHA-256): Whether ID tokens issued to this client should be signed. Default = True

    Note

    At this time, RapidIdentity only supports the RS256 algorithm.

  • Sign User Info (RSA with SHA-256): Whether UserInfo responses for this client should be signed. Default = True

    Note

    At this time, RapidIdentity only supports the RS256 algorithm.

  • Encrypt ID Token (RAS_OAEP_256): Whether ID Tokens issued to this client should be encrypted. Default = False

    Note

    At this time, RapidIdentity only supports the RSA_OAEP_265 encryption algorithm.

  • Encrypt User Info (RSA_OAEP_256): Whether UserInfo responses for this client should be encrypted. Default = False

    Note

    At this time, RapidIdentity only supports the RSA_OAEP_265 encryption algorithm.

  • Encryption Method: If encryption is enabled, then an encryption method must be chosen. RapidIdentity currently supports the following encryption methods:

    • A128CBC_HS256

    • A256CBC_HS512

  • Encryption Key ID (KID): Optional Kid value to include in the ID token header. Some OpenID Connect clients may require this, but it can generally be left blank.

  • RSA Public Key in PEM Format: The public key to use for encryption. This must be a valid RSA public key in PEM format.

    Note

    This is only required if Encryption is enabled for this client.

  • Click Add Claim Attributes and enter the following information:

    • Name: A friendly name of the claim for display purposes

    • Description: Optional Description

    • Attribute Value Type: Defines how a value for the claim is obtained. The following Attribute Value Types are supported:

      • Random - A random string value of a particular length will be generated.

      • Static - A (potentially resolvable) static value will be used. A resolvable static value contains LDAP attribute tokens that will be resolved as the value is being constructed. Example: %givenName% %sn% would be resolved to a value containing the authenticated user's first name, followed by a space, followed by their surname.

      • LDAP - Uses the value(s) of a particular LDAP attribute. This value type supports Binary, which, if checked, causes the attribute value(s) to be treated as binary and the released value(s) will be the Base64 encoded string representation of the binary value(s).

      Note

      The Static and LDAP attribute value types support the following:

      • Regex Filter - If specified, only resolved values that match this regular expression pattern will be considered for release.

      • Single Valued - If checked, only a single value will be released in the event it resolves to multiple values.

    • Claim: The name of the claim as it should be in the ID token and/or UserInfo

    • Claim Type: The value type of the claim. Supported types include:

      • String

      • Boolean

      • Number

      • Object

WS-Federation Partner Authentication Configuration

There are a variety of web-based applications that support the WS-Federation protocol.

Follow the steps in each section to configure WS-Federation authentication for RapidIdentity.

  1. From the configuration menu, select Identity Providers.

    Identity_providers2.png
  2. From the Security section in the left menu items, click the caret to expand the Identity Providers menu and select Federation Partners.

  3. From the Federation Partners workspace, select WS-Federation from the Add Federation Partner selector.

    ws_federation.png
  4. In the Create New WS-Federation Partner window, enter the required information. Refer to the Create New WS-Federation Relying Party Configuration Table for details.

    creawte_new_federation_partner_ws.png
  5. Click Save to add the WS-Federation Partner.

  6. A confirmation message will display at the top of the page.

    confirmation.png
  7. After the WS-Federation Partner has been created, the Issuer Entity IDs and SAML Audiences & ReplyTo Urls sections will become available. Click the section title, Issuer Entity IDs or SAML Audiences ReplyTo URLs to expand the section and to add entries. Adding, reordering, and deleting entries will not be saved until the Federation Partner is saved. Refer to the Advanced Configuration Table for configuration details.

Table 74. Create New WS-Federation Relying Party Configuration

Field

Description

General

genearl.png
  • Name: Enter the name of the WS-Federation Partner.

  • Realm ID: Enter a unique identifier that the WS-Federation Relying Party identifies itself as, similar to an "EntityID "

  • Description: Enter description of the WS-Federation Partner.

Configuration

configuration.png
  • Token Type: SAML 1.1

  • Token Lifetime (MS): Amount of time in milliseconds for how long the token will be valid

  • Signature Algorithm: RSA SHA-256

  • Signature Digest Algorithm: RSA SHA-256

  • Include <NotBefore> in SAML Assertions? : If checked, the SAML 1.1 assertions generated for this Relying Party will contain the <NotBefore> condition which provides a hard lower bound on the time period which the Relying Party may consider the Assertion valid. If the Relying Party's time source is not quite in sync with the Identity Provider this can be problematic and in that case, this box may be un-checked to leave out that condition.

Attribute Release - Name Identifier

name_id.png
  • Type: Auto-populated based on Token Type selected

  • Name: Represents the plain-language identifier for this attribute

  • Description: Enter a description.

  • Attribute Value Type:The options vary based on the value type selection.

    • Random: Indicates the value should be random.

      • Length: Enter the maximum length accepted for the value

      • Name Qualifier: Optionally, enter a SAML 1.1 Name Qualifier value. If required, this value is generally specified by the Relying Party.

      • Format: Optionally, enter a SAML 1.1 Format value. If required, this value is generally specified by the Relying Party.

    • Static: Allows a set of static values to be specified for this attribute.

      • Resolvable: Allows the static value to contain tokens which can be resolved to real value(s) at the time the SAML Assertion is being generated. For example, If two Static attributes exist, first being "givenname" that contains a user's first name and the second "sn" which contains a user's surname, then a third attribute can be generated representing the first two attributes. The Relying Party could request that the Identity Provider release an attribute called "name" containing the surname followed by a comma and space, then by the first name. This could be accomplished with a "Resolvable" static attribute where the value is defined as "%sn%, %givenName%."

      • Values: Enter limited acceptable value, if applicable

      • +Add Another Value: Click to add additional values

      • Single Valued: Select if there is only one value acceptable

      • Regex Filter: Enter a filter using regular expression syntax, such as wildcards, anchors, and grouping.

      • Name Qualifier: Enter an identifier that has no relation to the user's identity if user's identity is to not be determined based on just the NameID value.

      • Format: Enter the format for the attribute value.

    • LDAP: Returns one or more LDAP attribute values for this assertion attribute.

      • LDAP Attribute: The name of the LDAP attribute holding the values which are intended to be released. Each attribute can have one or more values.

      • Single Valued: Select if there is only one value acceptable

      • Regex Filter: Enter a filter using regular expression syntax, such as wildcards, anchors, and grouping

      • Binary: Enter to identify the attribute length in bytes

      • Name Qualifier: Enter an identifier that has no relation to the user's identity if user's identity is to not be determined based on just the NameID value

      • Format: Enter the format for the attribute value.

Attribute Release - Attributes

release_attributes_main.png

Assign attributes by clicking the +Add Attribute

add_attribute_2.png
  • Type: SAML

  • Name: Enter a name of the attribute.

  • Description: Enter a description.

  • Attribute Value Type: Random, Static, LDAP.

  • Attribute Namespace: Enter a namespace URI, as needed.

WS-Trust Configuration

ws_trust_configuration.png

When the username and password is entered by the end-user during Windows login, some cases the username will match exactly the user's RapidIdentity username or the username will require to be transformed in some manner and possibly mapped to a different LDAP attribute than what RapidIdentity uses natively. Configure either Transform Type or Lookup. Type options.

  • Username Token Mapping Transform Type:

    • No Transform: Do not transform the username

    • Regular Expression Replace: Replaces strings that match a regular expression pattern with a specified replacement string, such as the Windows account name

      • Matching Pattern: Enter the pattern to transform.

      • Replacement: Enter the value to replace when the matching pattern is identified.

  • Username Token Mapping Lookup Type:

    • Native: Uses simple mapping

    • LDAP: Use LDAP query to match user attribute.



Table 75. Advanced Configuration

Field

Description

Issuer Entity IDs

If interaction with a single RapidIdentity IdP is required for multiple domains, such as "Staff" and "Students," unique issuer IDs are used to allow these types of alternate dynamic issuer values based on the user that is authenticating.

Add a new Issuer Entity ID configuration and associate it with a set of users based on a particular LDAP attribute and attribute value pattern.

  1. Click +Add Issuer to set up issuer entity IDs and complete the following values:

    issuer_entity_ids2.png
    1. Issuer ID: (A valid URI or URN): Unique identifier , ex. https://saml.wsfedpartner.com

    2. Type: Is auto-populated - "REGEX"

    3. Attribute: Enter the name of the LDAP attribute.

    4. Pattern: Enter the regular expression pattern for value matching. Here is a link to documentation on Java regular expressions: https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html

    add_issuer_3.png
  2. Click Add.

SAML Audiences & ReplyTo Urls

saml_audiences.png
  • SAML Audiences: Enter a customized list of "Audience" restrictions for the SAML 1.1 assertions generated for this Relying Party. If empty, the Realm ID of the Relying Party will be used.

  • Replyto URLS: Prioritized list of valid URLs to POST the token back to. If a 'reply' parameter is included in the request, it MUST match one of these or the Realm ID EXACTLY to be honored. If no 'reply' is included in the request, the first valid URL in this list will be used. If this list is empty and the Realm ID of the Relying Party is a valid URL, that will be used, otherwise, the request will result in an error.



Setting Up RapidIdentity with Central Authentication Service (CAS)

The Central Authentication Service (CAS) is a single sign-on protocol that allows potentially untrusted websites to authenticate users against a central, trusted authentication service without ever exposing the user's credentials to the website. A CAS Client is called a Service, and in the RapidIdentity CAS implementation, every Service that needs to interact with the server must be registered.

Registering a CAS Service means giving it a unique name and optionally providing protocol-specific configuration including ticket lifetimes, URL matching rules, a proxy policy, and defining which attributes (if any) should be released to the Service.

This procedure begins in Configuration > Security > Identity Providers > Federation Partners.

  1. Click Add Federation Partner and choose the CAS option from the drop-down menu.

    CAS_Step_1.png
  2. This will open the Federation Partners > Central Authentication Service (CAS) configuration screen. There are multiple sections on this screen with fields that make up CAS Configuration for RapidIdentity. First, give the service a name. Descriptions are optional.

    CAS_Name_and_Desc.png
  3. The CAS protocol revolves around the issuing of tickets with various types: Ticket-Granting, Service, Proxy-Granting, and Proxy. The Ticket Lifetime fields show the default ticket lifetimes set by RapidIdentity by ticket type. These values can be changed or added to.

    Ticket_Lifetimes.png
    Table 76. Ticket Lifetimes

    Ticket Type

    Description

    Default Value

    Proxy Granting Ticket Lifetime

    Issued to a particular CAS Service upon successful validation of a Service or Proxy ticket. These are used by the server to issue Proxy Tickets and will only be issued if the CAS Service has been configured to allow proxying.

    9 Hours

    Service Ticket Lifetime

    Issued to a particular CAS Service and invalidated by the server in exchange for user attributes and/or a Proxy-Granting Ticket.

    60 Seconds

    Proxy Ticket Lifetime

    Issued to a particular CAS Service after a Proxy-Granting ticket is successfully validated.

    60 Seconds



  4. The Username Attribute field has multiple options that are determined by the Type of Username Attribute chosen. These fields are LDAP attribute value definitions and their required settings.

    1. Random - Requires a Length setting. The default is 16 characters.

      UA_-_Random.png
    2. Static - Allows users to add Values and has the capacity for a Regex filter

      UA_-_Static.png
    3. LDAP - Requires the name of an LDAP Attribute and also has the capacity for a Regex filter.

      UA_-_LDAP.png
  5. Proxy Policies instruct the registry application to determine whether it is allowed for proxy authentication. Choose from Reject, Exact, and Regex.

    Note

    Take care when allowing a Service to use proxy authentication. Misuse of this feature can leave RapidIdentity open to security leaks or other attacks.

    1. Reject - Rejects all proxy attempts. This is the default.

      PP_-_Reject.png
    2. Exact - Allows proxying. The Proxy Callback URL presented must exactly match the URL defined for the CAS Service.

      PP_-_Exact.png
    3. Regex - Allows proxying. The Proxy Callback URL must match a regular expression pattern defined for the CAS Service.

      PP_-_Regex.png
  6. The Attributes section allows you to add attributes to the partner to be used during authentication to define the attribute to be passed through to the service by RapidIdentity. This will open a sidebar with fields for attribute preferences.

    Add_Attribute.png
    Add_Attribute_Sidebar.png

    Field

    Description

    Name

    Provide a unique name for this attribute.

    Description

    Add an optional description to further define its purpose.

    Attribute Value

    Choose the type of value definition to be used for this attribute. As in Step 4, note that the three options are Random, Static, and LDAP with the associated settings for each value.

    Attribute Name

    Add an attribute name.

  7. A CAS Service is generally identified by a URL during protocol operations. Since RapidIdentity will only allow interaction with Services that have been pre-registered, the Service URL must exactly match one registered CAS Service. This final section defines the URL Matching Rules for the Service. Rules can be set to Exact or Regex, with the same rules and setting requirements as these rules had in Proxy Policies.

    URL_Matching_Rules.png
    Add_URL_Matching_Rule.png
  8. Click Create in the final sidebar and then click Save on the main screen. The newly set up CAS Federation Partner should now be visible on the Federation Partners main screen.

Integrating RapidIdentity with a Third-party Identity Provider

Third-party Identity Provider Integration with RapidIdentity
Setting up RapidIdentity to Use a Third-party Identity Provider

This procedure will detail how an Administrator of a third-party Identity Provider (IdP) will set up the integration with RapidIdentity as a Service Provider. The following is an overview of the steps that must be completed to perform the integration:

  1. Gather the SAML metadata for the Identity Provider. These steps will vary based on the Identity Provider that is being used. Refer to the documentation for the Identity Provider to obtain details.

  2. Create a new Service Provider Configuration for RapidIdentity. The Identity Provider's metadata will be required during this step.

    1. Ensure that the Service Provider Entity ID is a unique value.

    2. Provide the IdP logout URL

  3. Set up RapidIdentity as a Relying Party for the Third-party IdP.

  4. Assign the new Service Provider configuration to RapidIdentity.

  5. Test SAML SSO

Create a New Service Provider Configuration for RapidIdentity

When integrating with a third-party IdP, RapidIdentity must be configured to be a Service Provider.

  1. As an administrator, log in to the SAML Identity Provider and retrieve the Federation Metadata XML file.

    Note

    Refer to the third-party IdP documentation for additional details on locating the metadata.xml file.

  2. Log in to the RapidIdentity portal as an Administrator and access the Service Providers section from the Configuration workspace.

    service_providers.png
  3. Click the Register Service Provider+ button.

    new_add_saml_2.png
  4. The Register Service Provider window will open.

    new_saml_4.png
    1. Hover over the question marks (?) for additional information on completing the fields and for an example.

  5. The table below describes how to complete the Service Provider information. Fields with an asterisk (*) depict a required field.

    Field

    Description

    Name

    Enter a name for the Service Provider. For example, RapidIdentity to <Third-party IdP>.

    Description

    Optionally, enter a description for the service provider.

    Entity ID*

    The unique identifier for RapidIdentity as the SAML 2.0 Service Provider. When federating with a particular Identity Provider, it must be unique among all of the Relying Parties the Identity Provider federates with.

    This value must be a valid URI or URN and it is recommended to use the base RapidIdentity URL (e.g. "https://{host}/"). For example, <https://localhost.riexample.com/thirdpartyidp>.

    Base URL

    Enter the URL from which to construct SAML endpoints; the URL must be comprised of protocol, server, port, and context path. The URL is the base URL to the Rapididentity instance (e.g. "https://{host}[:{port}]/").

    This can be exactly the same as the Entity ID, but is not a requirement. For example, <https://localhost.riexample.com>.

    Logout URL*

    A URL to redirect the user's browser to after logging out of the local RapidIdentity session. This typically points to the logout URL of the Identity Provider, such as "https://idp-host/idp/logout."

    The URL must be comprised of protocol, server, port, and context path.

    Organization Name

    Enter the name of the organization associated with the provider. Optional, and if specified, shows up in the Service Provider's SAML 2.0 metadata.

    Organization URL

    Enter the website of the organization associated with the provider. Optional, and if specified, shows up in the Service Provider's SAML 2.0 metadata.

    Contact Email Address

    Email address for the contact at the organization. Optional, and if specified, shows up in the Service Provider's SAML 2.0 metadata.

    IDP Metadata*

    Paste the XML metadata from the third-party IdP.

    Tip

    A metadata URL can not be used as metadata.

  6. After entering the required information, click Save.

    1. The service provider configuration will be listed in the workspace and can be made active by "Assigning" it in RapidIdentity. Refer to Assign the Third-Party IdP to RapidIdentity for details.

Set up RapidIdentity as a Relying Party for the Third-party Identity Provider

It is necessary to create a relying party in the third-party Identity Provider. A relying party object consists of a variety of identifiers, names, and rules that identify this partner to the local Federation Service.

In order to successfully integrate with any third-party IdP, that IdP is required to return either the idautoID or the unique email address of the authenticating user.

  1. Release the idautoID value:

    1. The IdP instance must be able to communicate with a datastore that contains the idautoID attribute, such as an Active Directory DC.

    2. Must be released as "idautoid" (case-insensitive) or "urn:idauto.net:saml:attribute:idautoID".

  2. Release the unique email address:

    1. RapidIdentity is required to have the same value provisioned in its backing directory where the email address is unique.

    2. Must be released as "mail", "email", "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress" or "http://schemas.xmlsoap.org/claims/EmailAddress"

    Note

    When RapidIdentity receives a SAML assertion with multiple email address values (and no idautoID), the values will be processed in the order received and the first one which uniquely identifies a User will be accepted.

  3. Follow the configuration steps for creating a relying party for RapidIdentity in the third-party IdP.

Assign the Third-party Identity Provider to RapidIdentity

After creating a new service provider configuration for RapidIdentity with a third-party IdP, RapidIdentity will be listed as a service provider in the workspace and can be assigned applications for login.

Tip

It is helpful to open an additional browser window and log in to the RapidIdentity Portal simultaneously before altering the Service Provider configuration. This will allow an administrator to cancel changes in the case of an error during configuration.

  1. RapidIdentity as a service provider will be listed in the workspace and can be assigned applications for login. Refer to Assign the third-party IdP to RapidIdentity for details.

    new_saml_5.png
    1. If successful, the Assigned to RapidIdentity column will display a "Yes" value. A brief confirmation message, "Saved" will be displayed at the top of the workspace.

  2. Close all browser sessions.

  3. You should be forwarded to the third-party IdP for authentication.

Test SAML SSO for the Third-party IdP

In a new browser window navigate to RapidIdentity.

If configured properly, users should be redirected to the third-party IdP to authenticate. Once authenticated, when accessing RapidIdentity, you should be logged in.

Integrating RapidIdentity with ADFS as a Third-party Identity Provider

Configuring ADFS as a SAML Identity Provider for RapidIdentity

This procedure will detail how an ADFS Administrator will configure ADFS as an Identity Provider (IdP) for RapidIdentity as a Service Provider.

When users access RapidIdentity they are directed to ADFS to authenticate. Once the user authenticates successfully in ADFS they will be redirected to RapidIdentity.

Refer to the following sections for details on the integration and configuration.

Set up the Service Provider Configuration in RapidIdentity

This procedure will detail the first step of how an ADFS Administrator will set up the integration with RapidIdentity as a Service Provider.

  1. As an administrator, log in to ADFS and retrieve the Federation Metadata XML file.

    Note

    Refer to the ADFS documentation for additional details on locating the metadata.xml file.

  2. Log in to the RapidIdentity portal as an Administrator and access the Service Providers section from the Configuration workspace.

    service_providers.png
  3. Click the Register Service Provider+ button.

    new_add_saml_2.png
  4. The Register Service Provider window will open.

    new_saml_4.png
    1. Hover over the question marks (?) for additional information on completing the fields and for an example.

    2. The table below describes how to complete the Service Provider information.

      Field

      Description

      Name

      Enter a name for the Service Provider. For example, RapidIdentity to ADFS.

      Description

      Optionally, enter a description for the service provider.

      Entity ID

      The unique identifier for RapidIdentity as the SAML 2.0 Service Provider. When federating with a particular Identity Provider, it must be unique among all of the Relying Parties the Identity Provider federates with. This value must be a valid URI or URN and it is recommended to use the base RapidIdentity URL (e.g. "https://{host}/"). For example, <https://localhost.riexample.com/ADFS>.

      Base URL

      Enter the URL from which to construct SAML endpoints; the URL must be comprised of protocol, server, port, and context path. and is the base URL to the Rapididentity instance (e.g. "https://{host}[:{port}]/"). This can be exactly the same as the Entity ID, but is not a requirement. For example, <https://localhost.riexample.com>.

      Logout URL

      A URL to redirect the user's browser to after logging out of the local RapidIdentity session. This typically points to the logout URL of the Identity Provider, such as "https://idp-host/idp/logout." The URL must be comprised of protocol, server, port, and context path. Click to automatically populate with the current IdP logout URL. For example, <https//:3rdpartyidp.com/signout>.

      Organization Name

      Enter the name of the organization associated with the provider. Optional, and if specified, shows up in the Service Provider's SAML 2.0 metadata.

      Organization URL

      Enter the website of the organization associated with the provider. Optional, and if specified, shows up in the Service Provider's SAML 2.0 metadata .

      Contact Email Address

      Email address for the contact at the organization. Optional, and if specified, shows up in the Service Provider's SAML 2.0 metadata.

      IDP Metadata

      Paste the XML metadata from the server.

      Tip

      A metadata URL can not be used as metadata.

  5. Export the Service Providers' metadata.

  6. After entering the required information, click Save. The RapidIdentity service provider will be listed in the workspace and can be assigned applications for login.

  7. To activate this Service Provider configuration and enable SAML authentication for RapidIdentity, select the entry in the list and click Assign to RapidIdentity in the action bar.

    new_saml_5.png
    1. If successful, the Assigned to RapidIdentity column will display a "Yes" value. A brief confirmation message, "Saved" will be displayed at the top of the workspace.

Set up a Relying Party Trust in ADFS

It is necessary to create a relying party trust in ADFS. A relying party trust object consists of a variety of identifiers, names, and rules that identify this partner to the local Federation Service.

Tip

It is helpful to open an additional browser window and log in to the RapidIdentity Portal simultaneously before altering the Service Provider configuration. This will allow an administrator to cancel changes in the case of an error during configuration that may prevent logging back in as an administrator.

  1. Log in to ADFS and navigate to the ADFS Management application.

  2. Click Relying Party Trusts and choose Add Relying Party Trust... to launch the wizard.

  3. Click Claims aware

    1. Claim tokens are issued by the IdP after authenticating the user. The login for the application will be the Service Provider, RapidIdentity.

  4. Either import the Service Provider metadata or choose Enter data about the relying party manually.

    Tip

    For ease of access, import the metadata from a local file and name it a Display Name of "RapidIdentity."

  5. In the Choose Access Control Policy step, select Permit everyone.

  6. In the Ready to Add Trust option, no additional configuration is required.

Configuring the Claim Issuance Policy

In this step, ADFS will be configured to release assertion attributes to RapidIdentity. In order to successfully integrate with ADFS as an IdP, either the idautoID or the unique email address of the authenticating user must be returned.

  • Release the idautoID value:

    • Possible if the IdP instance can communicate with an Active Directory DC which contains that attribute.

    • Must be released as "idautoid" (case-insensitive) or "urn:idauto.net:saml:attribute:idautoID."

  • Release the email address:

    • RapidIdentity is required to have the same value provisioned in its backing directory and the email address is unique.

    • Must be released as "mail", "email", "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress" or "http://schemas.xmlsoap.org/claims/EmailAddress."

Note

When RapidIdentity receives a SAML assertion with multiple email address values (and no idautoID), the values will be processed in the order received. The first value which uniquely identifies a User will be accepted.

Configuring the Release of idautoID
  1. In ADFS Management, navigate to Claim Description and choose Add Claim Description.

  2. Enter the required values. Below is a sample of values to be entered.

    Table 77. Claim Description Values

    Field Name

    Value

    Display Name

    IDautoID

    Short Name

    idautoID

    Claim Identifier

    idautoID

    Description

    <blank>

    <Publish this claim description...>

    <both boxes unchecked>



  3. Navigate to Relying Party Trusts and choose the "RapidIdentity" relying party. Select Edit the Claim Issuance Policy.

    1. Click Add Rule....

    2. Choose the Send LDAP Attributes as Claims claim rule template.

    3. Name the Claim rule similar to "Send IdautoID."

    4. Choose the Active Directory attribute store.

    5. Map the "IdautoID" LDAP Attribute to the "IdautoID" Outgoing Claim Type.

    6. Click Finish and then OK to finish editing the Claim Issuance Policy.

Configuring the release of Email Address
  1. Navigate to Relying Party Trusts and choose the "RapidIdentity" relying party.

  2. Click Edit the Claim Issuance Policy.

  3. Click Add Rule.

  4. Chose the "Send LDAP Attributes as Claims" claim rule template.

  5. Name the claim rule similar to "Send Email Address."

  6. Choose the Active Directory Attribute store.

  7. Map the E-Mail-Addresses LDAP Attribute to the E-Mail Address Outgoing Claim Type.

  8. Click Finish and then click OK to complete editing the Claim Issuance Policy.

Test SAML SSO with ADFS

In a new browser window navigate to RapidIdentity.

If configured properly, users should be redirected to ADFS to authenticate. Once authenticated, when accessing RapidIdentity, you should be logged in.

Editing the Web Template

The RapidIdentity Federation login page supports CSS configuration enhancements to allow organizations to brand their login page to best serve their organization and user population.

Follow these steps to edit the web template used in the login screen.

  1. From the Portal Module Selector, choose Configuration. Then from the Security menu, choose Identity Providers.

    Identity_Providers.png
  2. From the Left Menu Items, select Web Template.

    Web_Template_2.png
  3. The Edit IDP Web Customizations page contains fields to edit the HTML web template. Click a checkbox to activate a function, or enter text in the blank field for the selection to enter the value.

    Web_Template_Options_-_All.png

    Field

    Description

    Load Helplinks in Same Tab/Window

    Allows administrators to determine whether the Forgot My Username and Forgot My Password dialogs open in new tabs or windows, based on the current browser configuration. If checked, the dialog boxes will load in the same tab or window; if unchecked, these dialog boxes proceed in different browser tabs. Currently, in order to facilitate the same tab or window feature, the help links are loaded in an <iframe>.

    Page Title

    Enter a title for the web template for the login page

    Favicon URL

    Used to include a URL for the browser to display a logo

    Custom Logo Image URL

    Enter a URL for a custom logo image. After entering a URL for a logo image, a box appears underneath called "Custom Logo Preview" to show the image that was entered.

    Header Background Color, Header Text Color, Body Background Color, Body Text Color

    Basic mode is the default mode and allows administrators to configure colors from a color picker to be configured. For each of these four selections, optionally click the drop-down for the color box, and customize the scheme.

    color_scheme_dropdown.png

    Enable Custom CSS (Advanced) , Enable Custom HTML (Advanced)

    Advanced mode allows administrators to configure the login page through writing their own CSS and also to include HTML for additional divisions.

    Click the checkbox to allow Administrators to use CSS to configure the login page further to suit any organization's branding requirements. To ensure Basic mode color selections are retained upon upgrade, click the Enable Custom CSS (Advanced) checkbox. Custom styling from versions prior to 3.5 are not migrated.

    Note

    Any valid HTML entered into the text area will manifest as new HTML on the login pages. Note that javascript included in Custom HTML is not supported and will not function as expected.

    An authentication policy has to be activated for Custom HTML to function properly.

    Note

    Custom HTML is invisible by default, but can be made visible by CSS. You must add the CSS visibility property to the Custom CSS field and set it to visible as it applies to the custom HTML. For example, if your custom HTML uses a <div> tag, you would need to add the following code to the Custom CSS:

    .custom-html{
        height:auto;
        visibility:visible;
    }

    For additional information on CSS, refer to CSS Styling later in this topic.

    Logout Body

    Allows administrators to write custom HTML to be included in the body of the logout web page. Administrators can include, for example, custom messages and styling to redirect users to a different site. Use {i18n:<key>} syntax in the custom HTML to localize it. Those custom i18n values can, themselves, contain HTML.

    Claim Account Link Label

    The text that will be used at the login screen for new users to claim their account.

    Claim Account URL

    The URL that the user will be redirected to in order to claim their account with RapidIdentity. The default for this field is /portal/claim.

    Help Links

    Provide the URLs and display names that will be used for Forgot My Username and Forgot My Password actions.

  4. Click Trigger Web Reload at the bottom of the workspace to activate the changes or Reset to Defaults to overwrite any updates.

To ensure customizations are not modified from future product development updates, reference specific CSS identifiers/selectors with the prefix ".cs-" as shown in the screenshot below.

login_webtemplate.png

Letter

CSS identifiers with the prefix ".cs-"

Style

A

".cs-body"

Page Body Style

B

".cs-header"

Page Header Style

C

".cs-heading"

Heading Text

D

".cs-login-logo"

Logo Image

E

".cs-button-aslink"

Help Links

F

".cs-button"

Primary Buttons

G

".cs-wrapper.content"

Body Below Header

CSS Styling

Custom CSS styling may be written as follows:

.cs-wrapper 
{ background-color: #afbce1; } 
.cs-login-logo 
{ background: url(//abc.def.com/example); } 
.cs-header 
{ background-color: #0d66b2; } 
.cs-button 
{ color: #0d66b2; background-color: #d7ddf0; } 
.cs-button:hover 
{ color: #d7ddf0; background-color: #0d66b2; } 
.cs-button-aslink 
{ top: 240px; } 

More advanced, custom CSS styling configurations are possible. One example is shown below.

signin.png

The whitespace above the light blue box containing the username and password fields is reserved for the official organization logo. The CSS for this particular configuration for use as a representative example to edit is as follows:

.cs-body, .cs-wrapper {
    background-color: #fff;
    font-family: 'Century Gothic', Arial, sans-serif;
}
.cs-container {
    position: relative;
}
.cs-header {
    display: none;
}
.cs-login-logo {
    margin: auto;
    width: 192px;
    height: 100px;
    margin-bottom: 40px;
    background-image: url(http://[yourOrganizationLogoUrlWithImageExtention);
    background-size: 192px 102px;
}
.cs-login-container {
    text-align: center;
    color: #0032a0;
    font-size: 16px;
    clear: left;
    padding: 20px;
    border: 1px solid #c4cfe6;
    background: #E3EAFC;
    border-radius: 20px;
    box-shadow: 0px 2px 7px rgba(100,140,220,.6);
}
.cs-login-container:after {
    content: "For password help call 123-456-7890";
    font-size: 12px;
}
.input {
    display: block;
    width: 100%;
    height: 40px;
    margin-bottom: 15px;
    padding-right: 10px;
    padding-left: 10px;
    background-color: #F6F8FF;
    border-radius: 3px;
    color: #445963;
    outline: 0;
    border: 1px solid #e6e6e6;
}
.cs-button-wrapper {
    margin: 0;
}
.cs-button[type="submit"] {
    background-color: #0032a0;
    color: #F9F9F9;
    width: 80px;
    height: 80px;
    text-indent: -99999px;
    line-height: 0;
    border-radius: 100px;
    margin: 40px 0;
}
.cs-button[type="submit"]::after {
    content: "Sign In";
    text-indent: -18px;
    display: block;
    line-height: initial;
    font-weight: 300;
}
.cs-button[type="button"] {
    background-color: transparent;
    text-indent: -99999px;
    line-height: 0;
    background: url(https://www.wpclipart.com/signs_symbol/button/
        metal_buttons/arrow_button_metal_blue_right.png) 
        240px center no-repeat;
    background-size: 20px 20px;
}
.cs-button[type="button"]:hover {
    background-color: transparent;
}
.cs-button[type="button"]::after {
    content: "New users set up your account";
    text-indent: 0;
    display: block;
    color: #0032a0;
    font-size: 12px;
    font-weight: normal;
    font-family: 'Century Gothic', Arial, sans-serif;
}
.cs-nav-next-button {
    background-image: none;
}
.claim-account-text, .cs-heading-container {
    display: none;
}
.need-help-link {
    margin: 0;
    display: inline-block;
    position: absolute;
    top: 310px;
    right: 55px;
}
.cs-button-aslink {
    color: #2749A5;
    font-size: 10px;
    float: none;
    margin: 0;
}
.button:hover {
    background-color: #021a4c;
    transition: background-color 60ms ease-out;
}
.placeholder-container {
    position: relative;
}
span.placeholder-text {
    display: block;
    top: 0;
    left: 15px;
    color: #2749A5;
    font-size: 12px;
}
.placeholder-input {
    position: relative;
    top: 16px;
    border-radius: 30px;
}
.input-toggle {
    background-image: none;
    width: 80px;
    top: -2px;
    color: #2749A5;
}
.input-toggle::after {
    content: "Show Password";
    font-size: 10px;
}
#pwd {
    margin-top: 30px;
}
::-webkit-input-placeholder { /* WebKit browsers */
    color:    #fff;
}
:-moz-placeholder { /* Mozilla Firefox 4 to 18 */
    color:    #fff;
    opacity:  1;
}
::-moz-placeholder { /* Mozilla Firefox 19+ */
    color:    #fff;
    opacity:  1;
}
:-ms-input-placeholder { /* Internet Explorer 10+ */
    color:    #fff;
}
.error-message {
    margin-bottom: 0;
    margin-left: 16px;
    padding-top: 5px;
    font-size: 12px;
}
.content:after {
    content: "Please note that the use of the [organizationName] 
        network, computer equipment, and resources are not private 
        and may be monitored for appropriate use. For further 
        information, please refer to the [organizationName] 
        Acceptance Use Policy to understand appropriate use.";
    text-align: center;
    width: 310px;
    margin: 40px auto;
    font-size: 12px;
    color: grey;
} 
Adapter Actions
Active Directory Adapter Reference
Connect Password Filter

The Active Directory adapter depends on the Connect Active Directory Password Filter to be able to capture password changes in AD.

Install and configure the password filter only if the environment is using Active Directory.

Adds a member to a Group on the Active Directory Server.

Property

Value

Description

adConnection*

expression, variable

the AD connection

groupDn*

text, expression, variable

theDN of the Group

memberDn*

text, expression, variable

the DN of the member

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

session = openADConnection()
groupDn = "CN=TestGroup,OU=Groups,DC=test,DC=local"
newDn = "CN=Test User,OU=People,DC=test,DC=local"
result = addADGroupMember(session, groupDn, newDn)
if(result) {
    log("User added to Group " + groupDn)
} else {
    log("User not added to Group " + opegroupDn)
}
close(session)

Adds members to a Group on the Active Directory Server.

Property

Value

Description

memberDns*

expression, variable

array of DNs of the members

groupDn*

text, expression, variable

theDN of the Group

adConnection*

expression, variable

the AD connection

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

session = openADConnection(...)
groupDn = "CN=TestGroup,OU=Groups,DC=test,DC=local"
newMembers = createArray()
appendArrayItem(newMembers, "CN=Test User 1,OU=People,DC=test,DC=local")
appendArrayItem(newMembers, "CN=Test User 2,OU=People,DC=test,DC=local")
appendArrayItem(newMembers, "CN=Test User 3,OU=People,DC=test,DC=local")
result = addADGroupMembers(session, groupDn, newMembers)
if(result) {
    log("Users added to Group " + groupDn)
} else {
    log("Users not added to Group " + groupDn)
}
close(session)

Add a User to the Active Directory server.

Property

Value

Description

adConnection*

expression, variable

the AD connection

record*

expression, variable

the Record containing fields to set - must contain the dn in the @dn field

password*

password, string, expression, variable

the initial password

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

session = openADConnection(...)
record = createRecord()
# Set default values
setRecordFieldValue(record, "objectClass", "User")
setRecordFieldValue(record, "sn", "User")
setRecordFieldValue(record, "givenName", "Test")
setRecordFieldValue(record, "mail", "TestUser@test.local")
setRecordFieldValue(record, "sAMAccountName", "TestUser")
setRecordFieldValue(record, "homeDirectory", "\\\\Server\\Share\\Users\\" 
    + record['sAMAccountName'])
setRecordFieldValue(record, "homeDrive", "H:")
password = "changeme"
# Set DN
destinationDN = "OU=People,DC=test,DC=local"
setRecordFieldValue(record, "cn", record['givenName'] + " " 
    + record['sn'])
setRecordFieldValue(record, "@dn", "cn=\"" + record.cn + "\"," 
    + destinationDN)
removeRecordField(record, "cn")
if(!record['sn'] || !record['givenName'] || !record['mail'] || 
    !record['sAMAccountName']) {
    log("Minimum requirements not met for add - " + record)
    return null
} else {
}
# Add User
result = addADUser(session, record, *********)
if(result) {
    log("Record added - " + record)
    if(record['homeDirectory']) {
        result = createADHomeDirectory(system['session'], 
            record['@dn'], record['homeDirectory'])
        if(result) {
            log("Directory created - " + record['homeDirectory'])
        } else {
            log("Unable to create directory - " 
                + record['homeDirectory'])
        }
    } else {
}
} else {
    log("Record not added - " + record)
}
close(session)

Add an array of Users to the Active Directory Server.

Property

Value

Description

adConnection*

expression, variable

the AD connection

records*

expression, variable

array of Records containing fields to set - must contain the dn in the @dn field

passwords*

expression, variable

array of initial passwords

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

session = openADConnection(...)
# Build arrays of User records and passwords to add
newUserRecords = createArray()
newUserPasswords = createArray()
i = 0
while(i < 10) {
    record = createRecord()
    # Set default values
    setRecordFieldValue(record, "objectClass", "User")
    setRecordFieldValue(record, "sn", "User" + i)
    setRecordFieldValue(record, "givenName", "Test")
    setRecordFieldValue(record, "mail", "TestUser" + i "@test.local")
    setRecordFieldValue(record, "sAMAccountName", "TestUser" + i)
    setRecordFieldValue(record, "homeDirectory", 
        "\\\\Server\\Share\\Users\\" +
    record['sAMAccountName'])
    setRecordFieldValue(record, "homeDrive", "H:")
    password = "changeme"
    # Set DN
    destinationDN = "OU=People,DC=test,
        DC=local"setRecordFieldValue(record, "cn", 
        record['givenName'] 
    + " " + record['sn'])
    setRecordFieldValue(record, "@dn", "cn=\"" + record['cn'] + "\"," + destinationDN)
    removeRecordField(record, "cn")
    if(record['sn'] && record['givenName'] && record['mail'] && 
        record['sAMAccountName']) {
        appendArrayItem(newUserRecords, record)
        appendArrayItem(newUserPasswords, password)
    } else {
        log("Minimum requirements not met for add - " + record)
    }
    i = i + i
}
if(newUserRecords['length'] == 0) {
    # No users to add
    return
}
# Add Users
results = addADUsers(session, newUserRecords, newUserPasswords)
i = 0;
forEach(record, newUserRecords) {
    result = results && results[i];
    if(result) {
        log("Record added - " + record)
        if(record['homeDirectory']) {
            result = createADHomeDirectory(system['session'], 
                    record['@dn'],
            record['homeDirectory'])
            if(result) {
                log("Directory created - " 
                    + record['homeDirectory'])
            } else {
                log("Unable to create directory - " 
                    + record['homeDirectory'])
            }
        } else {
        }
    } else {
        log("Record not added - " + record)
    }
    i = i + 1
}
close(session)

Compare a Record field on the Active Directory server.

Property

Value

Description

adConnection*

expression, variable

the AD connection

dn*

expression, variable

the DN of the Record

fieldName

text, expression, variable

name of the field to be compared

fieldValue

text, expression, variable

value of the field to be compared

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

session = openADConnection(...)
mail = "testuser@test.local"
isEqual = compareADField(session, dn, "mail", mail)
if(isEqual == true) {
    log("mail = " + mail)
} else {
    log("mail <> " + mail)
}
close(session)

Create a Home Directory for a User on the Active Directory server.

Property

Value

Description

adConnection*

expression, variable

the AD connection

record*

expression, variable

The record to save

uncPath*

text, expression, variable

the UNC path of the home directory

returnVariable

expression, variable

name of the variable to be assigned to the return value

extraProperties

expression, variable

extra possible properties supported for JCIFS NG

Example

session = openADConnection(...)
setRecordFieldValue(record, "homeDirectory", 
    "\\\\server1.test.local\\share\\users\\testuser")
setRecordFieldValue(userRecord, "userPrincipalName", idautotestuser@test1.local
result = createADHomeDirectory(session, record['userPrincipalName'], 
    record['homeDirectory'])
if(result) {
    log("Directory created - " + record['homeDirectory'])
} else {
    log("Unable to create directory - " + record['homeDirectory'])
}
close(session)

Delete a Home Directory for a User on the Active Directory server.

Property

Value

Description

adConnection*

expression, variable

the AD connection

userDn*

text, expression, variable

the DN of the User

returnVariable

expression, variable

name of the variable to be assigned to the return value

extraProperties

expression, variable

extra possible properties supported for JCIFS NG

Example

session = openADConnection(...)
setRecordFieldValue(record, "homeDirectory", 
    "\\\\server1.test.local\\share\\users\\testuser")
setRecordFieldValue(record, "@dn", 
    "CN=test user,OU=People,DC=test,DC=local")
result = deleteADHomeDirectory(session, record['@dn'], 
    record['homeDirectory'])
if(result) {
    log("Directory deleted - " + record['homeDirectory'])
} else {
    log("Unable to delete directory - " + record['homeDirectory'])
}
close(session)

Delete a record from the Active Directory server.

Property

Value

Description

adConnection*

expression, variable

the AD connection

dn*

text, expression, variable

the DN of the Record

recursive

boolean, expression, variable

recursively delete subtree rooted at dn (default: false)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

session = openADConnection(...)
dn = "CN=test user,OU=People,DC=test,DC=local"
result = deleteADRecord(session, dn)
if(result) {
    log("Record deleted - " + dn)
} else {
    log("Unable to delete record - " + dn)
}
close(session)

Delete array of Records from the Active Directory server.

Property

Value

Description

adConnection*

expression, variable

the AD connection

dns*

expression, variable

array of DNs of the Records

recursive

boolean, expression, variable

recursively delete subtree rooted at dn (default: false)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

session = openADConnection(...)
dns = createArray()
appendArrayItem(dns, "CN=Test User 1,OU=People,DC=test,DC=local")
appendArrayItem(dns, "CN=Test User 2,OU=People,DC=test,DC=local")
appendArrayItem(dns, "CN=Test User 3,OU=People,DC=test,DC=local")
results = deleteADRecords(session, dns)
i = 0
forEach(dn, dns) {
    result = results && results[i]
    if(result) {
        log("Record deleted - " + dn)
    } else {
        log("Unable to delete record - " + dn
    }
    i = i + 1
}
close(session)

Get 'Account is Disabled' flag.

Property

Value

Description

adConnection*

expression, variable

the AD connection

accountDn*

text, expression, variable

the DN of the account

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

session = openADConnection(...)
setRecordFieldValue(record, "@dn", 
    "CN=test user,OU=People,DC=test,DC=local")
result  =  getADAccountDisabled (Session, record['@dn'])
if(result)   {
    log("Active Directory Account Disabled", "green")
} else {
    log("Active Directory Account NOT Disabled", "red")
}
close(session)

Get 'Account is Disabled' flag from multiple accounts.

Property

Value

Description

adConnection*

expression, variable

the AD connection

accountDns*

expression, variable

array of DNs of the accounts

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

session = openADConnection(...)
dns = createArray()
appendArrayItem(dns, "CN=Test User 1,OU=People,DC=test,DC=local")
appendArrayItem(dns, "CN=Test User 2,OU=People,DC=test,DC=local")
appendArrayItem(dns, "CN=Test User 3,OU=People,DC=test,DC=local")
results = getADAccountsDisabled(session, dns)
i = 0
forEach(dn, dns) {
    result = results && results[i]
    if(result) {
        log("Account is disabled - " + dn)
    } else {
        log("Account is enabled - " + dn)
    }
    i = i + 1
}
close(session)

Get changed Records from an Active Directory server.

Property

Value

Description

adConnection*

expression, variable

the AD connection

baseDn*

text, expression, variable

the search base dn

scope*

choice (sub, one, base), text, expression, variable

the search scope

filter*

text, expression, variable

the search filter expression or an example Record

attributes

text, expression, variable

comma separated list of attributes to return (default: none)

cookie

expression, variable

cookie returned from previous invocation (default: none, which will return all objects)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Warning

This action, as shown in the example below, provides valid results when configured properly. However, getADChanges is no longer the preferred method to obtain changed record results within an Action Set.

The current preferred method to obtain changed record results is to use the openADChangeIterator action, as shown below.

Example

session = openADConnection(...)
cookieFile = "/cookie/studentsAD.cookie"
fileExists = isFile(cookieFile)
if(!fileExists) {
    saveToFile(cookieFile, "")
} else {
}
varCookie = loadFileAsBytes(cookieFile)
# getRecords
moreResults = 1
while(moreResults != 0) {
    recordChanges = getADChanges(session, 
        "OU=People,DC=test,DC=local", "sub", 
    "(employeeType=Student)", "cn,sn,givenName", varCookie)
    moreResults = 0
    if(recordChanges) {
        log("Count: " + recordChanges.length)
    } else {
    }
    # foreach
    forEach(recordChange, recordChanges) {
        if(recordChange.objectClass == "cookie") {
            saveToFile(cookieFile, recordChange.cookie)
            varCookie = recordChange.cookiemoreResults = 
                Number(recordChange.moreResults)
        } else {
            record = getADRecord(session, recordChange['@dn'], "*")
            # transformations
            if(!record) {
                continue()
            } else {
                log("Name information has changed: " + record.sn 
                    + " " + record['givenName'])
            }
        }
    }
}
# Close Connections
close(session)

Get 'Password does not expire' flag.

Property

Value

Description

adConnection*

expression, variable

the AD connection

accountDn*

text, expression, variable

the DN of the account

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

session = openADConnection(...)
dn = "CN=Test User,OU=People,DC=test,DC=local"
result = getADDontExpirePassword(session, dn)
if(result != null) {
    if(result == true) {
        log("Password expires")
    } else {
        log("Password does not expire")
    }
} else {
    log("Unable to get UserCannotChangePassword")
}
close(session)

Get 'Password does not expire' flag from multiple accounts.

Property

Value

Description

adConnection*

expression, variable

the AD connection

accountDns*

expression, variable

array of DNs of the accounts

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

session = openADConnection(...)
dns = createArray()
appendArrayItem(dns, "CN=Test User 1,OU=People,DC=test,DC=local")
appendArrayItem(dns, "CN=Test User 2,OU=People,DC=test,DC=local")
appendArrayItem(dns, "CN=Test User 3,OU=People,DC=test,DC=local")
results = getADDontExpirePasswords(session, dns)
i = 0
forEach(dn, dns) {
    result = results && results[i]
    if(result) {
        log("Account password doesn't expire - " + dn)
    } else {
        log("Account password expires - " + dn)
    }
    i = i + 1
}
close(session)

Gets decrypted password stored by RapidIdentity password filter from an Active Directory entry.

Property

Value

Description

adConnection*

expression, variable

the AD connection

dn*

text, expression, variable

the DN of the Record

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

session = openADConnection(...)
password = "password1" 
dn = "CN=Test User,OU=People,DC=test,DC=local"
adPwd = getADPassword(session, dn)
if(adPwd && adPwd == password) {
    log("User has not changed their default password!")
} else {
    log("Password has been changed from default.")
}
close(session)

Gets an array of decrypted passwords stored by RapidIdentity password filter from Active Directory entries.

Property

Value

Description

adConnection*

expression, variable

the AD connection

dns*

expression, variable

array of DNs of the Records

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

session = openADConnection(...)
password = "password1" 
dns = createArray()
appendArrayItem(newMembers, 
    "CN=Test User 1,OU=People,DC=test,DC=local")
appendArrayItem(newMembers, 
    "CN=Test User 2,OU=People,DC=test,DC=local")
appendArrayItem(newMembers, 
    "CN=Test User 3,OU=People,DC=test,DC=local")
adPwds = getADPasswords(session, dns)
i = 0
forEach(dn, dns) {
    adPwd = adPwds && adPwds[i]
    if(adPwd == password) {
        log("User has not changed their default password!")
    } else {
        log("Password has been changed from default.")
    }
    i = i + i
}
close(session)

Get a Record from the Active Directory server.

Property

Value

Description

adConnection*

expression, variable

the AD connection

dn*

expression, variable

the DN of the Record

attributes

text, expression, variable

comma separated list of attributes to return (default: none)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

session = openADConnection(...)
dn = "CN=Test User,OU=People,DC=test,DC=local"
record = getADRecord(session, dn, "cn,sn,givenName")
if(record) {
    log("User found: " + record)
} else {
    log("User not found: " + dn)
}
close(session)

Get multiple Records from the Active Directory server.

Property

Value

Description

adConnection*

expression, variable

the AD connection

baseDn*

text, expression, variable

the search base dn

scope*

choice (sub, one, base), text, expression, variable

the search scope

filter*

text, expression, variable

the search filter expression or an example Record

maxResults

expression, variable

maximum number of Records to return (default: the server maximum)

attributes

text, expression, variable

comma separated list of attributes to return (default: none)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

session = openADConnection(...)
baseDn = "OU=People,DC=test,DC=local"
filter = "(objectClass=user)"
records = getADRecords(session, baseDn, "sub", filter, 
    "cn,sn,givenName")
log("Found: " + records.length)
forEach(record,records) {
    log("User found: " + record)
}
close(session)

Get an array of Records from the Active Directory server by DN.

Property

Value

Description

adConnection*

expression, variable

the AD connection

dns*

expression, variable

array of DNs of the Records

attributes

text, expression, variable

comma separated list of attributes to return (default: none)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

session = openADConnection(...)
dns = createArray()
appendArrayItem(newMembers, 
    "CN=Test User 1,OU=People,DC=test,DC=local")
appendArrayItem(newMembers, 
    "CN=Test User 2,OU=People,DC=test,DC=local")
appendArrayItem(newMembers, 
    "CN=Test User 3,OU=People,DC=test,DC=local")
records = getADRecordsByDN(session, dns, "cn,sn,givenName")
i = 0
forEach(dn, dns) {
    record = records && records[i]
    if(record) {
        log("User found: " + record)
    } else {
        log("User not found: " + dn)
    }
    i = i + 1
}
close(session)

Get AD 'User Cannot Change Password' flag.

Property

Value

Description

adConnection*

expression, variable

the AD connection

userDn*

text, expression, variable

the DN of the User

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

session = openADConnection(...)
dn = "CN=Test User,OU=People,DC=test,DC=local"
result = getADUserCannotChangePassword(session, dn)
if(result != null) {
    if(result == true) {
        log("User cannot change password")
    } else {
        log("User can change password")
    }
} else {
    log("Unable to get UserCannotChangePassword")
}
close(session)

Get AD 'User Cannot Change Password' flag from multiple Users.

Property

Value

Description

adConnection*

expression, variable

the AD connection

userDns*

expression, variable

array of DNs of the Users

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

session = openADConnection(...)
dns = createArray()
appendArrayItem(dns, "CN=Test User 1,OU=People,DC=test,DC=local")
appendArrayItem(dns, "CN=Test User 2,OU=People,DC=test,DC=local")
appendArrayItem(dns, "CN=Test User 3,OU=People,DC=test,DC=local")
results = getADUsersCannotChangePassword(session, dns)
i = 0
forEach(dn, dns) {
    result = results && results[i]
    if(result) {
        log("User cannot change password - " + dn)
    } else {
        log("User can change password - " + dn)
    }
    i = i + 1
}
close(session)

Modify a Record on the Active Directory server.

Property

Value

Description

adConnection*

expression, variable

the AD connection

dn*

expression, variable

the DN of the Record

removeRecord

expression, variable

a Record containing attributes/values to be removed

addRecord

expression, variable

a Record containing attribute values to be added

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

session = openADConnection(...)
addRecord = createRecord()
removeRecord = createRecord()
setRecordFieldValue(addRecord, "objectClass", "customObjectClass")
addRecordField(removeRecord, "telephoneNumber")
dn = "CN=Test User,OU=People,DC=test,DC=local"
result = modifyADRecord(session, dn, removeRecord, addRecord)
if(result) {
    log("Record modified - Added " + addRecord)
    log("Record modified - Removed " + removeRecord)
} else {
    log("Record not modified - " + dn)
}
close(session)

Modify an array of Records on the Active Directory server.

Property

Value

Description

adConnection*

expression, variable

the AD connection

dns*

expression, variable

array of DNs of the Records

removeRecords

expression, variable

array of Records containing attributes/values to be removed

addRecords

expression, variable

array of Records containing attribute values to be added

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

session = openADConnection(...)
addRecord = createRecord()
removeRecord = createRecord()
setRecordFieldValue(addRecord, "objectClass", "customObjectClass")
addRecordField(removeRecord, "telephoneNumber")
addRecords = createArray()
removeRecords = createArray()
dns = createArray()
appendArrayItem(dns, "CN=Test User 1,OU=People,DC=test,DC=local")
appendArrayItem(addRecords, addRecord)
appendArrayItem(removeRecords, removeRecord)
appendArrayItem(dns, "CN=Test User 2,OU=People,DC=test,DC=local")
appendArrayItem(addRecords, addRecord)
appendArrayItem(removeRecords, removeRecord)
appendArrayItem(dns, "CN=Test User 3,OU=People,DC=test,DC=local")
appendArrayItem(addRecords, addRecord)
appendArrayItem(removeRecords, removeRecord)
results = modifyADRecords(session, dns, removeRecords, addRecords)
i = 0
forEach(dn, dns) {
    result = results && result[i]
    if(result) {
        log("Record modified - Added " + addRecords[i] + " to " 
            + dn)
        log("Record modified - Removed " + removeRecords[i] 
            + " to " + dn)
    } else {
        log("Record not modified - " + dn)
    }
    i = i + 1
}
close(session)

Moves a Home Directory for a User on the Active Directory server.

Property

Value

Description

adConnection*

expression, variable

the AD connection

userDn*

text, expression, variable

the DN of the User

uncPath*

text, expression, variable

the new UNC path of the home directory

returnVariable

expression, variable

name of the variable to be assigned to the return value

extraProperties

expression, variable

extra possible properties supported for JCIFS NG

Example

session = openADConnection(...)
homeDirectory = "\\\\server1.test.local\\share\\users\\testuser"
dn = "CN=test user,OU=People,DC=test,DC=local"
result = moveADHomeDirectory(session, dn, homeDirectory)
if(result) {
    log("Directory moved - " + homeDirectory)
} else {
    log("Unable to move directory - " + homeDirectory)
}
close(session)

Open AD Change Iterator.

Property

Value

Description

adConnection*

expression, variable

the AD connection

baseDn*

text, expression, variable

the search base dn

scope*

choice (sub, one, base), text, expression, variable

the search scope

filter*

text, expression, variable

the search filter expression or an example Record

attributes

text, expression, variable

comma separated list of attributes to return (default: none)

cookieFile*

text, expression, variable

path to file to load/save cookie

returnVariable

expression, variable

name of the variable to be assigned to the return value

Warning

The cookie file can impact the results obtained when running openADChangeIterator. If the cookie file does not exist in the path, the results when running the Action Set will show all records based on the listed action properties and their values. If the cookie file does exist in the path, the results when running the Action Set will show the results that have changed since the Action Set was last run relative to the existing cookie file. Thus, the presence of a cookie file could lead to inaccurate results when running the Action Set. If it is necessary to ensure the Action Set is run for all targeted records, one option is to rename or move the cookie file.

Example

session = openADConnection(...)
cookieFile = "/cookie/studentsAD.cookie"
recordChanges = openADChangeIterator(session, 
    "OU=People,DC=test,DC=local", "sub", 
"(employeeType=Student)", "cn,sn,givenName", cookieFile)
# foreach
forEach(recordChange, recordChanges) {
    record = getADRecord(session, recordChange['@dn'], "*")
    # transformations
    if(!record) {
        continue()
    } else {
        log("Name information has changed: " + record['sn'] + " " 
            + record['givenName'])
    }
}
# Close Connections
close(session)

Open a connection to an Active Directory server.

Property

Value

Description

adHost*

text, expression, variable

the host name or IP address of the Active Directory server

adPort

expression, variable

the TCP port of the Active Directory server (default: 636 if using SSL, 389 otherwise.)

useSSL

boolean, expression, variable

use SSL/TLS (default: false.)

userDn

text, expression, variable

the user DN for authenticating to the Active Directory server

password

password, string, expression, variable

the user password for authenticating to the Active Directory server

returnVariable

expression, variable

name of the variable to be assigned to the return value

extraProperties

expression, variable

Defined below as applicable

Table 78. Booleans

Property

Description

abandonOnTimeout

Indicates whether the LDAP SDK should attempt to abandon any request for which no response is received in the maximum response timeout period

captureConnectStackTrace

Indicates whether the LDAP SDK should capture a thread stack trace for each attempt made to establish a connection

useKeepAlive

Indicates whether to use the SO_KEEPALIVE option for the underlying sockets used by associated connections

useTCPNoDelay

Indicates whether to use the TCP_NODELAY option for the underlying sockets used by associated connections

followReferrals

Indicates whether associated connections should attempt to follow any referrals that they encounter

usePassiveSSLSocketVerifier

If true, corresponds to RapidIdentity setting a SSLSocketVerifier using a passive SSL socket verifier with the connection timeout milliseconds



Table 79. Integers

Property

Description

connectTimeoutMillis

The maximum length of time in milliseconds that a connection attempt should be allowed to continue before giving up

useLinger

The SO_LINGER timeout for the underlying sockets used by associated connections

referralHopLimit

The maximum number of hops that a connection should take when trying to follow a referral

responseTimeoutMillis

The maximum length of time in milliseconds that an operation should be allowed to block while waiting for a response from the server



Example

host = "server1.test.local"
port = "636"
ssl = true
user = "test.local\\administrator"
password = "mySecur3p@ssw0rd"
session = openADConnection(host,port,ssl,user,password)
if(session) {
    log("Successfully connected to AD!")
} else {
    log("Unable to connect to AD")
}
close(session)

Open Record Iterator for AD server to sort large sets of records.

Property

Value

Description

adConnection*

expression, variable

the AD connection

baseDn*

text, expression, password, variable

the search base dn

scope*

choice (sub, one, base), text, expression, variable

the search scope

filter*

text, expression, password, variable

the search filter expression or an example record

initialOffset

expression, variable

the number of records to skip initially. (default: 0)

pageSize

expression, variable

the preferred number of records to fetch at a time from AD server. (default: 100)

attributes

text, expression, password, variable

comma-separated list of attributes to check/return (default: none)

sortKey

text, expression, password, variable

comma-separated list of attributes to use as sort keys, with optional +/- to indicate sort direction. (default: unsorted)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

sessionAD = openADConnection("10.100.30.35", "636", true, 
    "administrator@test.local",<Password>)
# Record Iterator
i = 0
recordChanges = openADRecordIterator(sessionAD, 
    "ou=students,ou=people,dc=test,dc=local", "sub", 
"(employeeType=Student)", undefined, undefined, "cn", undefined)
recordIterator: forEach(recordChange, recordChanges) {
    log(recordChange)
    i = i +1
    if(i >= 30) {
        break(recordIterator)
        } else {
        }
    }
}
# Close
close(sessionLDAP)

Removes a member from a Group on the Active Directory server.

Property

Value

Description

adConnection*

expression, variable

the AD connection

groupDn*

text, expression, variable

theDN of the Group

memberDn*

text, expression, variable

the DN of the member

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

session = openADConnection(...)
groupDn = "CN=TestGroup,OU=Groups,DC=test,DC=local"
newDn = "CN=Test User,OU=People,DC=test,DC=local"
result = removeADGroupMember(session, groupDn, newDn)
if(result) {
    log("User removed from Group " + groupDn)
} else {
    log("User not removed from Group " + groupDn)
}
close(session)

Removes multiple members from a Group on the Active Directory server.

Property

Value

Description

adConnection*

expression, variable

the AD connection

groupDn*

text, expression, variable

theDN of the Group

memberDns*

expression, variable

array of DNs of the members

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

session = openADConnection(...)
groupDn = "CN=TestGroup,OU=Groups,DC=test,DC=local"
newMembers = createArray()
appendArrayItem(newMembers, 
    "CN=Test User 1,OU=People,DC=test,DC=local")
appendArrayItem(newMembers, 
    "CN=Test User 2,OU=People,DC=test,DC=local")
appendArrayItem(newMembers, 
    "CN=Test User 3,OU=People,DC=test,DC=local")
result = removeADGroupMembers(session, groupDn, newMembers)
if(result) {

    log("Users removed from Group " + groupDn)
} else {
    log("Users not removed from Group " + groupDn)
}
close(session)

Rename and/or move an object on the Active Directory server.

Property

Value

Description

adConnection*

expression, variable

the AD connection

oldDn*

text, expression, variable

the original DN of the object

newDn*

text, expression, variable

the new DN of the object

keepOldRdn*

boolean, expression, variable

preserve that attribute values used by the old dn (default: false.)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

session = openADConnection(...)
oldDn = "CN=Test User,OU=People,DC=test,DC=local"
newDn = "CN=Test User,OU=Staff,OU=Internal,OU=People,DC=test,DC=local"
result = renameADRecord(session, oldDn, newDn)
if(result) {
    log("User moved or renamed to " + newDn)
} else {
    log("User not moved or renamed " + oldDn)
}
close(session)

Save a Record to the Active Directory server.

Property

Value

Description

adConnection*

expression, variable

the AD connection

record*

expression, variable

the Record to save - must contain the dn in the @dn field

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

session = openADConnection(...)
record = createRecord()
setRecordFieldValue(record, "telephoneNumber", "555-555-1234")
addRecordFieldValue(record, "telephoneNumber", "555-555-9876")
dn = "CN=Test User,OU=People,DC=test,DC=local"
setRecordFieldValue(record, "@dn", dn)
result = saveADRecord(session, record)
if(result) {
    log("Record saved - " + record)
} else {
    log("Record not saved - " + record)
}
close(session)

Save an array of Records to the Active Directory server.

Property

Value

Description

adConnection*

expression, variable

the AD connection

records*

expression, variable

the array of Records to save - must contain the dn in the @dn field

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

session = openADConnection(...)
records = createArray()
record = createRecord()
setRecordFieldValue(record, "telephoneNumber", "555-555-1234")
addRecordFieldValue(record, "telephoneNumber", "555-555-9876")
setRecordFieldValue(record, "@dn", 
    "CN=Test User 1,OU=People,DC=test,DC=local")
appendArrayItem(records, record)
record = createRecord()
setRecordFieldValue(record, "telephoneNumber", "555-555-4321")
addRecordFieldValue(record, "telephoneNumber", "555-555-6789")
setRecordFieldValue(record, "@dn", 
    "CN=Test User 2,OU=People,DC=test,DC=local")
appendArrayItem(records, record)
record = createRecord()
setRecordFieldValue(record, "telephoneNumber", "555-555-2468")
addRecordFieldValue(record, "telephoneNumber", "555-555-1357")
setRecordFieldValue(record, "@dn", 
    "CN=Test User 3,OU=People,DC=test,DC=local")
appendArrayItem(records, record)
results = saveADRecords(session, records)
i = 0
forEach(dn, dns) {
    result = results && result[i]
    if(result) {
        log("Record saved - " + record)
    } else {
        log("Record not saved - " + record)
    }
    i = i + 1
}
close(session)

Set/clear AD 'Account is Disabled' flag.

Property

Value

Description

connection*

expression, variable

the AD connection

accountDn*

text, expression, variable

the DN of the account

state*

boolean, expression, variable

true to disable the account, false otherwise

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

session = openADConnection(...)
setRecordFieldValue(record, "@dn", 
    "CN=test user,OU=People,DC=test,DC=local")
result  =  setADAccountDisabled (Session, record['@dn'], false)
if(result)   {
    log("setADAccountDisabled worked", "green")
} else {
    log("setADAccountDisabled failed", "red")
}
close(session)

Set/clear AD 'Account is Disabled' flag on multiple accounts.

Property

Value

Description

adConnection*

expression, variable

the AD connection

accountDns*

expression, variable

array of DNs of the accounts

state*

boolean, expression, variable

true to disable the account, false otherwise

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

session = openADConnection(...)
dns = createArray()
appendArrayItem(dns, "CN=Test User 1,OU=People,DC=test,DC=local")
appendArrayItem(dns, "CN=Test User 2,OU=People,DC=test,DC=local")
results = setADAccountsDisabled(session, dns, true)
i = 0
forEach(dn, dns) {
    result = results && results[i] 
    if(result) {
        log("Account set to disabled - " + dn)
    } else {
        log("Account not set to disabled " + dn)
    }
    i = i + 1
}
close(session)

Set/clear AD 'Password does not expire' flag.

Property

Value

Description

adConnection*

expression, variable

the AD connection

accountDn*

text, expression, variable

the DN of the account

state*

boolean, expression, variable

true to disable the account, false otherwise

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

session = openADConnection(...)
dn = "CN=Test User,OU=People,DC=test,DC=local"
result = setADDontExpirePassword(session, dn, true)
if(result) {
    log("Password does not expire")
} else {
    log("Unable to set DontExpirePassword")
}
close(session)

Set/clear AD 'Password does not expire' flag on multiple accounts.

Property

Value

Description

adConnection*

expression, variable

the AD connection

accountDns*

expression, variable

array of DNs of the accounts

state*

boolean, expression, variable

true to disable the account, false otherwise

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

session = openADConnection(...)
dns = createArray()
appendArrayItem(dns, "CN=Test User 1,OU=People,DC=test,DC=local")
appendArrayItem(dns, "CN=Test User 2,OU=People,DC=test,DC=local")
results = setADDontExpirePasswords(session, dns, true)
i = 0
forEach(dn, dns) {
    result = results && results[i] 
    if(result) {
        log("Account set to not expire passwords - " + dn)
    } else {
        log("Account not set to not expire passwords " + dn)
    }
    i = i + 1
}
close(session)

Sets password on a Record on the Active Directory server.

Property

Value

Description

adConnection*

expression, variable

the AD connection

dn*

text, expression, variable

the DN of the Record

password*

password, string, expression, variable

the password

oldPassword

password, string, expression, variable

the old password (default: none)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

session = openADConnection(...)
password = "password1" 
dn = "CN=Test User,OU=People,DC=test,DC=local"
result = setADPassword(session, dn, password)
if(result) {
    log("Password has been set")
} else {
    log("Password was not set")
}
close(session)

Sets passwords on Records on the Active Directory server.

Property

Value

Description

adConnection*

expression, variable

the AD connection

dns*

text, expression, variable

array of DNs of Records

passwords*

expression, variable

array of passwords

oldPasswords

expression, variable

array of old passwords (default: none)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

session = openADConnection(...)
dns = createArray()
passwords = createArray()
appendArrayItem(dns, "CN=Test User 1,OU=People,DC=test,DC=local")
appendArrayItem(passwords, "password1")
appendArrayItem(dns, "CN=Test User 2,OU=People,DC=test,DC=local")
appendArrayItem(passwords, "password2")
results = setADPasswords(session, dns, passwords)
i = 0
forEach(dn, dns) {
    result = results && results[i] 
    if(result) {
        log("Password has been set for " + dn)
    } else {
        log("Password was not set for " + dn)
    }
    i = i + 1
}
close(session)

Set/clear AD 'User Cannot Change Password' flag.

Property

Value

Description

adConnection*

expression, variable

the AD connection

userDn*

text, expression, variable

the DN of the User

state*

boolean, expression, variable

true to disallow user from changing password, false otherwise

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

session = openADConnection(...)
dn = "CN=Test User,OU=People,DC=test,DC=local"
result = setADUserCannotChangePassword(session, dn, true)
if(result) {
    log("User cannot change password")
} else {
    log("Unable to set UserCannotChangePassword")
}
close(session)

Set/clear AD 'User Cannot Change Password' flag on multiple Users.

Property

Value

Description

adConnection*

expression, variable

the AD connection

userDns*

expression, variable

array of DNs of the Users

state*

boolean, expression, variable

true to disallow user from changing password, false otherwise

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

session = openADConnection(...)
dns = createArray()
appendArrayItem(dns, "CN=Test User 1,OU=People,DC=test,DC=local")
appendArrayItem(dns, "CN=Test User 2,OU=People,DC=test,DC=local")
results = setADUsersCannotChangePassword(session, dns, true)
i = 0
forEach(dn, dns) {
    result = results && results[i] 
    if(result) {
        log("Account set to not allow password change - " + dn)
    } else {
        log("Account not set to not allow password change - " + dn)
    }
    i = i + 1
}
close(session)
AWS IAM Actions

Add an AWS IAM User to an AWS IAM Group.

Property

Value

Description

iamConnection*

expression, variable

the AWS IAM connection

groupName*

text, expression, variable

the groupname

userName*

text, expression, variable

the username

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

# add John Doe to the PowerUsers group
memberAdded = addAWSIAMGroupMember(conn, "PowerUsers, "JDoe")

Create an Access Key for an AWS IAM User.

Property

Value

Description

iamConnection*

expression, variable

the AWS IAM connection

userName*

expression, variable

the username

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

# create a new access key for John Doe
accessKey = createAWSIAMAccessKey(conn, , "JDoe")
# and EMail it to him because this is the only time we have 
    access to the secret key
sendEmail(Global.emailHost, Global.emailUser,, Global.emailUser, 
    "JDoe@example.com, "AWS Access", "John Doe,
    Here are your new AWS API access keys:
    aws_access_key_id = " + accessKey.accessKeyId + "
    aws_secret_access_key = " +accessKey.secretAccessKey)

Delete Access Key from AWS IAM User.

Property

Value

Description

iamConnection*

expression, variable

the AWS IAM connection

userName*

text, expression, variable

the username

accessKeyId*

text, expression, variable

the access key id

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

# find and delete all of John Doe's access keys
accessKeys = getAWSIAMAccessKeys(conn, "JDoe")
forEach(accesskey, accessKeys) {
 deleteAWSIAMAccessKey(conn, "JDoe", accessKey.accessKeyId)
}

Delete an AWS IAM Group.

Property

Value

Description

iamConnection*

expression, variable

the AWS IAM connection

groupName*

text, expression, variable

the groupname

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

# delete power users group
deleteAWSIAMGroup(conn, "PowerUsers")

Delete an AWS IAM User.

Property

Value

Description

iamConnection*

expression, variable

the AWS IAM connection

userName*

text, expression, variable

the username

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

# delete John Doe
deleteAWSIAMUser(conn, "JDoe")

Delete an AWS IAM User password.

Property

Value

Description

iamConnection*

expression, variable

the AWS IAM connection

userName*

text, expression, variable

the username

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

# delete John Doe's password
deleteAWSIAMUserPassword(conn, "JDoe")

Get the Access Key metadata for an AWS IAM User.

Property

Value

Description

iamConnection*

expression, variable

the AWS IAM connection

userName*

expression, variable

the username

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

# find and delete all of John Doe's access keys
accessKeys = getAWSIAMAccessKeys(conn, "JDoe")
forEach(accesskey, accessKeys) {
    deleteAWSIAMAccessKey(conn, "JDoe", accessKey.accessKeyId)
}

Get an AWS IAM Group.

Property

Value

Description

iamConnection*

expression, variable

the AWS IAM connection

groupName

text, expression, variable

the groupname

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

# get the power users group
powerUsersGroup = getAWSIAMGroup(conn, "PowerUsers")

Get usernames that are members of an AWS IAM Group.

Property

Value

Description

iamConnection*

expression, variable

the AWS IAM connection

groupName*

text, expression, variable

the groupname

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

# get the power users group members and log them
powerUsers = getAWSIAMGroup(conn, "PowerUsers")
forEach(powerUser, powerUsers) {
    log(powerUser)
}

Get AWS IAM Groups.

Property

Value

Description

iamConnection*

expression, variable

the AWS IAM connection

pathPrefix

text, expression, variable

the path prefix for filter results (default: all paths)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

# get the existing groups and log the names
groups = getAWSIAMGroups(conn)
forEach(group, groups) {
    log(group["groupName"])
}

Get an AWS IAM User.

Property

Value

Description

iamConnection*

expression, variable

the AWS IAM connection

userName

text, expression, variable

the username

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

# get the John Doe user
jdoe = getAWSIAMUser(conn, "JDoe")

Get names of the groups to which an AWS IAM User belongs.

Property

Value

Description

iamConnection*

expression, variable

the AWS IAM connection

userName*

text, expression, variable

the username

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

# get and log the groups that John Doe belongs to
groups = getAWSIAMUserGroups(conn, "JDoe")
forEach(group, groups) {
    log(group)
}

Get AWS IAM Users.

Property

Value

Description

iamConnection*

expression, variable

the AWS IAM connection

pathPrefix

text, expression, variable

the path prefix for filter results (default: all paths)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

# get and log all the user names
users = getAWSIAMUsers(conn)
forEach(user, users) {
    log(user["userName"])
}

Checks if an AWS IAM User has a password.

Property

Value

Description

iamConnection*

expression, variable

the AWS IAM connection

userName*

text, expression, variable

the username

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

# check if John Doe has a password and set the default one if not
hasPassword = hasAWSIAMUserPassword(conn, "JDoe")
if(!hasPassword) {
    setAWSIAMUserPassword(conn, "JDoe",<Password>)
} else {
}

Open a connection to AWS Identity Access Management.

Property

Value

Description

accessKey

text, expression, variable

the AWS access key (default: use appliance credentials)

secretKey

password, string, expression, variable

the AWS secret key (default: use appliance credentials)

stsRoleArn

text, expression, password, variable

The AWS ARN. Depending upon the environment, it may be necessary to create Temporary Security Credentials or use IAM Roles.

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

# open the connection
conn = openAWSIAMConnection(Global.awsAccessKey,)
# do some stuff
# close the connection
close(conn)

Open an AWS IAM Group iterator.

Property

Value

Description

iamConnection*

expression, variable

the AWS IAM connection

pathPrefix

text, expression, variable

the path prefix for filter results (default: all paths)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

# iterate the existing groups and log the names
groupIterator = openAWSIAMGroupIterator(conn)
forEach(group, groupIterator) {
    log(group["groupName"])
}

Open an AWS IAM User iterator.

Property

Value

Description

iamConnection*

expression, variable

the AWS IAM connection

pathPrefix

text, expression, variable

the path prefix for filter results (default: all paths)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

# iterate the existing groups and log the names
userIterator = openAWSIAMUserIterator(conn)
forEach(user, userIterator) {
    log(user["userName"])
}

Remove an AWS IAM User from an AWS IAM Group.

Property

Value

Description

iamConnection*

expression, variable

the AWS IAM connection

groupName*

text, expression, variable

the groupname

userName*

text, expression, variable

the username

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

# remove John Doe from the PowerUsers group
memberRemoved = removeAWSIAMGroupMember(conn, "PowerUsers, "JDoe")

Create or update an AWS IAM Group.

Property

Value

Description

iamConnection*

expression, variable

the AWS IAM connection

record*

expression, variable

the AWS IAM Group Record to save

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

# create power users group
groupTemplate = createRecord(false)
setRecordFieldValue(groupTemplate, "groupName", "PowerUsers")
setRecordFieldValue(groupTemplate, "path", "/")
group = saveAWSIAMGroup(conn, groupTemplate)
# rename group and change path
renameGroupRecord = createRecord(false)
setRecordFieldValue(renameGroupRecord, "groupName", "PowerUsers")
setRecordFieldValue(renameGroupRecord, "newGroupName", "MyPowerUsers")
setRecordFieldValue(renameGroupRecord, "Path", "/mygroups/")
renamedGroupRecord = saveAWSIAMGroup(conn, renameGroupRecord)

Create or update an AWS IAM User.

Property

Value

Description

iamConnection*

expression, variable

the AWS IAM connection

record*

expression, variable

the AWS IAM User Record to save

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

# create John Doe user
userTemplate = createRecord(false)
setRecordFieldValue(userTemplate, "userName", "JDoe")
setRecordFieldValue(userTemplate, "path", "/")
jdoe = saveAWSIAMUser(conn, userTemplate)
# rename user and change path
renameUserRecord = createRecord(false)
setRecordFieldValue(renameUserRecord, "userName", "JDoe")
setRecordFieldValue(renameUserRecord, "newUserName", "JohnDoe")
setRecordFieldValue(renameUserRecord, "Path", "/myusers/")
renamedUserRecord = saveAWSIAMUser(conn, renameUserRecord)

Set the activation status of an Access Key for AWS IAM User.

Property

Value

Description

iamConnection*

expression, variable

the AWS IAM connection

userName*

text, expression, variable

the username

accessKeyId*

text, expression, variable

the access key id

status*

choice (Active, Inactive), text, expression, variable

the desired status

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

# find and deactivate all of John Doe's access keys
accessKeys = getAWSIAMAccessKeys(conn, "JDoe")
forEach(accesskey, accessKeys) {
    setAWSIAMAccessKeyStatus(conn, "JDoe", accessKey.accessKeyId, 
        "Inactive")
}

Set an AWS IAM User password.

Property

Value

Description

iamConnection*

expression, variable

the AWS IAM connection

userName*

text, expression, variable

the username

password*

password, string, expression, variable

the new password

resetRequired

boolean, expression, variable

whether or not the user is required to reset password on next login (default: false)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

# check if John Doe has a password and set the default one if not
hasPassword = hasAWSIAMUserPassword(conn, "JDoe")
if(!hasPassword) {
    setAWSIAMUserPassword(conn, "JDoe",<Password>)
} else {
}
AWS IAM Record Fields Reference

Field

Description

userName

Required for create or update as the primary key. Update using newUserNameField

path

The path for the user. For more information about paths, see IAM Identifiers in the Using IAM guide. Must begin and end with "/"  Defaults to: "/"

userID

The user's unique ID (read-only)

ARN

The user's Amazon Resource Name (read-only)

createDate

The user's creation timestamp (read-only)

passwordLastUsed

Timestamp of the last time password was used to log in to console (read-only)

newUserName

Used to rename the user. See Renaming a User for implications.

Field

Description

groupName

Required for create or update as the primary key. Update using newGroupNameField

path

The path for the group. For more information about paths, see IAM Identifiers in the Using IAM guide. Must begin and end with "/" Defaults to: "/"

userID

The group's unique ID (read-only)

ARN

The group's Amazon Resource Name (read-only)

createDate

The group's creation timestamp (read-only)

newGroupName

Used to rename the group. See Renaming a Group for implications.

Field

Description

accessKeyId

The ID of the access key (read-only)

userName

The userName of the user the access key belongs to (read-only)

status

The access key's status: "Active" or "Inactive"

ARN

The group's Amazon Resource Name (read-only)

createDate

The access key's creation timestamp (read-only)

secretAccessKey

The access key's secret key (read-only and only returned from a successful create)

Command Line Interface (CLI) Actions

Open an SSH connection to a remote system.

Property

Value

Description

host*

text, expression, variable

the remote host name or address

port

expression, variable

the remote port (default: 22)

user*

text, expression, variable

the username for remote host

password*

password, string, expression, variable

the password for remote host

options

expression, variable

the value of the ciphers (allowed encryption algorithms), macs (allowed hashing algorithms), or whether to allow debugging to facilitate troubleshooting (debug: true)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

session = openRemoteCLI("host1.acme.org", 22, "root","password")
close(session)

Open an SSH connection to a remote system using public/private key authentication.

Property

Value

Description

host*

text, expression, variable

the remote host name or address

port

expression, variable

the remote port (default: 22)

user*

text, expression, variable

the username for remote host

privateKey*

text, expression, variable

the path of the private key file within the project file store or the private key loaded as a byte array

publicKey

text, expression, variable

the path of the public key file within the project file store or the public key loaded as a byte array (default: none)

passPhrase

password, string, expression, variable

the passPhrase for private key (default: none)

options

expression, variable

the value of the ciphers (allowed encryption algorithms), macs (allowed hashing algorithms), or whether to allow debugging to provide more information to facilitate troubleshooting (debug: true)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

# assumes public and private key have been uploaded to project 
    files store,
# and public key has been added as a trusted identity on SSH 
    remote server
session = openRemoteCLIWithCert("host1.acme.org", 22, "root", 
    "/.ssh/id_rsa", "/.ssh/id_rsa.pub", <Password>)
close(session)

Open a CLI connection to a remote Windows system.

Property

Value

Description

host*

text, expression, variable

the remote host name or address

user*

text, expression, variable

the username for remote host (must be an administrator)

domain*

text, expression, variable

the domain for the user

password*

password, string, expression, variable

the password for remote host

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

session = openRemoteWindowsCLI("windows.acme.org", "Administrator", 
    "ACME", <Password>)
close(session)

Quote a CLI command parameter so that no characters have special meaning to the CLI interpreter.

Property

Value

Description

param*

text, expression, variable

the command parameter to quote

method*

choice (cmd, powershell, sh), text, expression, variable

the cli quoting method

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

# open file with windows local users to create
varNewUsersInput = openDelimitedTextInput(newwindowslocalusers.csv, 
    "username, givenName, surname, password")
varSession = openRemoteWindowsCLI("windows.acme.org", "Administrator", 
    "ACME", <Password>)
close(session)
forEach(varNewUserRecord, newUsersInput) {
    # quote the dynamic data for use with powershell
    varQuotedUsername = quoteCLIParam(varNewUserRecord[\'username\'], 
        "powershell")
    varQuotedFullName = quoteCLIParam(varNewUserRecord[\'givenName\'] 
        + " " + varNewUserRecord[\'surname\'], "powershell")
    varQuotedPassword = quoteCLIParam(varNewUserRecord[\'username\'], 
        "powershell")
    # build the powershell command using the quoted data
    varPSCommand = "$Computer = [ADSI]\\"WinNT://$Env:COMPUTERNAME,
        Computer\\""
    varPSCommand = $varPSCommand + ";$LocalAdmin = $Computer.Create
        (\'User\" + varQuotedUsername + ")"
    varPSCommand = $varPSCommand + ";$LocalAdmin.SetPassword
        (" + varQuotedPassword + ")"\n varPSCommand = $varPSCommand +  
         ";$LocalAdmin.SetFullName(" + varQuotedQuotedFullname + ")"
        varPSCommand = varPSCommand + ";$LocalAdmin.UserFlags = 64 + 65536"
        varPSCommand = varPSCommand + ";$LocalAdmin.SetInfo()"
        # quote the entire powershell command for cmd
        varQuotedPSCommand = quoteCLIParam(varPSCommand, "cmd")
        runRemoteCLICommand(varSession, "powershell -command " +        
            varQuotedPSCommand)
}
close(varSession)
close(varNewUsersInput)

Run a CLI command. Returns a record with 3 fields: exitStatus, output, and error.

Property

Value

Description

command*

text, expression, variable

the command to run

input

text, expression, variable

a string to feed to the command as standard input (default: none)

env

expression, variable

a Record containing environment variables to set (default: none)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

result = runCLICommand("date")
# Should return current date/time
log(, u"result['output']", )

Run a CLI command on a remote system. Returns a record with 3 fields: exitStatus, output, and error.

Property

Value

Description

remoteCLI*

expression, variable

the remote CLI connection

command*

text, expression, variable

the command to run.

input

text, expression, variable

a string to feed to the command as standard input (default: none)

env

expression, variable

a Record containing environment variables to set (default: none)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

session = openRemoteCLI("host1.acme.org","root","password")
result = runRemoteCLICommand(session,"date")
close(session)
# Should return current date/time
log(, u"result['output']", )
Database Adapter Actions

Create a database table definition.

Property

Value

Description

table*

text, expression, variable

the name of the table

schema

text, expression, variable

the name of the schema that table is in

catalog

text, expression, variable

the name of the catalog the table is in

key*

text, expression, variable

comma separated list of primary key columns format for each column: [alias=]name

keygen

choice (assigned, native), text, expression, variable

the primary key generation algorithm - one of 'assigned','native' (default: 'assigned')(ignored if multiple key columns specified)

columns*

text, expression, variable

comma separated list of other columns format for each column: [alias=]name[;child-table;join-col[;parent-join-col]]

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

# With auto-increment
tableDef = createTableDefinition("senators", "id", "native", 
    "lastname,firstname,title,email")
# Without auto-increment
tableDef = createTableDefinition("senators", "email", "assigned",     
    "lastname,firstname,title,email") 

Delete Record from the database.

Property

Value

Description

dbConnection*

expression, variable

the database connection

table*

text, expression, variable

the database table

key*

text, expression, variable

the primary key of the Record to delete - also accepts a Record that contains the primary key

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

tableDef = createTableDefinition("usr", "id"," native", 
    "fname,lname,status")
outputDB = openDatabaseConnection(...)
queryExample = createRecord()
setRecordValue(queryExample, "status", "I")
inactiveRecords = getDatabaseRecords(outputDB, "usr", queryExample)
forEach(inactive, inactiveRecords) {
delStatus = deleteDatabaseRecord(outputDB, "usr", inactive)
if(Boolean(delStatus)) {
    log("Deletion Successful!")
} else {
    log("Deletion Failed!")
}
close(outputDB) 

Get a Record from the database.

Property

Value

Description

dbConnection*

expression, variable

the database connection

table*

text, expression, variable

the database table

key*

text, expression, variable

the primary key of the Record - also accepts a Record that contains the primary key

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

tableDef = createTableDefinition("usr", "email", "assigned", 
    "fname,lname,status,email")
outputDB = openDatabaseConnection(...)
resultRecord = getDatabaseRecord(outputDB, "user", 
    "john.doe@example.com")
resultFName = getRecordFieldValue(resultRecord, "fname")

Get Records from the database.

Property

Value

Description

dbConnection*

expression, variable

the database connection

table*

text, expression, variable

the database table

example

expression, variable

example Record

ignoreCase

boolean, expression, variable

Ignore case when matching example fields (default: false)

maxResults

expression, variable

maximum number of Records to return (default: unlimited)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

tableDef = createTableDefinition("usr", "id","native",
    "fname,lname,status")
outputDB = openDatabaseConnection(...)
queryExample = createRecord()
setRecordValue(queryExample, "status", "I")
inactiveRecords = getDatabaseRecords(outputDB, "usr", 
    queryExample)
log("There are " + inactiveRecords.length + " inactive records.")
forEach(inactive,inactiveRecords) {
    delStatus = deleteDatabaseRecord(outputDB,"usr",inactive)
}
close(outputDB)

Open a connection to a database.

Property

Value

Description

jdbcDriverClass*

text, expression, variable

the name of JDBC driver class to use to connect to the database

jdbcURL*

text, expression, variable

the JDBC connection URL

tableDefinitions

text, expression, variable

the definitions of the tables that connection will use

user

text, expression, variable

the user name for authenticating to the database

password

password, string, expression, variable

the user password for authenticating to the database

extraProperties

expression, variable

object or Record containing extra Hibernate properties to customize the connection

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

tableDef = createTableDefinition("usr", "id", "native", 
    "fname,lname,status")
# MySQL Database example
outputDB = openDatabaseConnection("com.mysql.jdbc.Driver",
    "jdbc:mysql://127.0.0.1/indirect", tableDef, "root", "password")
if(Boolean(outputDB)) {
    log(Database connection successful!)
} else {
    log(Database connection failed!)
}

Get Records from the database using SQL.

Property

Value

Description

dbConnection*

expression, variable

the database connection

sql*

text, expression, variable

the SQL query

params

expression, variable

array of positional parameters to bind to the SQL query

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

tableDef = createTableDefinition("usr", "id", "native", 
    "fname,lname,status")# MySQL Database example
outputDB = openDatabaseConnection("com.mysql.jdbc.Driver", 
    "jdbc:mysql://127.0.0.1/indirect", tableDef, "root", "password")
if (Boolean(outputDB)) {
    id = "12345"
    sql = "SELECT fname,lname,status FROM usr WHERE id='" + id + "'"
    users = queryDatabaseSQL(outputDB, sql)
    forEach(user, users) {
        log("User: " + user)
    }
} else {
}
close(outputDB)

### RapidIdentity Connect supports parameterized queries. 
    For example, in each iteration of the forEach loop, log 
    the user 's name to be their first and last name 
    separated by a single space. Parameters (params) could 
    be used in the example above as follows.
sql = "SELECT fname,lname,status FROM usr WHERE ID = ?"
users = queryDatabaseSQL(outputDB, sql, [user.fname + " "
    user.lname, user.id
]) 
tableDef = createTableDefinition("usr", "id", "native", 
    "fname,lname,status")
# MySQL Database example
outputDB = openDatabaseConnection("com.mysql.jdbc.Driver", 
    "jdbc:mysql://127.0.0.1/indirect", tableDef, "root", "password")
if (Boolean(outputDB)) {
    id = "12345"
    sql = "SELECT fname,lname,status FROM usr WHERE id='" + id + "'"
    users = queryDatabaseSQL(outputDB, sql)
    forEach(user, users) {
        log("User: " + user)
    }
} else {
}
close(outputDB)

Save a Record to the database.

Property

Value

Description

dbConnection*

expression, variable

the database connection

table*

text, expression, variable

the database table

record*

expression, variable

the Record to save

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

textInput = openDelimitedTextInput("/root/senators.csv", 
    "fname,lname,status,email")
tableDef = ("usr", "email", "assigned", "fname,lname,status,email")
outputDB = openDatabaseConnection(...)
forEach(senator, textInput) {
    saveResult = saveDatabaseRecord(outputDB, "user", senator)
    if (Boolean(saveResult)) {
        log("Save Successful!")
    } else {
        Log("Save Failed!")
    }
}
close(outputDB)
close(textInput)

Update database using SQL.

Property

Value

Description

dbConnection*

expression, variable

the database connection

sql*

text, expression, variable

the SQL statement

params

expression, variable

array of positional parameters to bind to SQL statement

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

tableDef = createTableDefinition("usr", "id", "native", 
    "fname,lname,status")# MySQL Database example
outputDB = openDatabaseConnection("com.mysql.jdbc.Driver", 
    "jdbc:mysql://127.0.0.1/indirect", tableDef, "root", "password")
if (Boolean(outputDB)) {
    id = "12345"
    sql = "SELECT fname,lname,status FROM usr WHERE id='" + id + "'"
    users = queryDatabaseSQL(outputDB, sql)
    forEach(user, users) {
        log("User: " + user)
        updateSQL = "UPDATE usr SET name='" + user.fname + " "
        user.lname + "' WHERE ID='" + user.id + "'"
        result = updateDatabaseSQL(outputDB, updateSQL)
        if (result) {
            log("User updated successfully")
        } else {
            log("User not updated")
        }
    }
} else {
}
close(outputDB)

### RapidIdentity Connect supports parameterized queries. 
    For example, in each iteration of the forEach loop, set the 
    user 's id field value to be their first and last name 
    separated by a single space. Parameters (params) could 
    be used in the example above as follows.
updateSQL = "UPDATE usr SET name = ? WHERE ID = ?"
result = updateDatabaseSQL(outputDB, updateSQL, [user.fname + " "
    user.lname, user.id
])

Example

# Input from text file
textInput = openDelimitedTextInput("/root/senators.csv", 
    "LastName,FirstName,Title,Email,Phone,Description")
# Define table and open DB connection(MySQL w / auto - increment)
tableDef = createTableDefinition("senators", "id", "native", 
    "lastname,firstname,title,email,phone")
outputDB = openDatabaseConnection("com.mysql.jdbc.Driver", 
    "jdbc:mysql://server/dbSchema", tableDef, "root", "password")
# Loop through input records
forEach(inputRecord, textInput) {
    # Schema mapping
    renameRecordFields(inputRecord, "LastName,FirstName,Title,Email,Phone", 
        "lastname,firstname,title,email,phone")
    # Check for existance in target
    queryRecord = createRecord()
    queryValue = getRecordFieldValue(inputRecord, "email")
    setRecordValue(queryRecord, "email", queryValue)
    matchingRecords = getDatabaseRecords(outputDB, "senators", 
        queryRecord)
    if (matchingRecords.length == 1) {
        # Match found.Add primary key to current record from source.
        matchingKeyValue = getRecordFieldValue(matchingRecords[0], "id")
        setRecordFieldValue(inputRecord, "id", matchingKeyValue)
    } else {
        # No match found.Nothing more to do.
    }
    # Write(insert / update) record to database
    saveDatabaseRecord(outputDB, "senators", inputRecord)
}
# Close database and file connections
close(outputDB)
close(textInput)# Input from text file
JDBC Drivers
Driver: jt400.jar 
Supports: DB2/400 (tested on v6r1)
jdbcDriverClass: com.ibm.as400.access.AS400JDBCDriver
jdbcURL: jdbc:as400://[server]/[library]

Hibernate does support DB2/400, but the dialect is not automatically detected; so a hibernate dialect must be specified and must be passed into the openDatabaseConnection action as an extra parameter. org.hibernate.dialect.DB2400Dialect will work perfectly.

Driver: db2jcc4.jar 
Supports: DB2 (tested on DB2/LINUXX8664 - SQL09077)
jdbcDriverClass: com.ibm.db2.jcc.DB2Driver
jdbcURL: jdbc:db2://[server]:
    [port]/NCANCV:retrieveMessagesFromServerOnGetMessage=true;
    currentSchema=[database];currentFunctionPath="[database]";
Driver: fmjdbc.jar 
Supports: Filemaker 11
jdbcDriverClass: com.filemaker.jdbc.Driver
jdbcURL: jdbc:filemaker://[server]/[database]

Hibernate does NOT support Filemaker, so a hibernate dialect must be selected that is similar, and must be passed into the openDatabaseConnection action as an extra parameter. org.hibernate.dialect.ProgressDialect has successfully worked to READ from a Filemaker Pro 11 database.

Driver: multiple .jar files in lib.zip 
jdbcDriverClass: com.informix.jdbc.IfxDriver
jdbcURL: jdbc:informix-sqli://[host]:[port]/DB_name:informixserver=server_name
Driver: sqljdbc4.jar 
Supports: MS SQL Server 2000, 2005 & 2008
jdbcDriverClass: com.microsoft.sqlserver.jdbc.SQLServerDriver
jdbcURL: jdbc:sqlserver://[host]:[port];databaseName=[db]

Additional MS SQL Help.

When Connecting to a MS SQL 2012 Server, use Sun JTDS.

For a Normal Session: 
jdbc:jtds:sqlserver://"+Global.dbHostStudent+":"+Global.dbPort+"/
    ;domain="+Global.dbHostDomain.
For a Session with an instance, use: 
jdbc:jtds:<server_type>://<server>[:<port>][/<database>];
    instance=<instance_name>.
driver: Included in RapidIdentity Connect
jdbcDriverClass: org.mariadb.jdbc.Driver
jdbcURL: jdbc:mysql://[host]:[port]/[database] Advanced Options
Amazon Aurora DB Cluster and RapidIdentity 2018.6.19

Beginning with RapidIdentity 2018.6.19, when using the Amazon Aurora DB Cluster with either MySQL or PostgreSQL, use the Cluster endpoint directly instead of indirectly with a DNS CNAME record.

Driver: ojdbc6.jar 
Supports: Oracle 10g and 11g up to 11.2.0.2.0
jdbcDriverClass: oracle.jdbc.OracleDriver
jdbcURL: jdbc:oracle:thin:@[host]:[port]:[sid]
Driver: Included in RapidIdentity Connect
Supports: postgreSQL
jdbcDriverClass: org.postgresql.Driver
jdbcURL: jdbc:postgresql://[host]:[port]/[db]?stringtype=unspecified

postgreSQL connections can occasionally take a long time to process. To speed up the connection, metadata can be added in the corresponding Action Set as follows.

hibernate = createRecord()
setRecordFieldValue(hibernate, "hibernate.dialect", 
    "org.hibernate.dialect.PostgreSQLDialect")
setRecordFieldValue(hibernate, "hibernate.temp.use_jdbc_metadata_defaults", 
    "false")
Driver: openedge.jar, util.jar, base.jar (ALL REQUIRED)
Supports: Progress/OpenEdge
jdbcDriverClass: com.ddtek.jdbc.openedge.OpenEdgeDriver
jdbcURL: jdbc:datadirect:openedge://[host]:[port];databaseName=[db]

The current driver supports JDBC logging. An acceptable Action Set is shown:

hibernate = createRecord()
setRecordFieldValue(hibernate, "hibernate.dialect", 
    "org.hibernate.dialect.ProgressDialect")
SkywardSession = openDatabaseConnection(
    "com.ddtek.jdbc.openedge.OpenEdgeDriver", 
    "jdbc:datadirect:openedge://IP:PORT;databaseName=SKYWARD;
    SpyAttributes=(log=(file)/var/opt/idauto/dss/files/SkywardLogs/jdbc.log;
    logTName=yes;timestamp=yes;)", "USERNAME",<Password>, hibernate)

Connecting to a Progress DB (example SKYWARD) via SSL, requires a modification to the connection string (encryptionMethod=SSL):

jdbc:datadirect:openedge://<ip> :<port>;databaseName= SKYWARD;encryptionMethod=SSL
Driver: Included in RapidIdentity Connect
Supports: SQLite3 formatted database files
jdbcDriverClass: org.sqlite.JDBC
jdbcURL: jdbc:sqlite:<path to db file>
Hibernate Dialect: com.enigmabridge.hibernate.dialect.SQLiteDialect

SQLite is an embedded database that can be used only for a database file accessible via the RapidIdentity appliance native filesystem and writeable by the tomcat user. In the context of RapidIdentity Connect, it is primarily useful only for storing locally managed state, as opposed to being used for integration with an external system. It is not recommended for a cluster with multiple RapidIdentity Connect instances.

sqliteSession = openDatabaseConnection("org.sqlite.JDBC",
    "jdbc:sqlite:/var/opt/idauto/dss/files/my.db",null,null,
    {"hibernate.dialect": "com.enigmabridge.hibernate.dialect.SQLiteDialect"})
results = updateDatabaseSQL(sqliteSession, "DROP TABLE IF EXISTS contacts;")
results = updateDatabaseSQL(sqliteSession, "CREATE TABLE contacts 
    (\n contact_id integer PRIMARY KEY,\n first_name text NOT NULL,
    \n last_name text NOT NULL,\n email text NOT NULL UNIQUE,\n phone text 
    NOT NULL UNIQUE\n);")
close(sqliteSession)
Driver: jconn4.jar
Supports: Sybase SQL Anywhere
jdbcDriverClass: com.sybase.jbdc4.jdbc.sybDriver
jdbcURL:jdbc:sybase:Tds:[host]:[port]?ServiceName=[databasename]
Hibernate Dialect: org.hibernate.dialect.SybaseAnywhereDialect
Driver: Included in RapidIdentity Connect
Supports: Microsoft SQL Server (6.5, 7, 2000, 2005 and 2008) and 
    Sybase (10, 11, 12, 15)
jdbcDriverClass: net.sourceforge.jtds.jdbc.Driver
jdbcURL: jdbc:jtds:sqlserver://[host]:[port]/[databasename]

Additionally, to connect to Microsoft SQLServer, using Windows / NTLM authentication, rather than native SQL authentication, you must append the following to the end of the JDBC URL:

;useNTLMv2=true;domain=<domainname>;

If the database you are accessing is a NAMED INSTANCE rather than the default database, the PORT will most likely be dynamic. The SQL Server Browser service on the database server should take care of establishing the conversation, but you will need to discard the default port of 1433.

For example, to connect with a domain account to a named instance, it would look like this:

jdbc:jtds:sqlserver://<servername>/<databasename>;instance=<instancename>;
    domain=<domain>

Driver: unijdbc.jar unijdbc.jar and asjava.jar asjava.jar are both required.

Supports: UniData and UniVerse (tested on UniData 8.1.2)
jdbcDriverClass: com.rs.u2.jdbc.UniJDBCDriver
jdbcURL: jdbc:rs-u2://host[:port-num]/[account];dbmstype=UNIDATA

Hibernate does support UniData, but the dialect is not automatically detected; so a hibernate dialect must be specified and must be passed into the openDatabaseConnection action as an extra parameter.  will work perfectly.

hibernate = createRecord()
setRecordFieldValue(hibernate, "hibernate.dialect", 
    "org.hibernate.dialect.DB2Dialect")
External Documentation

Rocket API and JDBC Developer's Guide

JDBC Driver Downloads

Additional driver reference.

Specifying a Hibernate Dialect

To capitalize on the RapidIdentity Connect database adapter, it may be necessary to specify a dialect to make the connection even if the correct JDBC driver is used.

Dialects can be integrated as a record field value.

sessionDB = openDatabaseConnection("com.filemaker.jdbc.Driver", 
    Global.FilemakerStaffDB, Global.FilemakerDBUser,<Password>, 
    {"hibernate.dialect": "org.hibernate.dialect.ProgressDialect"})
Secure Database Connection with SSL

A secure database connection can be attempted by modifying the connection string by adding ?ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory.

Complete example: jdbc:postgresql://"+Global.dbHostFocus+":"+Global.dbPortFocus+"/"+Global.dbNameFocus+"?ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory

Attachments:

asjava.jar (application/java-archive)

db2jcc4.zip (application/zip)

fmjdbc.zip (application/zip)

jconn4.jar.zip (application/zip)

jt400.zip (application/zip)

jtds-1.2.5-dist.zip (application/zip)

lib.zip (application/zip)

mysql-connector-java-5.1.19-bin.zip (application/zip)

ojdbc6.jar.zip (application/zip)

openedge.zip (application/zip)

SkywardJDBCJarFiles.zip (application/zip)

sqljdbc4.jar.zip (application/zip)

unijdbc.jar (application/java-archive)

Edmodo Adapter Actions

Define an OAuth2 connection to Edmodo.

Property

Value

Description

credentialName*

text, expression, variable

OAuth2 credential for authentication to Edmodo

options

expression, variable

A record or JavaScript object with a field for each additional option. Currently defined fields are connectTimeout and socketTime which require a numeric value from 1 to 2147483647 (0x7FFFFFFF) that represents the number of milliseconds for the timeout, and 0 representing no timeout.

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

conn = defineEdmodoOAuthConnection(Global.edmodoOAuthCredentialName)

Delete an Edmodo Record.

Property

Value

Description

edmodoConnection*

expression, variable

the Edmodo Agent connection

type*

choice (users, groups, group_memberships, districts, schools), text, expression, variable

the type of Edmodo Record

id*

text, expression, variable

id of the Edmodo Record to delete

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

deleted = deleteEdmodoRecord(conn, "users", record.id) 

Delete an array of Edmodo Records.

Property

Value

Description

edmodoConnection*

expression, variable

the Edmodo Agent connection

type*

choice (users, groups, group_memberships, districts, schools), text, expression, variable

the type of Edmodo Record

ids*

text, expression, variable

Array of Edmodo Record ids

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

deleted = deleteEdmodoRecords(conn, "users", 
    [record[0].id, record[1].id])

Get an Edmodo Record.

Property

Value

Description

edmodoConnection*

expression, variable

the Edmodo Agent connection

type*

choice (users, groups, group_memberships, districts, schools), text, expression, variable

the type of Edmodo Record

id*

text, expression, variable

the Edmodo Record id

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

record = getEdmodoRecord(conn, "users", record.id)

Get Edmodo Records.

Property

Value

Description

edmodoConnection*

expression, variable

the Edmodo Agent connection

type*

choice (users, groups, group_memberships, districts, schools), text, expression, variable

the type of Edmodo Record

filter

expression, variable

filter record or object that determines which Edmodo records to get

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

records = getEdmodoRecords(conn, "users")

Get an Edmodo Record.

Property

Value

Description

edmodoConnection*

expression, variable

the Edmodo Agent connection

type*

choice (users, groups, group_memberships, districts, schools), text, expression, variable

the type of Edmodo Record

ids*

text, expression, variable

Array of Edmodo Record ids

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

records = getEdmodoRecords(conn, "users", [record[0].id, 
    record[1].id])

Open Edmodo Record Iterator.

Property

Value

Description

edmodoConnection*

expression, variable

the Edmodo Agent connection

type*

choice (users, groups, group_memberships, districts, schools), text, expression, variable

the type of Edmodo Record

filter

expression, variable

filter record or object that determines which Edmodo records to get

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

it = openEdmodoRecordIterator(conn, "student")
forEach(record, it) {
    # process record
}

Create or update an Edmodo Record.

Property

Value

Description

edmodoConnection*

expression, variable

the Edmodo Agent connection

type*

choice (users, groups, group_memberships, districts, schools), text, expression, variable

the type of Edmodo Record

record*

expression, variable

the Edmodo Record to save

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

record = createRecordFromObject({
    type: "student",
    username: "student27",
    first_name: "student",
    last_name: "Twentyseven",
    email: "student27@example.com",
    password: "password@123",
    school_id: 1234567,
    verified_institution_member: true
})
createdRecord = saveEdmodoRecord(conn, "users", record)

Create or update an array of Edmodo Records.

Property

Value

Description

edmodoConnection*

expression, variable

the Edmodo Agent connection

type*

choice (users, groups, group_memberships, districts, schools), text, expression, variable

the type of Edmodo Record

records*

expression, variable

Array of the Edmodo Records to save

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

savedRecords = saveEdmodoRecords(conn, "users", [record[0].id, 
    record[1].id])

Field

Type

Description

Read

Create

Update

id

integer

unique record identifier

Yes

No

Required

type

string

the User type. Valid options: - student - parent - teacher

Yes

Required

No

password

string

the User's password

No

Required

Optional

username

string

username - must be universally unique within Edmodo

Yes

Required

No

first_name

string

the User's first name

Yes

Required

No

last_name

string

the User's last name

Yes

Required

No

user_title

string

the User's title - Valid options: - Mr - Mrs - Ms - Dr

Yes

Optional

No

locale

string

the User's locale

Yes

Optional

No

timezone

string

the User's timezone

Yes

Optional

No

email

string

the User's email address - required for teachers and parents - must be universally unique within Edmodo

Yes

Optional

No

parent_code

string

if the User is a parent, this must be a valid parent code returned from a student

No

Optional

No

parent_relationship

string

if the User is a parent - Valid options: - Mom - Dad - description of other parent-student relationship

Yes

Optional

No

school_id

integer

id of the associated school - can be set to null to disassociate from the school/district

Yes

Required

Yes

district_id

integer

id of a the district

Yes

No

No

verified_institution_member

boolean

true if verified as belonging to the institution represented by school_id

Yes

Optional

Yes

admin_rights

record

administrative rights - Sub-fields: - institution - either schools/school_id or districts/district_id - can_grant_rights - boolean - can_allocate_funds - boolean

Yes

Optional

Yes

Field

Type

Description

school_id

integer

filter Users by the associated school

district_id

integer

filter Users by the associated district

query

string

filter Users to those where the query matches their name

type

string

filter Users by user type - valid options: - all (default) - student - teacher - school_admin - district_admin

status

string

filter by the status of the User - valid options: - all (default) - verified - unverified

sort

string

sort Users by the given property - valid options: - name

sort_direction

string

if sort is provided, sets the direction of the sort - valid options: - ascending (default) - descending

Field

Type

Description

Read

Create

Update

id

integer

unique record identifier

Yes

No

Required

title

string

title of Group

Yes

Required

Yes

description

string

description of Group

Yes

Optional

Yes

start_level

string

starting grade of the Group - see Supported Levels

Yes

Required

Yes

end_level

string

ending grade of the Group - see Supported Levels defaults to same value as start_level

Yes

Optional

Yes

expected_group_size

string

the expected size of the Group - see Supported Expected Group Sizes

Yes

Optional

Yes

subject

string

the subject of the Group - see Supported Subjects

Yes

Required

Yes

subject_area

string

the subject area of the Group - see Supported Subject Areas (set automatically based on subject)

Yes

No

No

moderate_posts_and_replies

boolean

whether all posts and replies to this Group are moderated (default: false)

Yes

Optional

Yes

default_membership_type

string

the initial membership type for new group memberships - valid options: - read_only_member - read_write_member (default)

Yes

Optional

Yes

parent_group_id

integer

id of the parent group

Yes

Optional

No

creator_id

integer

id of user that created the group may be overridden on creation by school/district admin to the id of a verified teachers in their school/district

Yes

Optional

No

archived

boolean

true if the Group is archived

Yes

No

No

num_members

boolean

the current number of members in the Group

Yes

No

No

owner_id

boolean

the user id(s) of the group owner(s)

Yes

No

No

Field

Type

Description

query

string

filter Groups by query match on title & description (NOT YET AVAILABLE as of 01JUL2014)

status

string

filter Groups by status - valid options: - active (default) - archived

directory

string

filter Groups by directory - valid options: - unlisted (default) - public - schools/school_id - district/district_id

subject_area

string

filter Groups by subject area - see Supported Subject Areas

min_level

string

filter Groups by lower bound (inclusive) for a Group's end level - see Supported Levels

max_level

string

filter Groups by upper bound (inclusive) for a Group's start level - see Supported Levels

parent_group_id

integer

filter Groups by parent Group

user_id

integer

filter Groups by those the given User belongs to

Field

Type

Description

Read

Create

Update

id

integer

unique record identifier

Yes

No

Required

group_id

integer

id of the Group

Yes

Required

No

user_id

integer

id of the User

Yes

Required

No

type

string

membership type of the user - valid options: - read_only_member - read_write_member - co_teacher - owner

Yes

Required

Yes

send_notifications

boolean

whether to send notifications about Group activity to User (default: true)

Yes

Optional

Yes

show_posts_in_stream

boolean

whether to send notifications about Group posts in User's messages stream (default: true)

Yes

Optional

Yes

color

string

the color code assigned to this group

Yes

Optional

Yes

Field

Type

Description

group_id

integer

filter memberships by those the for the given Group

user_id

integer

filter Groups by those for the given User

Field

Type

Description

Read

Create

Update

id

integer

unique record identifier

Yes

No

Required

name

string

name of the School

Yes

Required

Yes

abbreviated_name

string

abbreviated name of the School

Yes

Optional

Yes

motto

string

the School motto

Yes

Optional

Yes

lead_id

integer

user id of the school lead

Yes

Optional

Yes

lead_title

string

title of the school lead (e.g. “principal”, “headmaster”)

Yes

Optional

Yes

start_level

string

starting grade of the School - see Supported Levels

Yes

Required

Yes

end_level

string

ending grade of the School - see Supported Levels defaults to same value as start_level

Yes

Optional

Yes

district_id

integer

id of the School's district

Yes

Optional

Yes

address

string

the School street address

Yes

Required

Yes

zip_code

string

the School postal code

Yes

Required

Yes

state

string

the School two-letter state code

Yes

Required

Yes

website

string

URL of the School website

Yes

Optional

Yes

phone_number

string

phone number for the School

Yes

Optional

Yes

code_contact

string

code contact of the School

Yes

Optional

Yes

code_phone

string

code phone number of the School

Yes

Optional

Yes

code_email

string

code email of the School

Yes

Optional

Yes

avatars

record

URL's of the School avatars - Sub-fields: - small - large (set to null to revert to defaults)

Yes

Optional

Yes

Field

Type

Description

query

string

filter Schools by query match on school name

user_id

integer

filter Schools to those the User is a member/admin of

district_id

integer

filter Schools by the associated district

min_level

string

filter Schools by lower bound (inclusive) for a Group's end level - see Supported Levels

max_level

string

filter Schools by upper bound (inclusive) for a Group's start level - see Supported Levels

sort

string

sort schools by the given property - valid options: - name

sort_direction

string

if sort is provided, sets the direction of the sort - valid options: - ascending (default) - descending

Field

Type

Description

Read

Create

Update

id

integer

unique record identifier

Yes

No

Required

name

string

name of the District

Yes

Required

Yes

abbreviated_name

string

abbreviated name of the District

Yes

Optional

Yes

motto

string

the District motto

Yes

Optional

Yes

lead_id

integer

user id of the District lead

Yes

Optional

Yes

lead_title

string

title of the District lead (e.g. “superintendent”, “headmaster”)

Yes

Optional

Yes

address

string

the District street address

Yes

Required

Yes

zip_code

string

the District postal code

Yes

Required

Yes

state

string

the District two-letter state code

Yes

Required

Yes

website

string

URL of the District website

Yes

Optional

Yes

phone_number

string

phone number for the District

Yes

Optional

Yes

avatars

record

URL's of the District avatars - Sub-fields: - small - large (set to null to revert to defaults)

Yes

Optional

Yes

Field

Type

Description

query

string

filter Schools by query match on school name

user_id

integer

filter Schools to those the User is a member/admin of

sort

string

sort schools by the given property - valid options: - name

sort_direction

string

if sort is provided, sets the direction of the sort - valid options: - ascending (default) - descending

  • science

  • language_arts

  • mathematics

  • social_studies

  • health_pe

  • creative_arts

  • world_languages

  • professional_development

  • special_education

  • vocational_studies

  • computer_technology

  • other

  • all

  • english

  • reading

  • esl

  • journalism

  • speech

  • basic_math

  • algebra

  • geometry

  • trigonometry

  • calculus

  • statistics

  • computer_science

  • basic_science

  • biology

  • chemistry

  • physics

  • psychology

  • environmental_science

  • history

  • world_history

  • us_history

  • government

  • economics

  • european_history

  • geography

  • health_education

  • physical_education

  • art

  • music

  • dance

  • drama

  • spanish

  • french

  • latin

  • german

  • japanese

  • chinese_mandarin

  • italian

  • drivers_education

  • edmodo_training

  • pre_kindergarten

  • kindergarten

  • first

  • second

  • third

  • fourth

  • fifth

  • sixth

  • seventh

  • eighth

  • ninth

  • tenth

  • eleventh

  • twelfth

  • higher_education

  • not_sure

  • one_to_five

  • six_to_ten

  • eleven_to_fifteen

  • sixteen_to_twenty

  • twenty_one_to_twenty_five

  • twenty_six_or_more

Configure OAuth for Edmodo Adapter

You will need an Edmodo Account with District or School administrator privileges. While you can use the default administrative account, it is usually a good idea to create a separate User and grant the necessary administrative privileges.

Creating an OAuth Credential in RapidIdentity Connect
  1. In RapidIdentity, Navigate to Connect > OAuth2 Credentials.

  2. Select the project you want the credential associated with. For security reasons an OAuth credential is associated with a single project only, though it can be shared with any number of actions sets within the project and used on any RapidIdentity Connect node in the same cluster.

  3. Click the Add… button and select Edmodo.

  4. Give the credential a name (must be unique within the project.)

  5. Enter the username of the administrator account you wish to use in the Username field.

  6. Review the permissions that will be requested. The default selection represents the permissions that are required for the Edmodo adapter to be fully functional, but if you don't need all the capabilities you may wish to adjust the requested permissions.

  7. Click the Request OAuth Credential button.

  8. Press OK to redirect to Edmodo to authorize the credential.

  9. If necessary, log in as the Edmodo administrator account you entered above.

  10. Review the requested permissions and press the Accept button.

  11. Select and copy the code from the resulting page.

  12. Switch back to the RapidIdentity Connect tab or window, paste the code, and press the OK button.

Creating a Google Apps connection using an OAuth Credential
  1. Insert the defineEdmodoOAuthConnection() action.

  2. Enter the domain.

  3. After selecting the credentialName field, select OAuth Credential… in the combo box.

  4. Select the desired credential in the dialog and press OK.

Deleting an OAuth Credential
  • Navigate to Connect > OAuth2 Credentials. Select the credential and press the Delete… button.

Exchange Adapter Actions
RapidIdentity Connect Exchange Administration Web Service Agent

The Exchange adapter depends on the Exchange Agent. Access the Exchange/Office 365 Agent Guides to download and install the correct agent.

Add a member to an Exchange Distribution Group.

Property

Value

Description

connection*

expression, variable

the Exchange connection definition

groupIdentity*

text, expression, variable

the identity of the DistributionGroup

memberIdentity*

text, expression, variable

the identity of the object to add to the DistributionGroup

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

addExchangeDistributionGroupMember(sessionExch,"idautotestgroup",
    "idautotestuser")

Create an Exchange MoveRequest record. (Exchange 2010 or higher)

Property

Value

Description

connection*

expression, variable

the Exchange connection definition

record*

expression, variable

the record to save

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

moveRequest = createRecord()
setRecordFieldValue(moveRequest, "Identity", "testuser")
setRecordFieldValue(moveRequest, "TargetDatabase", "db2")
queuedMoveRequest = createExchangeMoveRequest(conn, moveRequest)

Delete an Exchange DistributionGroup record by Id.

Property

Value

Description

connection*

expression, variable

the Exchange connection definition

identity*

text, expression, variable

the identity of the Exchange DistributionGroup to delete

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

deleteExchangeDistributionGroup(sessionExch,"idautotestgroup")

Delete a member from an Exchange DistributionGroup.

Property

Value

Description

connection*

expression, variable

the Exchange connection definition

groupIdentity*

text, expression, variable

the identity of the DistributionGroup

memberIdentity*

text, expression, variable

the identity of the object to delete from the DistributionGroup

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

deleteExchangeDistributionGroupMember(sessionExch,"idautotestgroup",
    "idautotestuser")

Delete an Exchange Mailbox record by Id.

Property

Value

Description

connection*

expression, variable

the Exchange connection definition

identity*

text, expression, variable

the identity of the Exchange Mailbox to delete

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

deleteExchangeMailbox(sessionExch,"idautotestuser")

Delete an Exchange MailContact record by Id.

Property

Value

Description

connection*

expression, variable

the Exchange connection definition

identity*

text, expression, variable

the identity of the Exchange MailContact to delete

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

deleteExchangeMailContact(sessionExch,"testcontact")

Delete an Exchange MailUser record by Id.

Property

Value

Description

connection*

expression, variable

the Exchange connection definition

identity*

text, expression, variable

the identity of the Exchange MailUser to delete

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

deleteExchangeMailUser(sessionExch,"idautotestmailuser")

Delete an Exchange MoveRequest record by Id. (Exchange 2010 or higher)

Property

Value

Description

connection*

expression, variable

the Exchange connection definition

identity*

text, expression, variable

the identity of the Exchange MoveRequest to delete

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

# cleanup completed and failed move requests so those mailboxes 
    can be moved again
# first - get the move requests that have completed
filter = createRecord()
setRecordFieldValue(filter, "Status", "Completed")
completedRequests = getExchangeMoveRequests(sessionExch, filter)
forEach(completedRequest, completedRequests) {
    deleteExchangeMoveRequest(conn, completedRequest.identity)
}

Disable an Exchange DistributionGroup record by Id.

Property

Value

Description

connection*

expression, variable

the Exchange connection definition

identity*

text, expression, variable

the identity of the Exchange DistributionGroup to disable

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

disableExchangeDistributionGroup(sessionExch,"idautotestgroup")

Disable an Exchange Mailbox record by Id.

Property

Value

Description

connection*

expression, variable

the Exchange connection definition

identity*

text, expression, variable

the identity of the Exchange Mailbox to disable

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

disableExchangeMailbox(sessionExch,"idautotestuser")

Disable an Exchange MailContact record by Id.

Property

Value

Description

connection*

expression, variable

the Exchange connection definition

identity*

text, expression, variable

the identity of the Exchange MailContact to disable

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

disableExchangeMailContact(sessionExch,"mailcontact")

Disable an Exchange MailUser record by Id.

Property

Value

Description

connection*

expression, variable

the Exchange connection definition

identity*

text, expression, variable

the identity of the Exchange MailUser to disable

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

disableExchangeMailUser(sessionExch,"idauttestmailuser")

Get an Exchange DistributionGroup record by Id.

Property

Value

Description

connection*

expression, variable

the Exchange connection definition

identity*

text, expression, variable

the identity of the Exchange DistributionGroup to get

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

getExchangeDistributionGroup(sessionExch, "idautotestgroup")

Get Exchange DistributionGroup records.

Property

Value

Description

connection*

expression, variable

the Exchange connection definition

filter

text, expression, variable

an OPath filter or an example Record

maxResults

expression, variable

maximum number of Records to return (default: 1000)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

getExchangeDistributionGroups(sessionExch,exchFilter)

Get an Exchange Mailbox record by Identity.

Property

Value

Description

connection*

expression, variable

the Exchange connection definition

identity*

text, expression, variable

the identity of the Exchange Mailbox to get

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

getExchangeMailbox(sessionExch,"idautotestuser")

Get Exchange Mailbox records.

Property

Value

Description

connection*

expression, variable

the Exchange connection definition

filter

text, expression, variable

an OPath filter or an example Record

maxResults

expression, variable

maximum number of Records to return (default: 1000)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

getExchangeMailboxes(sessionExch,exchFilter)

Get an Exchange MailContact record by Id.

Property

Value

Description

connection*

expression, variable

the Exchange connection definition

identity*

text, expression, variable

the identity of the Exchange MailContact to get

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

getExchangeMailContact(sessionExch, "idautotestmailuser")

Get Exchange MailContact records.

Property

Value

Description

connection*

expression, variable

the Exchange connection definition

filter

text, expression, variable

an OPath filter or an example Record

maxResults

expression, variable

maximum number of Records to return (default: 1000)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

getExchangeMailContacts(sessionExch)

Get an Exchange MailUser record by Id.

Property

Value

Description

connection*

expression, variable

the Exchange connection definition

identity*

text, expression, variable

the identity of the Exchange MailUser to get

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

getExchangeMailUser(sessionExch,"idautotestmailuser")

Get Exchange MailUser records.

Property

Value

Description

connection*

expression, variable

the Exchange connection definition

filter

text, expression, variable

an OPath filter or an example Record

maxResults

expression, variable

maximum number of Records to return (default: 1000)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

getExchangeMailUsers(sessionExch)

Get an Exchange MoveRequest record by Identity.

Property

Value

Description

connection*

expression, variable

the Exchange connection definition

identity*

text, expression, variable

the identity of the Exchange MoveRequest to get

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

getExchangeMoveRequest(sessionExch, "testuser")

Get Exchange MoveRequest records. (Exchange 2010 or higher)

Property

Value

Description

connection*

expression, variable

the Exchange connection definition

filter

text, expression, variable

an example Record

maxResults

expression, variable

maximum number of Records to return (default: 1000)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

See deleteExchangeMoveRequest

Open a connection to Exchange.

Property

Value

Description

exchangeServer*

text, expression, variable

the DNS name or IP address of the Exchange server)

dc

text, expression, variable

the domain qualified name of the Active Directory DC to use (default: automatic)

exchangeAgentURL*

text, expression, variable

the URL of the Exchange Administrative Web Service agent (e.g. https://hostname:port/idautoExchangeAdminWS)

username*

text, expression, variable

username for authentication to Exchange

password*

password, string, expression, variable

password for authentication to Exchange

options

expression, variable

A record or JavaScript object with a field for each additional option. Currently defined fields are connectTimeout and socketTime which require a numeric value from 1 to 2147483647 (0x7FFFFFFF) that represents the number of milliseconds for the timeout, and 0 representing no timeout.

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

Global.ExchURL = "https://10.10.10.10/idautoExchangeAdminWS"
Global.ExchUser = "exchangeadmin@idauto.net"
Global.ExchPwd = Password
Global.ExchServer = "10.10.10.10"
sessionExch = openExchangeConnection(Global.ExchServer,Global.ExchURL,
    Global.ExchUser,Password>)

Create/Update an Exchange DistributionGroup record.

Property

Value

Description

connection*

expression, variable

the Exchange connection definition

record*

expression, variable

the record to save

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

groupRecord = createRecord()
setRecordFieldValue(groupRecord, "Name","idautotestgroup")
saveExchangeDistributionGroup(sessionExch,groupRecord)

Create/Update an Exchange Mailbox record.

Property

Value

Description

connection*

expression, variable

the Exchange connection definition

record*

expression, variable

the record to save

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

userRecord = createRecord()
setRecordFieldValue(userRecord, "Name","idautotestuser")
setRecordFieldValue(userRecord, "Password",<Password>)
setRecordFieldValue(userRecord, "userPrincipalName",
    "idautotestuser@test1.local")
setRecordFieldValue(userRecord, "LastName","user1")
setRecordFieldValue(userRecord, "FirstName","Bob")
saveExchangeMailbox(sessionExch,userRecord)

Create/Update an Exchange MailContact record.

Property

Value

Description

connection*

expression, variable

the Exchange connection definition

record*

expression, variable

the record to save

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

contactRecord = createRecord()
setRecordFieldValue(contactRecord, "Name","testcontact")
setRecordFieldValue(contactRecord, "EmailAddresses",
    "testcontact@somewhere.org")
saveExchangeMailContact(sessionExch,contactRecord)

Create/Update an Exchange MailUser record.

Property

Value

Description

connection*

expression, variable

the Exchange connection definition

record*

expression, variable

the record to save

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

userRecord2 = createRecord()
setRecordFieldValue(userRecord2, "Name", "testmailuser")
setRecordFieldValue(userRecord2, "EmailAddresses",
    "testmailuser@idauto.net")
saveExchangeMailUSer(sessionExch,userRecord2)

Fields supported for creating/updating on Exchange objects are documented as parameters to the New-* and Set-* Exchange Shell Cmdlets Because many objects are polymorphic, there are different cmdlets that can be applied to the same object and the set of supported attributes is based on all the applicable cmdlets, e.g. a Mailbox is also a User, a Recipient, a CASMailbox, and a MailboxRegionalConfiguration, so the set of supported attributes is the union of the Cmdlets for those 5 object types.

For all record types, the Identity field serves as the identifier for the corresponding Exchange object. On save, a record that has the Identity field will be treated as an update, whereas any record without the Identity field will be treated as a create or enable, depending on whether or not the corresponding object in AD already exists. Records returned from Exchange will always have the Identity field populated, though for purposes of getting or updating the object, any of the following can be used interchangeably as the Identity: ADObjectID, Alias, Distinguished name (DN), Domain\Account, GUID, LegacyExchangeDN, SmtpAddress, or User principal name (UPN).

For search filters, only one Exchange object type is supported for each record type, which means that searches cannot be performed across all the attributes that are supported for create/update on each record type. The list of attributes supported in search filters can be found here: http://technet.microsoft.com/en-us/library/bb738155.aspx. The syntax for searching is called OPath and is documented here: http://technet.microsoft.com/en-us/library/bb124268.aspx#OPATH. Filters should NOT be enclosed in braces { } because the adapter automatically takes care of that.

Record Type

New Cmdlet

Set Cmdslet(s)

Supported Attributes

Search Filter Object Type

Mailbox

New-Mailbox

Set-Mailbox

Set-User

Set-CASUser

Set-MailboxRegionalConfiguration

Set-UserPhoto

AcceptMessagesOnlyFrom, AcceptMessagesOnlyFromDLMembers, AcceptMessagesOnlyFromSendersOrMembers, ActiveSyncAllowedDeviceIDs, ActiveSyncBlockedDeviceIDs, ActiveSyncDebugLogging, ActiveSyncEnabled, ActiveSyncMailboxPolicy, Alias, ApplyMandatoryProperties, AssistantName, BypassModerationFromSendersOrMembers, CalendarRepairDisabled, CalendarVersionStoreDisabled, City, Company, CountryOrRegion, CustomAttribute1, CustomAttribute2, CustomAttribute3, CustomAttribute4, CustomAttribute5, CustomAttribute6, CustomAttribute7, CustomAttribute8, CustomAttribute9, CustomAttribute10, CustomAttribute11, CustomAttribute12, CustomAttribute13, CustomAttribute14, CustomAttribute15, DeliverToMailboxAndForward, Department, Discovery, DisplayName, EmailAddresses, EmailAddressPolicyEnabled, EvictLiveId, ExternalOofOptions, Fax, FederatedIdentity, FirstName, Force, ForwardingAddress, GrantSendOnBehalfTo, HomePhone, Identity, ImapEnabled, ImapMessagesRetrievalMimeFormat, ImapUseProtocolDefaults, ImmutableId, ImportLiveId, Initials, Languages, LastName, MAPIEnabled, MailTip, MailTipTranslations, MailboxPlan, Manager, MessageTrackingReadStatusEnabled, MobilePhone, ModeratedBy, ModerationEnabled, Name, Notes, OWAEnabled, Office, OrganizationalUnit, OtherFax, OtherHomePhone, OtherTelephone, Pager, Password, Phone, PopEnabled, PopMessagesRetrievalMimeFormat, PopUseProtocolDefaults, PostOfficeBox, PostalCode, RejectMessagesFrom, RejectMessagesFromDLMembers, RejectMessagesFromSendersOrMembers, RemotePowerShellEnabled, RemovedMailbox, RequireSenderAuthenticationEnabled, ResetPasswordOnNextLogon, ResourceCapacity, ResourceCustom, SecondaryAddress, SendModerationNotifications, SimpleDisplayName, StateOrProvince, StreetAddress, Title, Type, UseExistingLiveId, UserCertificate, UserSMimeCertificate, WebPage, WindowsEmailAddress, DateFormat, Language, LocalizeDefaultFolderName, TimeFormat, TimeZone, PictureData

Recipient

DistributionGroup

New-DistributionGroup

Set-DistributionGroup

Set-Group

AcceptMessagesOnlyFrom, AcceptMessagesOnlyFromDLMembers, AcceptMessagesOnlyFromSendersOrMembers, Alias, BypassModerationFromSendersOrMembers, BypassNestedModerationEnabled, CopyOwnerToMember, CreateDTMFMap, CustomAttribute1, CustomAttribute2, CustomAttribute3, CustomAttribute4, CustomAttribute5, CustomAttribute6, CustomAttribute7, CustomAttribute8, CustomAttribute9, CustomAttribute10, CustomAttribute11, CustomAttribute12, CustomAttribute13, CustomAttribute14, CustomAttribute15, DisplayName, EmailAddresses, GrantSendOnBehalfTo, HiddenFromAddressListsEnabled, Identity, MailTip, MailTipTranslations, ManagedBy, MemberDepartRestriction, MemberJoinRestriction, Members, ModeratedBy, ModerationEnabled, Name, Notes, OrganizationalUnit, PhoneticDisplayName, PrimarySmtpAddress, RejectMessagesFrom, RejectMessagesFromDLMembers, RejectMessagesFromSendersOrMembers, ReportToManagerEnabled, ReportToOriginatorEnabled, RequireSenderAuthenticationEnabled, RoomList, SendModerationNotifications, SendOofMessageToOriginatorEnabled, SimpleDisplayName, Type, Universal, WindowsEmailAddress

Recipient

MailContact

New-MailContact

Set-MailContact

Set-Contact

AcceptMessagesOnlyFrom, AcceptMessagesOnlyFromDLMembers, AcceptMessagesOnlyFromSendersOrMembers, Alias, AllowUMCallsFromNonUsers, AssistantName, BypassModerationFromSendersOrMembers, City, Company, CountryOrRegion, CreateDTMFMap, CustomAttribute1, CustomAttribute2, CustomAttribute3, CustomAttribute4, CustomAttribute5, CustomAttribute6, CustomAttribute7, CustomAttribute8, CustomAttribute9, CustomAttribute10, CustomAttribute11, CustomAttribute12, CustomAttribute13, CustomAttribute14, CustomAttribute15, Department, DisplayName, EmailAddresses, ExternalEmailAddress, Fax, FirstName, GrantSendOnBehalfTo, HiddenFromAddressListsEnabled, HomePhone, Identity, Initials, LastName, MacAttachmentFormat, MailTip, MailTipTranslations, Manager, MessageBodyFormat, MessageFormat, MobilePhone, ModeratedBy, ModerationEnabled, Name, Notes, Office, OrganizationalUnit, OtherFax, OtherHomePhone, OtherTelephone, Pager, Phone, PhoneticDisplayName, PostOfficeBox, PostalCode, RejectMessagesFrom, RejectMessagesFromDLMembers, RejectMessagesFromSendersOrMembers, RequireSenderAuthenticationEnabled, SecondaryAddress, SecondaryDialPlan, SendModerationNotifications, SimpleDisplayName, StateOrProvince, StreetAddress, TelephoneAssistant, Title, UMCallingLineIds, UMDialPlan, UseMapiRichTextFormat, UsePreferMessageFormat, WebPage, WindowsEmailAddress

Recipient

MailUser

New-MailUser

Set-MailUser

Set-User

Set-CASUser

AcceptMessagesOnlyFrom, AcceptMessagesOnlyFromDLMembers, AcceptMessagesOnlyFromSendersOrMembers, Alias, AllowUMCallsFromNonUsers, AssistantName, BypassModerationFromSendersOrMembers, City, Company, CountryOrRegion, CreateDTMFMap, CustomAttribute1, CustomAttribute2, CustomAttribute3, CustomAttribute4, CustomAttribute5, CustomAttribute6, CustomAttribute7, CustomAttribute8, CustomAttribute9, CustomAttribute10, CustomAttribute11, CustomAttribute12, CustomAttribute13, CustomAttribute14, CustomAttribute15, Department, DisplayName, EmailAddresses, ExternalEmailAddress, Fax, FirstName, GrantSendOnBehalfTo, HiddenFromAddressListsEnabled, HomePhone, Identity, Initials, LastName, MacAttachmentFormat, MailTip, MailTipTranslations, Manager, MessageBodyFormat, MessageFormat, MobilePhone, ModeratedBy, ModerationEnabled, Name, Notes, Office, OrganizationalUnit, OtherFax, OtherHomePhone, OtherTelephone, Pager, Phone, PhoneticDisplayName, PostOfficeBox, PostalCode, RejectMessagesFrom, RejectMessagesFromDLMembers, RejectMessagesFromSendersOrMembers, RequireSenderAuthenticationEnabled, SecondaryAddress, SecondaryDialPlan, SendModerationNotifications, SimpleDisplayName, StateOrProvince, StreetAddress, TelephoneAssistant, Title, UMCallingLineIds, UMDialPlan, UseMapiRichTextFormat, UsePreferMessageFormat, WebPage, WindowsEmailAddress

Recipient

MoveRequest

New-MoveRequest

N/A

Identity, Remote, RemoteCredential, RemoteGlobalCatalog, RemoteHostName, RemoteLegacy, AcceptLargeDataLoss, ArchiveDomain, ArchiveOnly, ArchiveTargetDatabase, BadItemLimit, BatchName, Confirm, DoNotPreserveMailboxSignature, DomainController, IgnoreRuleLimitErrors, MRSServer, PrimaryOnly, Protect, RemoteOrganizationName, RemoteTargetDatabase, Suspend, SuspendComment, SuspendWhenReadyToComplete, TargetDatabase, TargetDeliveryDomain

MoveRequest

Starting in Exchange 2010, you can initiate moving a mailbox from one database to another using createExchangeMoveRequest. There are a lot of different options provided by the cmdlet so make sure you review the Understanding Move Requests in the Exchange documentation to know which properties to set for a particular scenario.

Some scenarios require providing a credential field. A credential field requires two values, the first being the username and the second the password.

Once a move is requested you can track it's progress using getExchangeMoveRequest. You can also search for MoveRequests (with optional filter) getExchangeMoveRequests. Note that optional filter does not support OPath like all the other Exchange object types do, and that the criteria in the record used as a filter is limited to the parameters available for the Get-MoveRequest cmdlet.

One thing to keep in mind about MoveRequests is that the MoveRequest has to be deleted once mailbox move has completed before another MoveRequest can be created for that mailbox. One way to accomplish that would be to create a job that uses getExchangeMoveRequests to get a list of all the existing requests, and use deleteExchangeMoveRequest to delete any MoveRequests that have Status “Completed”. You may also want to check for and requests with Statuses “CompletedWithWarning” and “Failed” and send notification to an administrator for remediation. Deleting a MoveRequest that has not yet completed will effectively cancel the move.

The Adapter does not currently support modifying, suspending or resuming an existing MoveRequest.

Force.com Adapter Actions

Deletes the record in ForceCom. Returns a success boolean.

Property

Value

Description

connection*

expression, variable

the ForceCom connection object

id*

text, expression, variable

The Id of the ForceCom record to delete.

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

# Delete the incident
if(incident){
    deleted = deleteForceComRecord(sessionForce, newIncidentId)
    if(deleted){
        log("incident deleted")
    } else {
        log("Unable to delete incident", "ERROR")
    }
} else { 
}

Deletes the records in ForceCom. Returns a result object containing the fields 'id','success', and 'errors', which are either single entries or arrays.

Property

Value

Description

connection*

expression, variable

the ForceCom connection object

ids*

text, expression, variable

The Ids of the ForceCom records to delete.

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

deleted = deleteForceComRecords(sessionForce, [idToDeleteA, 
    idToDeleteB])

Gets a given ForceCom Record.

Property

Value

Description

connection*

expression, variable

the ForceCom connection object

objectType*

text, expression, variable

The ForceCom object type

id*

text, expression, variable

The Id of the ForceCom record.

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

records = getForceComRecords(sessionForce, "Account", "Id, Name, 
    OwnerId"

Get multiple ForceCom Records matching the given filter, or all records if no filter is supplied.

Property

Value

Description

connection*

expression, variable

the ForceCom connection object

objectType*

text, expression, variable

The ForceCom object type

filter

text, expression, variable

The filter used to limit results. Can either be an encoded query as specified by ForceCom, or a Record example object.

fields

text, expression, variable

The fields returned in the query. Defaults to all fields.

limit

expression, variable

The maximum number of records to return. Defaults to all objects.

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

records - getForceComRecords(sessionForce, "Account", query, 
    "Id, Name, OwnerId")

Opens a connection to a ForceCom Server.

Property

Value

Description

username*

text, expression, variable

Username for authentication to the ForceCom web service

password*

password, string, expression, variable

Password for authentication to the ForceCom web service. When authenticating through the API or client it is necessary to append the security token to the password in the form passwordSecurityToken. The security token is a case-sensitive, alphanumeric string and it can be obtained through the Salesforce UI Personal Settings through Reset Your Security Token or by changing the Salesforce password.

apiVersion

text, expression, variable

API Version to use

options

expression, variable

A record or JavaScript object with a field for each additional option. The currently defined fields are connectTimeout and socketTime which require a numeric value from 1 to 2147483647 (0x7FFFFFFF) that represents the number of milliseconds for the timeout, and 0 representing no timeout.

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

# Open Connections
{
    sessionAD = openADConnection(Global.idautoHost, Global.idautoPort, 
        Global.idautoSSL, Global.idautoUser, <Password>)
    sessionForce = openForceComConnection(Global.forceUser, <Password>)
    if(!sessionAD || !sessionForce){
        # --- Error making connections. Terminating process.
        return null
    } else {
    }
}

Open ForceCom Record Iterator.

Property

Value

Description

connection*

expression, variable

the ForceCom connection object

objectType*

text, expression, variable

The ForceCom object type

filter

text, expression, variable

The filter used to limit results. Can either be an encoded query as specified by ForceCom, or a Record example object.

fields

text, expression, variable

The fields returned in the query. Defaults to all fields.

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

records = openForceComRecordIterator(sessionForce, "Contact", filter)

Creates or updates the record in ForceCom. Returns the id of the object, or null on failure.

Property

Value

Description

connection*

expression, variable

the ForceCom connection object

record*

text, expression, variable

A Record object containing the fields you want to save. If 'Id' is set, an update will be performed, otherwise a create will be performed.

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

result = saveForceComRecord(sessionForce, recordForce)

Creates or updates multiple records in ForceCom. Returns a result object containing the fields 'id','success', and 'errors', which are either single entries or arrays.

Property

Value

Description

connection*

expression, variable

the ForceCom connection object

records*

text, expression, variable

An array of Record objects containing the fields you want to save. If 'Id' is set for a given Record, an update will be performed, otherwise a create will be performed.

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

results = saveForceComRecords(sessionForce, records)

Example

# open csv file containing new leads
csvInput = openDelimitedTextInput("data/leads.csv", 
    "FirstName,LastName,Email,Company")
# open session to Force.com to access Salesforce app
sessionSalesforce = openForceComConnection("user@example.com", 
    <Password> , {
    socketTimeout: 10000
})
# loop through new leads 
forEach(csvRecord, csvInput) {
    # check for existing lead with same email address
    existing = getForceComRecords(sessionSalesforce, "Lead", {
        Email: "'" + csvRecord["Email"] + "'"
    })
    if (existing & amp; & amp; existing[0]) {
        # lead exists, update the other fields
        record = createRecord(true) setRecordFieldValue(record, "type", 
            "Lead")
        setRecordFieldValue(record, "Id", existing[0]["Id"])
        copyRecordFields(csvRecord, record, "FirstName, LastName, 
            Company")
        updatedId = saveForceComRecord(sessionSalesforce, record)
        if (updatedId) {
            log("Updated existing lead for: " + toJSON(csvRecord), 
                "INFO")
        } else {
            log("Error updating existing lead for: " + 
                toJSON(csvRecord), "ERROR")
        }
    } else {
        # lead doesn 't exist, so add
        record = createRecord(true)
        setRecordFieldValue(record, "type", "Lead")
        copyRecordFields(csvRecord, record, "FirstName, LastName, 
            Email, Company")
        createdId = saveForceComRecord(sessionSalesforce, record)
        if (createdId) {
            log("Added new lead for: " + toJSON(csvRecord), "INFO")
        } else {
            log("Error updating existing lead for: " + toJSON(csvRecord), 
                "ERROR")
Go        }
    }
}
close(sessionSalesforce)
close(csvInput)
Google Classroom Adapter Actions

The Google Classroom Adapter depends on the Google Apps Adapter and requires it to be licensed. Google Classroom actions require a connection created with defineGoogleAppsOAuthConnection(). The OAuth Credential used must have the classroom related scopes enabled, which are not selected by default.

Add an Alias to a Google Classroom Course.

Property

Value

Description

connection*

expression, variable

the Google Apps connection definition

courseId*

text, expression, variable

the id of the Course

alias*

text, expression, variable

the Alias to add

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

# add a domain scoped alias to the course
newAlias = addGoogleClassroomCourseAlias(conn, courseId, 
    "d:English101Section2")

Add a Google Apps User to a Google Classroom Course as a Student.

Property

Value

Description

connection*

expression, variable

the Google Apps connection definition

courseId*

text, expression, variable

the id of the Course

userId*

text, expression, variable

the id of the Student to add to the Course

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

# add a student to course
newStudent = addGoogleClassroomCourseStudent(conn, 
    "d:English101Section2", "john.doe@example.com")

Add a batch of Google Apps Users to a Google Classroom Course as Students.

Property

Value

Description

connection*

expression, variable

the Google Apps connection definition

courseId*

text, expression, variable

the id of the Course

userIds*

text, expression, variable

array of ids to add to the Course

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

# add students to course
newStudents = addGoogleClassroomCourseStudents(conn, 
    "d:English101Section2", ["john.doe@example.com", 
    "jane.doe@example.com"])

Add a Google Apps User to a Google Classroom Course as a Teacher.

Property

Value

Description

connection*

expression, variable

the Google Apps connection definition

courseId*

text, expression, variable

the id of the Course

userId*

text, expression, variable

the id of the Teacher to add to the Course

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

# add a teacher to course
newTeacher = addGoogleClassroomCourseTeacher(conn, 
    "d:English101Section2", "juan.fulano@example.com")

Add a batch of Google Apps Users to a Google Classroom Course as Teachers.

Property

Value

Description

connection*

expression, variable

the Google Apps connection definition

courseId*

text, expression, variable

the id of the Course

userIds*

text, expression, variable

array of ids to add to the Course

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

# add teachers to course
newStudents = addGoogleClassroomCourseTeachers(conn, 
    "d:English101Section2", ["juan.fulano@example.com", 
    "maria.fulano@example.com"])

Delete a Google Classroom Course record by Id.

Property

Value

Description

connection*

expression, variable

the Google Apps connection definition

id*

text, expression, variable

the id of the Course to delete

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

# delete a course
deleted = deleteGoogleClassroomCourse(conn, 
    "d:English101Section2")

Delete an Alias from a Google Classroom Course.

Property

Value

Description

connection*

expression, variable

the Google Apps connection definition

courseId*

text, expression, variable

the id of the Course

alias*

text, expression, variable

the Alias to delete

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

# delete the alias from the course
deleted = deleteGoogleClassroomCourse(conn, courseId, 
    "d:English101Section2")

Delete an Invitation to a Google Classroom Course.

Property

Value

Description

connection*

expression, variable

the Google Apps connection definition

id*

text, expression, variable

the id of the Invitation

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

# get the invitation so we can find its id
invitation = getGoogleClassroomCourseInvitations(conn, 
    {courseId: courseId, userId: "juan.fulano@example.com"})
# delete the invitation
deleted = deleteGoogleClassroomCourseInvitation(conn, invitation.id)

Delete a batch of Invitations to Google Classroom Courses.

Property

Value

Description

connection*

expression, variable

the Google Apps connection definition

ids*

text, expression, variable

array of ids to delete

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

# get all invitations to a course
invitations = getGoogleClassroomCourseInvitations(conn, 
    {courseId: courseId})
# extract the ids
invitationIds = createArray()
forEach(invitation, invitations) {
    appendArrayElement(invitationIds, invitation.id)
}
deleted = deleteGoogleClassroomCourseInvitations(conn, 
    invitationIds)

Delete a batch of Google Classroom Course record by Id.

Property

Value

Description

connection*

expression, variable

the Google Apps connection definition

ids*

text, expression, variable

array of the Google Classroom User ids to delete

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

# delete courses
deleted = deleteGoogleClassroomCourses(conn, [course1Id, course2Id])

Delete a Student from a Google Classroom Course.

Property

Value

Description

connection*

expression, variable

the Google Apps connection definition

courseId*

text, expression, variable

the id of the Course

userId*

text, expression, variable

the id of the Student to delete from the Course

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

# remove a student from course
deleted = deleteGoogleClassroomCourseStudent(conn, courseId, 
    "john.doe@example.com")

Delete a batch of Students from a Google Classroom Course.

Property

Value

Description

connection*

expression, variable

the Google Apps connection definition

courseId*

text, expression, variable

the id of the Course

userIds*

text, expression, variable

array of ids to remove from the Course

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

# remove students from course
deleted = deleteGoogleClassroomCourseStudents(conn, courseId, 
    ["john.doe@example.com", "jane.doe@example.com"])

Delete a Teacher from a Google Classroom Course.

Property

Value

Description

connection*

expression, variable

the Google Apps connection definition

courseId*

text, expression, variable

the id of the Course

userId*

text, expression, variable

the id of the Teacher to delete from the Course

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

# remove a teacher from course
deleted = deleteGoogleClassroomCourseTeacher(conn, courseId, 
    "juan.fulano@example.com")

Delete a batch of Teachers from a Google Classroom Course.

Property

Value

Description

connection*

expression, variable

the Google Apps connection definition

courseId*

text, expression, variable

the id of the Course

userIds*

text, expression, variable

array of ids to remove from the Course

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

# remove teachers from course
deleted = deleteGoogleClassroomCourseTeachers(conn, courseId, 
    ["juan.fulano@example.com", "maria.fulano@example.com"])

Get a Google Classroom Course record by Id.

Property

Value

Description

connection*

expression, variable

the Google Apps connection definition

id*

text, expression, variable

the id of the Course to get

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

# get a course
course = getGoogleClassroomCourse(conn, courseId, English101Section2")

Get the aliases for a Google Classroom Course.

Property

Value

Description

connection*

expression, variable

the Google Apps connection definition

courseId*

text, expression, variable

the id of the Course

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

# get the aliases for a course
aliases = getGoogleClassroomCourseAliases(conn, courseId)

Get list of outstanding Google Classroom Course Invitations.

Property

Value

Description

connection*

expression, variable

the Google Apps connection definition

filter*

text, expression, variable

filter to limit the Invitations returned (default: none)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

# get the outstanding invitations for a course
invitations = getGoogleClassroomCourseInvitations(conn, {courseId: 
    courseId})

Get Google Classroom Course records.

Property

Value

Description

connection*

expression, variable

the Google Apps connection definition

filter

text, expression, variable

filter to limit the Courses returned (default: none)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

# get the courses that a student is enrolled in
courses = getGoogleClassroomCourses(conn, 
    {studentId: "john.doe@example.com"})

Get batch of Google Classroom Course records by Id.

Property

Value

Description

connection*

expression, variable

the Google Apps connection definition

ids*

text, expression, variable

array of the Google Classroom User ids to get

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

# get the courses by id
courses = getGoogleClassroomCoursesByID(conn, [course1Id, course2Id])

Get the list of Students from a Google Classroom Course.

Property

Value

Description

connection*

expression, variable

the Google Apps connection definition

courseId*

text, expression, variable

the id of the Course

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

# get the students from a course
students = getGoogleClassroomCourseStudents(conn, courseId)

Get the list of Teachers from a Google Classroom Course.

Property

Value

Description

connection*

expression, variable

the Google Apps connection definition

courseId*

text, expression, variable

the id of the Course

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

# get the students from a course
teacher = getGoogleClassroomCourseTeachers(conn, courseId)

Invite a batch of Google Apps Users to a Google Classroom Course.

Property

Value

Description

connection*

expression, variable

the Google Apps connection definition

courseId*

text, expression, variable

the id of the Course

userIds*

text, expression, variable

array of ids to invite to the Course

role*

choice (STUDENT, TEACHER), text, expression, variable

the role of the invited Users

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

# invite students to a course
invitations = inviteUsersToGoogleClassroomCourse(conn, courseId, 
    ["john.doe@example.com", "jane.doe@example.com"], "STUDENT")

Invite a Google Apps User to a Google Classroom Course.

Property

Value

Description

connection*

expression, variable

the Google Apps connection definition

courseId*

text, expression, variable

the id of the Course

userId*

text, expression, variable

the id of the User to invite to the Course

role*

choice (STUDENT, TEACHER), text, expression, variable

the role of the invited User

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

# invite a teacher to a course
invitations = inviteUserToGoogleClassroomCourse(conn, courseId, 
    "maria.fulano.doe@example.com"], "TEACHER")

Open Google Classroom Course Iterator.

Property

Value

Description

connection*

expression, variable

the Google Apps connection definition

filter

text, expression, variable

filter to limit the Courses returned (default: none)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

# iterate all the courses in the domain
courses = openGoogleClassroomCourseIterator(conn)
forEach(course, courses) {
# do something
}

Property

Value

Description

connection*

expression, variable

the Google Apps connection definition

record*

expression, variable

the record to save

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

# create a new course
courseTemplate = createRecord()
setRecordFieldValue(courseTemplate, "name", "English 101");
setRecordFieldValue(courseTemplate, "section", "A");
setRecordFieldValue(courseTemplate, "descriptionHeading", 
    "Welcome to English 101");
setRecordFieldValue(courseTemplate, "description", "Remedial English");
setRecordFieldValue(courseTemplate, "room", "222", false);
setRecordFieldValue(courseTemplate, "ownerId", "admin@example.com");
setRecordFieldValue(courseTemplate, "courseState", "ACCEPTED");
setRecordFieldValue(courseTemplate, "alias", "English-101-Section-A");
newCourse = saveGoogleClassroomCourse(conn, courseTemplate); 

Create/Update a batch of Google Classroom Course records.

Property

Value

Description

connection*

expression, variable

the Google Apps connection definition

records*

expression, variable

array of records to save

array of records to save

expression, variable

name of the variable to be assigned to the return value

Example

# create 3 sections of new course
courseTemplates = createArray()
forEach(section, ["A", "B", "C"])
    courseTemplate = createRecord()
    setRecordFieldValue(courseTemplate, "name", "English 101")
    setRecordFieldValue(courseTemplate, "section", section)
    setRecordFieldValue(courseTemplate, "descriptionHeading", 
        "Welcome to English 101")
    setRecordFieldValue(courseTemplate, "description", "Remedial English")
    setRecordFieldValue(courseTemplate, "room", "222", false)
    setRecordFieldValue(courseTemplate, "ownerId", "admin@example.com")
    setRecordFieldValue(courseTemplate, "courseState", "ACCEPTED")
    setRecordFieldValue(courseTemplate, "alias", "English-101-Section-" 
        + section)
    appendArrayElement(courseTemplates, courseTemplate)
}
newCourse = saveGoogleClassroomCourses(conn, courseTemplates)
Google Apps Adapter Record Fields Reference

See also: Google Classroom API Reference

Course Record Fields

Field

Read-Only

Description

id

Y

Identifier for this course assigned by Classroom (exclude on create)

name

N

Name of the course (required)

section

N

Section of the course

descriptionHeading

N

Heading for the description

description

N

Description

room

N

Room location. 

courseState

N

State of the course (ACTIVE|ARCHIVED|PROVISIONED|DECLINED) (default: PROVISIONED)

alias

N

Initial alias on creation, not readable and ignored on updates.

ownerId

Y

the Google Apps id of the owner of the course (required on create, but read-only after that)

enrollmentCode

Y

Enrollment code to use when joining this course

alternateLink

Y

indicates if the User's IP address is white listed

creationTime

Y

Creation timestamp

updateTime

Y

Update timestamp

Alias Record Fields

Field

Read-Only

Description

alias

Y

Alias string. The format of the string indicates the desired alias scoping.

  • d:<name> indicates a domain-scoped alias. Example: d:math_101

  • p:<name> indicates a project-scoped alias. Example: p:abc123

Once assigned, an alias can be used in place of the id

Teacher/Student Record Fields

Field

Read-Only

Description

courseId

Y

the id of the course

userId

Y

uniqueid of the Teacher/Student

profile

Y

User information of the Teacher/Student

profile.name

Y

Name of the user

profile.name.givenName

Y

The first name

profile.name.familyName

Y

The last name

profile.name.fullName

Y

The full name

profile.emailAddress

Y

The email address

profile.photoUrl

Y

The photo url

profile.permissions

Y

List of permissions

Invitation Record Fields

Field

Read-Only

Description

id

Y

the id of the invitation

userId

Y

uniqueid of the invited Teacher/Student

courseId

Y

the id of the course

role

Y

STUDENT | TEACHER

Google Apps Adapter Filter Fields Reference

Where allowed or required, the filter property is a Record or object with the described fields.

Course Filter

Field

Description

studentId

Restricts returned Courses to those having the specified Student

teacherId

Restricts returned Courses to those having the specified Teacher

Invitation Filter

Field

Description

userId

Restricts returned invitations to those for the specified Student/Teacher

courseId

Restricts returned invitations to those for the specified Course

G-Suite Adapter Actions

The RapidIdentity Rolling Release versions include updated nomenclature of the Google actions to align with Google's renaming of Google Apps to G-Suite.

The adapter is now referred to as G-Suite and the actions all have "Apps" removed from their names. RapidIdentity includes a mapping from the older G-Suite action names to the newer G-Suite action names.

Add a G-Suite Alias to a Group.

Property

Value

Description

connection*

expression, variable

the G-Suite connection definition

alias*

text, expression, variable

the Alias to add

groupId*

text, expression, variable

the id of the Group

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

result = addGoogleGroupAlias(sessionGoogle, "test-group@example.com", 
    "test-group-alias@example.com")

Add a member to a G-Suite Group.

Property

Value

Description

connection*

expression, variable

the G-Suite connection definition

groupId*

text, expression, variable

the id of the group

memberId*

text, expression, variable

the id of the object to add to the Group

role

choice (MEMBER, MANAGER, OWNER), text, expression, variable

the role of the member (default: MEMBER)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

result = addGoogleGroupMember(sessionGoogle, "test-group@example.com", 
    "joeuser@example.com", "MEMBER")

Add a batch of members to a G-Suite Group.

Property

Value

Description

connection*

expression, variable

the G-Suite connection definition

groupId*

text, expression, variable

the id of the group

memberIds*

text, expression, variable

array of ids to add to the Group

role

choice (MEMBER, MANAGER, OWNER), text, expression, variable

the role of the members (default:MEMBER)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

members = createArray()
appendArrayItem(members, "joeuser@example.com")
appendArrayItem(members, "freduser@example.com")
appendArrayItem(members, "tomuser@example.com")
result = addGoogleGroupMembers(sessionGoogle, "test-group@example.com", 
    members, "MEMBER")

Add a G-Suite Alias to a User.

Property

Value

Description

connection*

expression, variable

the G-Suite connection definition

alias*

text, expression, variable

the Alias to add

userId*

text, expression, variable

the id of the User

returnVariable

expression, variable

name of the variable to be assigned to the return value

Note

result = addGoogleUserAlias(sessionGoogle, "joeuser@example.com", 
    "joeuser@students.example.com")

Call an arbitrary Google API endpoint.

Property

Value

Description

connection*

expression, variable

the G-Suite connection definition

method*

choice (GET, POST, PATCH, PUT, DELETE), text, expression, variable

the HTTP method to use

url*

text, expression, variable

The url of the Google API endpoint

headers

expression, variable

a Record or Object containing additional HTTP header fields

data

expression, variable

the data (PATCH/POST/PUT methods only)

contentType

choice (application/json, application/atom+xml), text, expression, variable

the Content-Type of data (PATCH/POST/PUT methods only)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

Global.GoogleDomain = "example.com"
Global.GoogleOAuthCredentialName = "MyGoogleExtendedCredential"
sessionGoogle = defineGoogleExtendedOAuthConnection(Global.GoogleDomain, 
    Global.MyGoogleExtendedCredential, 
    ["https://www.googleapis.com/auth/drive"], currentUser.id)
# upload test string as a file to google drive
response = callGoogleAPI(sessionGoogle, "POST", 
"https://www.googleapis.com/upload/drive/v3/files?uploadType=media", 
    null, "This is a test", "text/plain");
# if successfully uploaded, rename from auto-generated name to 
    one of our choice
if(response.statusCode == 200 && response.data && response.data.id) {
fileId = response.data.id
response = callGoogleAPI(sessionGoogle, "PATCH", 
    "https://www.googleapis.com/drive/v3/files/" + fileId, null, 
    {name: "text.txt"}, "application/json");
} else {
}

Define an Extended OAuth2 connection to G-Suite.

Property

Value

Description

domain*

text, expression, variable

the name of the G-Suite domain

credentialName*

text, expression, variable

OAuth2 credential for authentication to G-Suite

scopes*

text, expression, variable

Array of Google OAuth2 scopes to enable

impersonateUserId

text, expression, variable

Google User to impersonate

options

expression, variable

Record or object holding additional options

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

Global.GoogleDomain = "example.com"
Global.GoogleOAuthCredentialName = "MyGoogleExtendedCredential"
sessionGoogle = defineGoogleExtendedOAuthConnection(Global.GoogleDomain, 
    Global.MyGoogleExtendedCredential, 
    ["https://www.googleapis.com/auth/drive"], currentUser.id)

Define an OAuth2 connection to G-Suite.

Property

Value

Description

domain*

text, expression, variable

the name of the G-Suite domain

credentialName*

text, expression, variable

OAuth2 credential for authentication to G-Suite

options

expression, variable

A record or JavaScript object with a field for each additional option. Currently defined fields are connectTimeout and socketTime which require a numeric value from 1 to 2147483647 (0x7FFFFFFF) that represents the number of milliseconds for the timeout, and 0 representing no timeout.

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

Global.GoogleDomain = "example.com"
Global.GoogleOAuthCredentialName = "MyGoogleCredential"
sessionGoogle = defineGoogleOAuthConnection(Global.GoogleDomain, 
    Global.GoogleOAuthCredentialName)

Delete a G-Suite Calendar Resource record by Id.

Property

Value

Description

connection*

expression, variable

the G-Suite connection definition

id*

text, expression, variable

the id of the G-Suite Calendar Resource to delete

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

result = deleteGoogleCalendarResource(sessionGoogle, "projector-1")

Delete a trustee from a G-Suite Calendar.

Property

Value

Description

connection*

expression, variable

the G-Suite connection definition

calendar*

text, expression, variable

the id (email) of the G-Suite Calendar

trustee*

text, expression, variable

the id of the trustee

domain

text, expression, variable

the domain of the G-Suite Calendar (default: the domain specified in the connection)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

result = deleteGoogleCalendarTrustee(sessionGoogle, "jdoe@example.com", 
    "jsmith@example.com")

Delete a G-Suite Custom Schema record by Id.

Property

Value

Description

connection*

expression, variable

the G-Suite connection definition

id*

text, expression, variable

the id of the G-Suite Custom Schema to delete

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

result = deleteGoogleCustomSchema(sessionGoogle, "my_schema")

Delete a G-Suite Group record by Id.

Property

Value

Description

connection*

expression, variable

the G-Suite connection definition

id*

text, expression, variable

the id of the G-Suite Group to delete

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

result = deleteGoogleGroup(sessionGoogle, 
    "test-group@example.com")

Delete a G-Suite Alias from a Group.

Property

Value

Description

connection*

expression, variable

the G-Suite connection definition

alias*

text, expression, variable

the Alias to delete

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

result = deleteGoogleGroupAlias(sessionGoogle, "test-group-alias@example.com")

Delete a member from a G-Suite Group.

Property

Value

Description

connection*

expression, variable

the G-Suite connection definition

groupId*

text, expression, variable

the id of the group

memberId*

text, expression, variable

the id of the object to delete from the Group

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

result = deleteGoogleGroupMember(sessionGoogle, "test-group@example.com", 
    "joeuser@example.com")

Delete a batch of members from a G-Suite Group.

Property

Value

Description

connection*

expression, variable

the G-Suite connection definition

groupId*

text, expression, variable

the id of the group

memberIds*

text, expression, variable

array of ids to remove from the Group

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

members = createArray()
appendArrayItem(members, "joeuser@example.com")
appendArrayItem(members, "freduser@example.com")
appendArrayItem(members, "tomuser@example.com")
result = deleteGoogleGroupMembers(sessionGoogle, "test-group@example.com", 
    members)

Delete a batch of G-Suite Group record by Id.

Property

Value

Description

connection*

expression, variable

the G-Suite connection definition

ids*

text, expression, variable

array of the G-Suite User ids to delete

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

groups = createArray()
appendArrayItem(groups, "test-group1@example.com")
appendArrayItem(groups, "test-group2@example.com")
appendArrayItem(groups, "test-group3@example.com")
result = deleteGoogleGroups(sessionGoogle, groups)

Delete a G-Suite OrgUnit record by Id.

Property

Value

Description

connection*

expression, variable

the G-Suite connection definition

id*

text, expression, variable

the id of the G-Suite OrgUnit to delete

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

deleteGoogleOrgUnit(sessionGoogle, "jim-test/jim-test-sub")

Delete a G-Suite Shared Contact record by Id.

Property

Value

Description

connection*

expression, variable

the G-Suite connection definition

id*

text, expression, variable

the id of the G-Suite Shared Contact to delete

domain

text, expression, variable

the domain of the G-Suite Shared Contact to delete (default: the domain specified in the connection)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

result = deleteGoogleSharedContact(sessionGoogle, "9f0e6b60fa1d04c")

Delete a G-Suite Shared Contact Photo by Id.

Property

Value

Description

connection*

expression, variable

the G-Suite connection definition

id*

text, expression, variable

the id of the G-Suite User

domain

text, expression, variable

the domain of the G-Suite Shared Contact (default: the domain specified in the connection)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

result = deleteGoogleSharedContactPhoto(sessionGoogle, "9f0e6b60fa1d04c")

Delete a G-Suite User record by Id.

Property

Value

Description

connection*

expression, variable

the G-Suite connection definition

id*

text, expression, variable

the id of the G-Suite User to delete

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

result = deleteGoogleUser(sessionGoogle, "joeuser@example.com")

Delete a G-Suite Alias from a User.

Property

Value

Description

connection*

expression, variable

the G-Suite connection definition

alias*

text, expression, variable

the Alias to delete

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

result = deleteGoogleUserAlias(sessionGoogle, "joeuser@students.example.com")

Delete a G-Suite User Photo by Id.

Property

Value

Description

connection*

expression, variable

the G-Suite connection definition

id*

text, expression, variable

the id of the G-Suite User

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

result = deleteGoogleUserPhoto(sessionGoogle, "joeuser@example.com")

Delete batch of G-Suite Users by Id.

Property

Value

Description

connection*

expression, variable

the G-Suite connection definition

ids*

expression, variable

array of the G-Suite User ids to delete

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

users = createArray()
appendArrayItem(users, "joeuser@example.com")
appendArrayItem(users, "freduser@example.com")
appendArrayItem(users, "tomuser@example.com")
result = deleteGoogleUsers(sessionGoogle, users)

Delete a Send-as Alias for a Google Apps user.

Property

Value

Description

returnVariable

expression, variable

name of the variable to be assigned to the return value

connection*

expression, variable

the G-Suite connection definition

userid*

text, expression, variable

The UserID with the assigned alias (email)

sendAsId

text, expression, variable

The SendAs Alias address to be delted

Example

deleteGoogleUserSendAsAlias(sessionGoogle, "ddeers@idautodemo.com", "ccooper@idautodemo.com")

Get a G-Suite Calendar Resource record by Id.

Property

Value

Description

connection*

expression, variable

the G-Suite connection definition

id*

text, expression, variable

the id of the G-Suite Calendar Resource to get

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

resource = getGoogleCalendarResource(sessionGoogle, 
    "testresource_1393275428627")

Get G-Suite Calendar Resource records.

Property

Value

Description

connection*

expression, variable

the G-Suite connection definition

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

resources = getGoogleCalendarResources(sessionGoogle)

Get a trustee of G-Suite Calendar.

Property

Value

Description

connection*

expression, variable

the G-Suite connection definition

calendar*

text, expression, variable

the id (email) of the G-Suite Calendar

trustee*

text, expression, variable

the id of the trustee

domain

text, expression, variable

the domain of the G-Suite Calendar (default: the domain specified in the connection)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

trustee = getGoogleCalendarTrustee(sessionGoogle, "jdoe@example.com", 
    "example.com")

Get G-Suite Calendar trustees.

Property

Value

Description

connection*

expression, variable

the G-Suite connection definition

calendar*

text, expression, variable

the id (email) of the G-Suite Calendar

domain

text, expression, variable

the domain of the G-Suite Calendar (default: the domain specified in the connection)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

trustees = getGoogleCalendarTrustees(sessionGoogle, "jdoe@example.com")

Get a G-Suite CustomSchema record by Id.

Property

Value

Description

connection*

expression, variable

the G-Suite connection definition

id*

text, expression, variable

the id of the G-Suite Custom Schema to get

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

my_schema = getGoogleCustomSchema(sessionGoogle, "my_schema")

Get G-Suite Custom Schema records.

Property

Value

Description

connection*

expression, variable

the G-Suite connection definition

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

schemas = getGoogleCustomSchemas(sessionGoogle)

Get a G-Suite Group record by Id.

Property

Value

Description

connection*

expression, variable

the G-Suite connection definition

id*

text, expression, variable

the id of the G-Suite Group to get

minimal

boolean, expression, variable

don't get member, owner, and manager (default: false)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

groupIds = createArray()
getGoogleGroup(groupIds, "group1@example.com")
getGoogleGroup(groupIds, "group2@example.com")
getGoogleGroup(groupIds, "group3@example.com")
groups = getGoogleGroupsById(sessionGoogle, groupIds)

Get G-Suite Group records.

Property

Value

Description

connection*

expression, variable

the G-Suite connection definition

domain

text, expression, variable

the domain of the groups to get (default: the domain specified in the connection; * = all domains associated with the account)

minimal

boolean, expression, variable

don't get member, owner, and manager (default: false)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

groups = getGoogleGroups(sessionGoogle)

Get batch of G-Suite Group records by Id.

Property

Value

Description

connection*

expression, variable

the G-Suite connection definition

ids*

text, expression, variable

array of the G-Suite User ids to get

minimal

boolean, expression, variable

don't get member, owner, and manager (default: false)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

group = getGoogleGroupsById(sessionGoogle, 
    "testgroup_1332876583247@example.com")

Get a G-Suite Group Settings record.

Property

Value

Description

connection*

expression, variable

the G-Suite connection definition

id*

text, expression, variable

the id of the G-Suite Group

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

groupSettings = getGoogleGroupSettings(sessionGoogle, 
    "testgroup_1332876583247@example.com")

Get a G-Suite OrgUnit record by Id.

Property

Value

Description

connection*

expression, variable

the G-Suite connection definition

id*

text, expression, variable

the id of the G-Suite OrgUnit to get

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

orgUnit = getGoogleOrgUnit(sessionGoogle, "jim-test")

Get G-Suite OrgUnit records.

Property

Value

Description

connection*

expression, variable

the G-Suite connection definition

parentId

text, expression, variable

the id of the parent G-Suite OrgUnit to get the children of (default: all OrgUnits)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

orgUnits = getGoogleOrgUnits(sessionGoogle)

Get a G-Suite Shared Contact record by Id.

Property

Value

Description

connection*

expression, variable

the G-Suite connection definition

id*

text, expression, variable

the id of the G-Suite Shared Contact to get

domain

text, expression, variable

the domain of the G-Suite Shared Contact to get (default: the domain specified in the connection)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

contact = getGoogleSharedContact(sessionGoogle, "7154f278887c0b81")

Get a G-Suite Shared Contact Photo by Id.

Property

Value

Description

connection*

expression, variable

the G-Suite connection definition

id*

text, expression, variable

the id of the G-Suite Shared Contact

domain

text, expression, variable

the domain of the G-Suite Shared Contact (default: the domain specified in the connection)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

photo = getGoogleSharedContactPhoto(sessionGoogle, "7154f278887c0b81")

Get G-Suite Shared Contact records.

Property

Value

Description

connection*

expression, variable

the G-Suite connection definition

domain

text, expression, variable

the domain of the G-Suite Shared Contacts to get (default: the domain specified in the connection)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

contacts = getGoogleSharedContacts(sessionGoogle)

Get a G-Suite User record by Id.

Property

Value

Description

connection*

expression, variable

the G-Suite connection definition

id*

text, expression, variable

the id of the G-Suite User to get

minimal

boolean, expression, variable

don't get user.emailLists, user.nicknames, and orgUnitPath (default: false)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

user = getGoogleUser(sessionGoogle, "jdoe@example.com")

Get a G-Suite User Photo by Id.

Property

Value

Description

connection*

expression, variable

the G-Suite connection definition

id*

text, expression, variable

the id of the G-Suite User

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

photo = getGoogleUserPhoto(sessionGoogle, "jdoe@example.com")

Get G-Suite User records.

Property

Value

Description

connection*

expression, variable

the G-Suite connection definition

parentId

text, expression, variable

the id of the parent G-Suite OrgUnit to get the children of (default: all OrgUnits)

domain

text, expression, variable

the domain of the users to get (default: the domain specified in the connection; * = all domains associated with the account)

filter

text, expression, variable

filter to limit the users returned (default: none) For filter syntax, see https://developers.google.com/admin-sdk/directory/v1/guides/search-users

minimal

boolean, expression, variable

don't get user.emailLists, user.nicknames, and orgUnitPath (default: false)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

users = getGoogleUsers(sessionGoogle)

Get batch of G-Suite User records by Id.

Property

Value

Description

connection*

expression, variable

the G-Suite connection definition

ids*

expression, variable

array of the G-Suite User ids to get

minimal

boolean, expression, variable

don't get user.emailLists, user.nicknames, and orgUnitPath (default: false)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

userIds = createArray()
appendArrayElement(userIds, "user1@example.com")
appendArrayElement(userIds, "user2@example.com")
appendArrayElement(userIds, "user3@example.com")
users = getGoogleUsersById(sessionGoogle, userIds)

Get the specific Send-As Alias for a Google User.

Property

Value

Description

returnVariable

expression, variable

name of the variable to be assigned to the return value

connection*

expression, variable

the G-Suite connection definition

userId*

text, expression, variable

the id of the G-Suite User

sendAsId*

text, expression

the id of the SendAs alias

Example

getGoogleUserSendAsAlias(sessionGoogle, "ddeers@idautodemo.com", "derrickdeers@idautodemo.com"

Get the Send-as Aliases for a G-Suite User.

Property

Value

Description

connection*

expression, variable

the G-Suite connection definition

userId*

text, expression, variable

the id of the G-Suite User

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

sendAsAliases = getGoogleUserSendAsAliases(sessionGoogle, "jdoe")

Open G-Suite Calendar Resource Iterator.

Property

Value

Description

connection*

expression, variable

the G-Suite connection definition

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

iterator = openGoogleCalendarResourceIterator(conn, true)
forEach(next, iterator) {
log("next:" + next);
}
close(iterator)

Open G-Suite Group Iterator.

Property

Value

Description

connection*

expression, variable

the G-Suite connection definition

domain

text, expression, variable

the domain of the users to get (default: the domain specified in the connection; * = all domains associated with the account)

minimal

boolean, expression, variable

don't get user.emailLists, user.nicknames, and orgUnitPath (default: false)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

iterator = openGoogleGroupIterator(conn, true)
forEach(next, iterator) {
log("next:" + next);
}
close(iterator)

Open G-Suite OrgUnit Iterator.

Property

Value

Description

connection*

expression, variable

the G-Suite connection definition

parentId

text, expression, variable

the id of the parent G-Suite OrgUnit to get the children of (default: all OrgUnits)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

iterator = openGoogleOrgUnitIterator(conn, true)
forEach(next, iterator) {
log("next:" + next);
}
close(iterator)

Open G-Suite Shared Contact Iterator.

Property

Value

Description

connection*

expression, variable

the G-Suite connection definition

domain

text, expression, variable

the domain of the G-Suite Shared Contacts to iterate (default: the domain specified in the connection)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

iterator = openGoogleSharedContactIterator(conn, true)
forEach(next, iterator) {
log("next:" + next);
}
close(iterator)

Open G-Suite User Iterator.

Property

Value

Description

connection*

expression, variable

the G-Suite connection definition

parentId

text, expression, variable

the id of the parent G-Suite OrgUnit to get the children of (default: all OrgUnits)

domain

text, expression, variable

the domain of the users to get (default: the domain specified in the connection; * = all domains associated with the account)

filter

text, expression, variable

filter to limit the users returned (default: none) For filter syntax, see  https://developers.google.com/admin-sdk/directory/v1/guides/search-users

minimal

boolean, expression, variable

don't get user.emailLists, user.nicknames, and orgUnitPath (default: false)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

iterator = openGoogleUserIterator(conn, true)
forEach(next, iterator) {
log("next:" + next);
}
close(iterator)

Update a G-Suite Calendar Resource record.

Property

Value

Description

connection*

expression, variable

the G-Suite connection definition

record*

expression, variable

the record to save

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

resource = createRecord(false)
setRecordFieldValue(resource, "resourceId", "projector-1")
setRecordFieldValue(resource, "resourceDescription", 
    "Dell model 1021 projector - Sales")
setRecordFieldValue(resource, "resourceName", "projector-sales")
result = saveGoogleCalendarResource(sessionGoogle, resource)

Create/Update a G-Suite Custom Schema record.

Property

Value

Description

connection*

expression, variable

the G-Suite connection definition

record*

expression, variable

the record to save

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

schemaTemplate = createRecordFromObject({
schemaName: "my_schema",
fields: [
{
fieldName: "isManager",
fieldType: "BOOL",
indexed: false,
multiValued: false,
readAccessType: "ALL_DOMAIN_USERS"
},
{
fieldName: "directReports",
fieldType: "EMAIL",
indexed: true,
multiValued: true,
readAccessType: "ALL_DOMAIN_USERS"
},
]
})
my_schema = saveGoogleCustomSchema(conn, schemaTemplate)

Create/Update a G-Suite Group record.

Property

Value

Description

connection*

expression, variable

the G-Suite connection definition

record*

expression, variable

the record to save

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

group = createRecord(false)
setRecordFieldValue(group, "groupId", "test-group@example.com")
setRecordFieldValue(group, "groupName", "test-group")
setRecordFieldValue(group, "description", "A test group")
result = saveGoogleGroup(sessionGoogle, group)

Create/Update a batch of G-Suite Group records.

Property

Value

Description

connection*

expression, variable

the G-Suite connection definition

records*

expression, variable

array of records to save

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

groups = createArray()
i = 0
while(i++ < 5) {
group = createRecord(false)
setRecordFieldValue(group, "groupId", "test-group-" + i + "@example.com")
setRecordFieldValue(group, "groupName", "test-group-" + i);
setRecordFieldValue(group, "description", "A test group")
appendArrayItem(groups, group)
}
result = saveGoogleGroups(sessionGoogle, groups)

Update a G-Suite Group Settings record.

Property

Value

Description

connection*

expression, variable

the G-Suite connection definition

record*

expression, variable

the record to save

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

groupSettings = createRecord(false)
setRecordFieldValue(groupSettings, "id", "test-group@example.com")
setRecordFieldValue(groupSettings, "whoCanPostMessage", 
    "ALL_MEMBERS_CAN_POST")
result = saveGoogleGroupSettings(sessionGoogle, groupSettings)

Create/Update a G-Suite OrgUnit record.

Property

Value

Description

connection*

expression, variable

the G-Suite connection definition

record*

expression, variable

the record to save

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

orgUnit = createRecord(true)
addRecordFieldValue(orgUnit, "name", "jim-test", false)
addRecordFieldValue(orgUnit, "description", "Jim's test org unit", false)
addRecordFieldValue(orgUnit, "parentOrgUnitPath", "/", false)
saveGoogleOrgUnit(sessionGoogle, orgUnit)
orgUnit2 = createRecord(false)
addRecordFieldValue(orgUnit2, "name", "jim-test-sub", false)
addRecordFieldValue(orgUnit2, "parentOrgUnitPath", "jim-test", false)
addRecordFieldValue(orgUnit2, "description", "Jim's test sub ou", false)
addRecordFieldValue(orgUnit2, "blockInheritance", "true", false)
saveGoogleOrgUnit(sessionGoogle, orgUnit2)

Update a G-Suite Shared Contact record.

Property

Value

Description

connection*

expression, variable

the G-Suite connection definition

record*

expression, variable

the record to save

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

phone = createRecord(true)
addRecordFieldValue(phone, "number", "2812200021", false)
addRecordFieldValue(phone, "rel", "work", false)
addRecordFieldValue(phone, "primary", "true", false)
contact = createRecord(false)
addRecordFieldValue(contact, "fullName", "Identity Automation", false)
addRecordFieldValue(contact, "phoneNumber", phone, false)
result = saveGoogleSharedContact(sessionGoogle, contact)

Create/Update a G-Suite User record.

Property

Value

Description

connection*

expression, variable

the G-Suite connection definition

record*

expression, variable

the record to save

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

user = createRecord(true)
addRecordFieldValue(user, "primaryEmail", "joeuser@example.com", false)
addRecordFieldValue(user, "password", "Ch@ng3m3", false)
addRecordFieldValue(user, "familyName", "User", false)
addRecordFieldValue(user, "givenName", "Joe", false)
addRecordFieldValue(user, "orgUnitPath", "jim-test", false)
phone = createRecord(true)
addRecordFieldValue(phone, "number", "2812200021", false)
addRecordFieldValue(phone, "rel", "work", false)
addRecordFieldValue(phone, "primary", "true", false)
addRecordFieldValue(user, "phones", phone)
result = saveGoogleUser(sessionGoogle, user)

Create/Update a batch of G-Suite User records.

Property

Value

Description

connection*

expression, variable

the G-Suite connection definition

records*

expression, variable

array of records to save

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

users = createArray()
i = 0
while(i++ < 5) {
user = createRecord(true)
addRecordFieldValue(user, "primaryEmail", "joeuser_" + i + 
    "@example.com", false)
addRecordFieldValue(user, "password", "Ch@ng3m3", false)
addRecordFieldValue(user, "familyName", "User", false)
addRecordFieldValue(user, "givenName", "Joe", false)
addRecordFieldValue(user, "orgUnitPath", "jim-test", false)
appendArrayItem(users, group)
}
result = saveGoogleUsers(sessionGoogle, users)
saveGoogleUserSendAsAlias

Add a Send-as Alias for a Google User.

Property

Value

Description

returnVariable

expression, variable

name of the variable to be assigned to the return value

connection*

expression, variable

the G-Suite connection definition

record*

expression, variable

array of records to save

Example

{
    doesContain = stringContains(exists['emails'], recordAD['mail'], true)
    if (!doesContain) {
    # Add Google Apps Alias
    {
    result = addGoogleUserAlias(sessionGoogle, recordAD['mail'], record['userName'])
    }
    if (result) {
    {
        alias = createRecord()
	setRecordFieldValue(alias, "userId", record['userName'])
	setRecordFieldValue(alias, "address", recordAD['mail'])
	setRecordFieldValue(alias, "name", recordAD['displayName'])
	setRecordFieldValue(alias, "replyTo", recordAD['mail'])
	setRecordFieldValue(alias, "makeDefault", true)
	result = saveGoogleUserSendAsAlias(sessionGoogle, alias)
	}
    } else {
    }
} else {
}

Add/Update a trustee of a G-Suite Calendar.

Property

Value

Description

connection*

expression, variable

the G-Suite connection definition

calendar*

text, expression, variable

the id (email) of the G-Suite Calendar

trustee*

text, expression, variable

the id of the trustee

role*

choice (none, freebusy, read, owner), text, expression, variable

the trustee role

domain

text, expression, variable

the domain of the G-Suite Calendar (default: the domain specified in the connection)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

result = setGoogleCalendarTrustee(sessionGoogle, "jdoe@example.com", 
    "jsmith@example.com", "read")

Update a G-Suite Shared Contact Photo.

Property

Value

Description

connection*

expression, variable

the G-Suite connection definition

id*

text, expression, variable

the id of the G-Suite User

type*

text, expression, variable

the MIME media type of the photo

photo*

expression, variable

the photo (as a byte array or Base64 encoded string)

domain

text, expression, variable

the domain of the G-Suite Shared Contact (default: the domain specified in the connection)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

photo = loadFileAsBytes("/photos/test.jpg")
result = setGoogleSharedContactPhoto(sessionGoogle, "7154f278887c0b81", 
    "image/jpeg", photo)

Update a G-Suite User Photo.

Property

Value

Description

connection*

expression, variable

the G-Suite connection definition

id*

text, expression, variable

the id of the G-Suite User

type*

text, expression, variable

the MIME media type of the photo

photo*

expression, variable

the photo (as a byte array or Base64 encoded string)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

photo = loadFileAsBytes("/photos/jdoe.jpg")
result = setGoogleUserPhoto(sessionGoogle, "jdoe@example.com", 
    "image/jpeg", photo)
G-Suite Adapter Record Fields Reference

Field

Read-Only

Description

id

Y

the primaryEmail of the user to be updated (exclude on create)

primaryEmail (required for create)

N

The User's primary email address

password (required for create)

N

Stores the password for the user account

hashFunctionName

N

when setting password, the hash function that has already been applied to the password. Legal values are “SHA-1”, “MD5”, and “CRYPT” or leave unspecified if password in clear text

givenName (required for create)

N

the User's first name

familyName (required for create)

N

the User's last name

fullName

Y

the User's full name

admin

N

indicates if the User has super admininistrator privileges

suspended

N

indicates if the User is suspended

suspensionReason

Y

indicates the reason the User was suspended: “ADMIN”, “UNDER13”, “WEB_LOGIN_REQUIRED”, “ABUSE”

changePasswordAtNextLogin

N

indicates if the User is forced to change their password at next login

ipWhitelisted

N

indicates if the User's IP address is white listed

includeInGlobalAddressList

N

indicates if the User's profile is visible in the G-Suite global address list when the contact sharing feature is enabled for the domain

ims

N

the User's User IM Record Fields

emails

N

the User's User Email Record Fields

externalIds

N

the User's User External ID Record Fields

relations

N

the User's User Relationship Record Fields

addresses

N

the User's User Address Record Fields

organizations

N

the User's User Organization Record Fields

phones

N

the User's User Phone Number Record Fields

etag

Y

eTag of the resource

isDelegatedAdmin

Y

Indicates if the User is a delegated administrator

lastLoginTime

Y

the last time the User logged into the User's account (Date object)

creationTime

Y

the time the User User's account was created (Date object)

deletionTime

Y

the time the User User's account was deleted (Date object)

customerId

Y

the customer ID of the User

isMailboxSetup

Y

indicates if the user's Google mailbox is created

thumbnailPhotoUrl

Y

photo Url of the user

uniqueid

Y

the unique ID for the user

aliases

Y

the User's alias email addresses

nonEditableAliases

Y

the user's non-editable alias email addresses - typically outside the account's primary domain or sub-domain

memberOf

Y

all groups for which a user or group has a membership

customSchemas

N

the User's Custom Schema Record Fields

userName

N

the user name of the User (DEPRECATED - use primaryEmail)

user.emailLists

Y

list of Groups the User belongs to (DEPRECATED - use memberOf)

user.nicknames

Y

the Nicknames of the User (DEPRECATED - use aliases)

Field

Read-Only

Description

id

Y

the id of the Group to be updated (exclude on create)

groupId (required for create)

N

the email address of the Group

groupName (required for create)

N

the name of the Group

description

Y

the description of the Group

member

Y

list of members of the Group

etag

Y

eTag of the resource

whoCanAdd

N

the members that can add members to the Group. can be set to all members, managers, or none

whoCanJoin

N

the members that can join the Group. can be set to members in any domain, by request, or invitation

whoCanViewGroup

N

the members that can view to the Group. can be set to members in the domain, managers, members, or anyone

whoCanLeaveGroup

N

the members that can leave the Group. can be set to all members, managers, or none

whoCanContactOwner

N

the members that can contact the Group owner. can be set to all in the domain, members, managers, or anyone

Field

Read-Only

Description

id

Y

the id of the Alias (exclude on create)

alias

Y

the Alias email address

primaryEmail

Y

The aliased User's/Group's primary email address

etag

Y

eTag of the resource

Field

Read-Only

Description

id

Y

the id of the OrgUnit (exclude on create)

name

N

the simple name of the OrgUnit

parentOrgUnitPath

N

the full path name of the OrgUnit parent

description

N

the description of the OrgUnit

blockInheritance

N

block policy inheritance from OrgUnits higher in the OrgUnit tree (“true”/“false”)

orgUnitPath

Y

the full pathname of the OrgUnit

etag

Y

eTag of the resource

Field

Read-Only

Description

id

Y

the id of the Contact (exclude on create)

namePrefix

N

Honorific prefix of the Contact, e.g. 'Mr' or 'Mrs'

givenName

N

given name of the Contact

additionalName

N

additional name of the Contact, eg. middle name

familyName

N

family name of the Contact

nameSuffix

N

Honorific suffix of the Contact, e.g. 'Jr' or 'MD'

fullName

N

Unstructured representation of the name of the Contact

content

N

notes about the Contact

email

N

Contact Email Record Fields

im

N

Contact IM Record Fields

organization

N

Contact Organization Record Fields

phoneNumber

N

Contact Phone Number Record Fields

structuredPostalAddress

N

Contact Postal Address Record Fields

where

N

place associated with the Contact

extendedProperty

N

Contact Extended Property Record Fields

title

Y

the title of the Contact

updated

Y

the date the Contact record was last updated

Field

Read-Only

Description

id

Y

the id of the Resource (exclude on create)

resourceId (required for create)

N

the unique name of the Resource

resourceName

N

the name of the Resource

resourceDescription

N

the description of the Resource

resourceEmail

Y

the email address of the Resource and the id of the associated associated Calendar)

resourceType

N

the type of the Resource

resourceCommonName

N

the display name of the Resource (DEPRECATED - use resourceName)

Field

Read-Only

Description

userId

N

the id of the User the Send-As Alias will apply to

name

N

the name associated with the Send-As Alias

address

N

the email address of the Send-As Alias

replyTo

N

optional reply-to address of Send-As Alias

makeDefault

N

the make the Send-As Alias the default for the User

isDefault

Y

indicates whether or not the Send-As Alias is currently default for the User

verified

Y

indicates if the ownership of the email address's domain has been verified. This field must be true (verified), before the Send-As alias address can work.

Field

Read-Only

Description

id

Y

 The id of the schema

schemaName

 N

The name of the custom schema

schemaId

Y

The unique identifier of the schema

fields

N

1 or more Custom Field Definition Records

Field

Read-Only

Description

fieldName

 N

The name of the custom field

fieldId

Y

The unique identifier of the field

fieldType

N

The type of the field:

  • "STRING"

  • "INT64"

  • "BOOL"

  • "DOUBLE"

  • "EMAIL"

  • "PHONE"

  • "DATE"

indexed

N

true if field is to be indexed (default: true)

multiValued

N

true if field is multivalued (default: false)

readAccessType

N

Who can view values of this field:

  • "ALL_DOMAIN_USERS"

  • "ADMINS_AND_SELF"

numericIndexingSpec

N

Indexing spec for a numeric field. By default, only exact match queries will be supported for numeric fields. Setting this field  allows range queries to be supported.

numericIndexingSpec.maxValue

N

Maximum value of this field. This is meant to be indicative rather than enforced. Values outside this range will still be indexed, but search may not be as performant.

numericIndexingSpec.maxValue

N

Minimum value of this field. This is meant to be indicative rather than enforced. Values outside this range will still be indexed, but search may not be as performant.

Field

Description

address (required)

the email address

displayName

the display name of the entity the email address belongs to

label

name for the email address, e.g. Work, Personal, Preferred, etc.

rel

the type of email: one of home, work, or other

primary

boolean indicating this is the primary email address

Field

Description

address (required)

the instant messaging address

label

name for the email address, e.g. Work, Personal, Preferred, etc.

rel

the type of IM: one of home, netmeeting, work, or other

protocol

the IM protocol: one of AIM, MSN, YAHOO, SKYPE, QQ, GOOGLE_TALK, ICQ, JABBER

primary

boolean indicating this is the primary im address

Field

Description

orgDepartment

the department within the organization

orgName

the name of the organization

orgSymbol

the symbol of the organization

orgTitle

the title of the person of the organization

orgJobDescription

the job description of the person within the organization

label

label for the organization, e.g. Work, Volunteer, etc.

rel

the type of organization: one of work, or other

primary

boolean indicating this is the primary organization for the person

where

a place associated with the organization, e.g. office location

Field

Description

number (required)

the phone number

label

name for the phone number, e.g. Work, Personal, Preferred, etc.

rel

the type of phone number: one of assistant, callback, car, company_main, fax, home, home_fax, isdn, main, mobile, pager, radio, telex, tty_tdd, work, work_fax, work_mobile, work_pager, other_fax, or other

uri

URI of phone number for VOIP access

primary

boolean indicating this is the primary phone number

Field

Description

street

the street address

pobox

the post office box

neighborhood

the neighborhood

city

the city

region

state, province, etc

postcode

postal code

country

name of the country

countryCode

country code

formattedAddress

the full, unstructured postal address

label

name of the address, e.g. Work, Personal, Preferred, etc.

rel

the type of address: one of work, home, or other

primary

boolean indicating this is the primary phone number

Field

Description

name

the name of the extended property

realm

the realm of the extended property

value

the value of the extended property

Field

Description

address

the email address

primary

indicates if this is the user's primary email

type

the type of the email account: “home”, “work”, “other”, “custom”

customType

if the value of type is custom, this field contains the custom type string

Field

Description

im

the user's IM network ID

primary

indicates this is the user's primary IM

protocol

the IM protocol: “aim”, “gtalk”, “icq”, “jabber”, “msn”, “net_meeting”, “qq”, “skype”, “yahoo”, “custom_protocol”

customProtocol

if the protocol value is custom_protocol, this field holds the custom protocol's string

type

the type of the IM account: “home”, “work”, “other”, “custom”

customType

if the IM type is custom, this field holds the custom type string

Field

Description

costCenter

the cost center of the organization

department

the department within the organization

description

the description of the organization

domain

the domain the organization belongs to

location

the physical location of the organization

name

the name of the organization

primary

indicates if this is the user's primary organization

symbol

text string symbol of the organization

title

the user's title within the organization

type

the type of organization: “unknown”, “school”, “work”, “domain_only”, “custom”

customType

if the value of type is custom, this field contains the custom type

Field

Description

value

a human-readable phone number

primary

indicates if this is the user's primary phone number

type

the type of phone number: “assistant”, “callback”, “car”, “company_main”, “grand_central”, “home”, “home_fax”, “isdn”, “main”, “mobile”, “other”, “other_fax”, “pager”, “radio”, “telex”, “tty_tdd”, “work”, “work_fax”, “work_mobile”, “work_pager”, “custom”

customType

if the value of type is custom, this field contains the custom type

Field

Description

country

the country

countryCode

the country code

extendedAddress

for extended addresses, such as an address that includes a sub-region

formatted

a full and unstructured postal address

locality

the town or city of the address

poBox

the post office box

postalCode

the ZIP or postal code

primary

indicates if this is the user's primary address

region

the abbreviated province or state

sourceIsStructured

indicates if the user-supplied address was formatted

streetAddress

the street address

type

the address type: “home”, “other”, “work”, “custom”

customType

if the address type is custom, this field contains the custom value

Field

Description

value

the value of the ID

type

the type of the ID. Allowed values are: “account”, “custom”, “customer”, “network”, “organization”

customType

if the external ID type is custom, this field holds the custom type

Field

Description

value

the name of the person the user is related to

type

the type of relation: “assistant”, “brother”, “child”, “domestic_partner”, “father”, “friend”, “manager”, “mother”, “parent”, “partner”, “referred_by”, “relative”, “sister”, “spouse”, “custom”

customType

if the value of type is custom, this field contains the custom type

Field

Description

<schema_name>

Record containing the custom schema fields for the schema with name schema_name

<schema_name>.<field_name>

For single valued fields, the value of the field For multi-valued fields, 0 or more User Custom Schema Multivalued Value Record

Field

Description

value

The value of the field item

type

Optional type of the value

  • "work" (default)

  • "home"

  • "other"

  • "custom"

customType

The name of the custom type if type=custom

G-Suite API Quotas

Google basically has two classes of API’s:  billable and non-billable. Billable API’s have a courtesy daily transaction limit and if you need to exceed that limit you have to enter billing information and then you are billed for transactions in excess of the courtesy limit. Non-billable API’s also have a courtesy daily transaction limit and if you need to exceed that limit you can make a request to have the limit raised and it will be considered on a case-by-case basis.

The APIs the G-Suite Adapter uses are primarily part of the Admin SDK, which is NOT a billable API. It has a courtesy limit of 150,000 transactions per day per Project (as defined in Google Developers Console). That limit should be sufficient for organizations up to about 50,000 people, but may not be sufficient for larger organizations, at least not for the initial on-boarding process and start/end of term for large educational institutions.Google will usually grant requests for an increased quota as long as you can reasonably justify it, but it’s hard to say how high they would actually raise it. Since quotas are associated with a Developer Console Project, an alternative to requesting an increased quota is to create and use multiple projects (and consequently multiple OAuth2 credentials) and using each project credential in a round-robin fashion to decrease the amount of quota used by any individual project. There are also per/user rate limits (transactions per second), with user really defined primarily as the ip address of the API client. In the case of the G-Suite adapters a user would actually be a single DSS appliance or possibly (if behind NAT) multiple appliances. The per/user rate limits can be raised in the Developer console to pretty much anything want them to be since the purpose of the per user limits is keep a single user from using up too much of your daily quota in a scenario such as a large web site using a single Project acting on behalf of millions of users. The default rate limit is 15 requests per second. Depending on your usage this may be insufficient and will result in occasional throttling messages showing up in your Action Set logs. If these messages happen on a regular basis, you will probably want to increase the per user limit for Admin SDK. Follow these steps to obtain the quota settings for a project.

  1. Log into Google using credentials that you want to own the Client ID and Client Secret.

  2. Browse to Google Cloud Console (i.e. Google Developers Console).

  3. Open the project.

  4. Navigate to APIs & Auth | API’s.

  5. For each API that has been enabled for the project, there is a Quota column that will show how much of the daily quota has been used, and if you hover over that field will show you the actual quota.

  6. If you click on the Admin SDK, and then Quota link you’ll go to a page allows you to adjust the per user limits and request additional quota.

For more information, visit the Google Cloud Platform Console Help Center.

Configure OAuth for G-Suite Adapter
Standard vs. Extended

As of version 4.1, the G-Suite Adapter supports two different forms of OAuth2 authentication. The original form (credential type GOOGLE, used with defineGoogleOAuthCredential()) is based on the Installed Applications scenario. For most uses, this form is the easiest to configure and use, and is sufficient for most usages of the G-Suite Adapter. The new form ((credential type GOOGLE_EXTENDED, used with defineGoogleExtendedOAuthCredential())) is based on the Service Account scenario. While more difficult to configure and use, this form provides some additional flexibility to impersonate any user within the domain without needing explicit approval from each user, which, in conjunction with the new callGoogleAPI() action, allows you to do things such a manage Calendars and Google Drive files for individual users, which an admin account would not normally be able to do.The User Interface for the Google Cloud Platform Console changes from time to time so the exact steps may be different than what is listed below.

Creating a Google Cloud Platform project (GOOGLE & GOOGLE_EXTENDED)

Both GOOGLE and GOOGLE_EXTENDED credentials require the creation of a Google Cloud Platform project. A single project can be used for multiple credentials of either type, with the limitation that the credentials within the same project will all share the same G-Suite API Quotas.

  1. Log into Google using credentials that you want to own the Client ID and Client Secret.

  2. Browse to Google Cloud Platform Console aka Google Developers Console and select the project created above.

  3. Click the Create Project button and name the project something appropriate like “Connect Google Adapter for MyCompany”.

  4. If not already selected, click on the newly created project to select it.

  5. Click on the menu button at the top left of the page, and select API Manager.

  6. Select Dashboard in the left sidebar.

  7. Click the ENABLE API link and enable the following APIs:

    • Admin SDK (required)

    • Calendar API (optional - only needed if provisioning calendar resources or trustees)

    • Contacts API (optional - only needed if provisioning shared contacts)

    • Group Settings API (optional - only needed if using Google Groups for Business/Education and want control group settings)

    • Google Classroom API (optional - only needed if you will be using the Google Classroom Adapter)

  8. There will be several other APIs that were enabled by default: you may disable them if desired.

  9. Note that you may come back at any time and enable/disable APIs.

Creating a Client ID/Secret (GOOGLE)

A Client ID and Client Secret are needed to create a standard GOOGLE OAuth2 Credential.

  1. Navigate to Google Cloud Platform Console and select the project created above.

  2. Click on the menu button at the top left of the page, and select API Manager.

  3. In the sidebar on the left, select Credentials.

    1. Select OAuth consent screen tab

      1. The consent screen settings control what is presented when creating the OAuth2 Credential in Connect.

      2. Select an email address if not already selected.

      3. Set the product name to RapidIdentity.

      4. (Optional) Set the Homepage URL to http://www.identityautomation.com/

      5. (Optional) Set the product Logo to http://downloads.identitymgmt.net/icons/IA_icon_120_inverse.png

      6. Click the Save button.

    2. Select Create Credentials tab.

      1. Click the Create credentials button and select OAuth client ID.

      2. Select the Other radio button and enter RapidIdentity in the Name field.

      3. Click the Create button and then OK.

    3. Click the Download JSON button to  save an offline copy of the Client ID and Client Secret. Make sure it is stored somewhere secure.

Creating and Authorizing a Service Account Key (GOOGLE_EXTENDED)

A Client ID and Client Secret are needed to create a standard GOOGLE OAuth2 Credential.

  1. Navigate to Google Cloud Platform Console and select the project created above.

  2. Click on the menu button at the top left of the page, and select API Manager.

  3. In the sidebar on the left, select Credentials.

    • Select Create Credentials tab.

      1. Click the Create credentials button and select Service account key.

      2. In the Service Account drop-down, select New service account.

      3. Enter an appropriate Service account name.

      4. Select the Project -> Service Account Actor role (or if actor role does not exist then 'owner' will work too)

      5. Leave the Service account ID default value

      6. Make sure JSON is selected as the Key type.

      7. Click the Create button and then OK.

      8. A JSON file will be downloaded containing the account information. Make sure it is stored somewhere secure.

      9. Press the close button.

      10. Click the Manage service accounts link.

      11. Click the More actions button  in the row corresponding to your newly created service account and select Edit. If that button is not visible you may need to scroll to the right.

      12. Select the Enable G-Suite Domain-wide Delegation checkbox, and press Save.

  4. To authorize the Service Account Key to access a Google domain:

    1. Login to Google Admin Console as a User with Super Admin role.

    2. Click on Security.

    3. Click on Show more.

    4. Click on Advanced settings.

    5. Click on Manage API client access

    6. Open the JSON file that was downloaded when you created the Service Account Key. Copy the value of the client_id field (without the enclosing quotes) and paste into the Client Name field in the browser.

    7. Enter the scopes you want to grant access to, separated by commas, in the One or More API scopes field and press the Authorize button. A list of available scopes is available at: https://developers.google.com/identity/protocols/googlescopes

    8. Additional scopes may be added later by repeating the previous two steps.

Creating an Administrator account (GOOGLE & GOOGLE_EXTENDED)

You will need an account with Administrator privileges in the domain you want to manage. While you can use the default administrative account, it is usually a good idea to create a separate User and grant the necessary administrative privileges.

Creating a GOOGLE OAuth2 Credential in Connect
  1. Navigate to Connect > OAuth2 Credentials.

  2. Select the project you want the credential associated with or select * to create a credential that may be used by all projects.

  3. Click the Add… button and select GOOGLE.

  4. Give the credential a name (must be unique within the project.)

  5. Enter the Client ID and Client Secret created above in the corresponding fields.

  6. Enter the email address of G-Suite administrator account you wish to use in the Username field.

  7. Review the permissions that will be requested. The default selection represents the permissions that are required for the G-Suite adapter to be fully functional, but if you don't need all the capabilities you may wish to adjust the requested permissions.

  8. Click the Request OAuth Credential button.

  9. Press OK to redirect to Google to authorize the credential.

  10. If necessary, log in to the G-Suite administrator account you entered above.

  11. Review the requested permissions. All the permissions used by the G-Suite adapter are selected by default, but those used by other auxiliary adapters (such as Google Classroom) are not.

  12. You may also add additional desired scopes for use with callGoogleAPI() by pressing the Add Custom... button.

  13. Press the Accept button. You will be sent to a new browser window or tab that may ask you to log in and authorize the credential request.

  14. Select and copy the code from the resulting page.

  15. Switch back to the Connect tab or window, paste the code, and press the OK button.

Creating a GOOGLE_EXTENDED OAuth2 Credential in Connect
  1. Navigate to Connect > OAuth2 Credentials.

  2. Select the project you want the credential associated with or select * to create a credential that may be used by all projects.

  3. Click the Add… button and select GOOGLE_EXTENDED.

  4. Give the credential a name (must be unique within the project.)

  5. Open the JSON file you received when you created the Service Account Key and copy and the paste the contents into the Google Service Account JSON field.

  6. Press the Create button.

Creating a G-Suite connection using GOOGLE OAuth2 Credential
  1. Insert the defineGoogleOAuthConnection() action.

  2. Enter the domain.

  3. After selecting the credentialName field, select OAuth2 Credential… in the combo box.

  4. Select the desired credential in the dialog and press OK.

Creating a G-Suite connection using GOOGLE_EXTENDED OAuth2 Credential
  1. Insert the defineGoogleExtendedOAuthConnection() action.

  2. Enter the domain.

  3. After selecting the credentialName field, select OAuth2 Credential… in the combo box.

  4. Select the desired credential in the dialog and press OK.

  5. Enter the Google User ID of the account you wish to use in the impersonateUserId field

  6. Enter an array of scopes to authorize for the connection. The set of scopes must be a subset of those that were authorized for use by the Service Account Key for the domain.

Deleting an OAuth Credential

Navigate to Connect > OAuth2 Credentials. Select the credential and press the Delete… button.

KeepnTrack Adapter Actions

Define a connection to a KeepnTrack server.

Property

Value

Description

url*

text, expression, variable

the url of the KeepnTrack REST service

db*

text, expression, variable

the name of the KeepnTrack database

username

text, expression, variable

username for authentication to the KeepnTrack REST service

password

password, string, expression, variable

password for authentication to the KeepnTrack REST service

options

expression, variable

A record or JavaScript object with a field for each additional option. Currently defined fields are connectTimeout and socketTime which require a numeric value from 1 to 2147483647 (0x7FFFFFFF) that represents the number of milliseconds for the timeout, and 0 representing no timeout.

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

conn = defineKeepnTrackConnection("https://customername.keepntrack.com/
    knt.cgi", "customernamedb", "adminuser@customername.net", <Password>)

Delete a KeepnTrack Facility Record by Id.

Property

Value

Description

connection*

expression, variable

the KeepnTrack connection definition

id*

text, expression, variable

the id of the KeepnTrack Facility to delete

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

deletedFacility = deleteKeepnTrackFacility(conn, facilityId)

Delete a KeepnTrack Person Record by Id.

Property

Value

Description

connection*

expression, variable

the KeepnTrack connection definition

id*

text, expression, variable

the id of the KeepnTrack Person to delete

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

deletedPerson = deleteKeepnTrackPerson(conn, specificUserID)

Get KeepnTrack Activity Records.

Property

Value

Description

connection*

expression, variable

the KeepnTrack connection definition

filter

text, expression, variable

Example Record or SQL WHERE clause used to filter the Records

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

allActivities = getKeepnTrackActivities(conn)

Get a KeepnTrack Activity Record by Id.

Property

Value

Description

connection*

expression, variable

the KeepnTrack connection definition

id*

text, expression, variable

the id of the KeepnTrack Activity to get

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

singleActivity = getKeepnTrackActivity(conn, activityId)

Get KeepnTrack Facility Records.

Property

Value

Description

connection*

expression, variable

the KeepnTrack connection definition

filter

text, expression, variable

Example Record or SQL WHERE clause used to filter the Records

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

allFacilities = getKeepnTrackFacilities(conn)

Get a KeepnTrack Facility Record by Id.

Property

Value

Description

connection*

expression, variable

the KeepnTrack connection definition

id*

text, expression, variable

the id of the KeepnTrack Facility to get

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

singleFacility = getKeepnTrackFacility(conn, facilityId)

Get a KeepnTrack Person Record by Id.

Property

Value

Description

connection*

expression, variable

the KeepnTrack connection definition

id*

text, expression, variable

the id of the KeepnTrack Person to get

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

personByID = getKeepnTrackPerson(conn, personID)

Get KeepnTrack Person Records.

Property

Value

Description

connection*

expression, variable

the KeepnTrack connection definition

filter

text, expression, variable

example Record or SQL WHERE clause used to filter the Records

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

persons = getKeepnTrackPersons(conn, \'Name_Last="Simpson"\')

Create/Update a KeepnTrack Facility Record.

Property

Value

Description

connection*

expression, variable

the KeepnTrack connection definition

record*

expression, variable

the Record to save

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

facilityTemplate = createRecord(true)
addRecordFieldValue(facilityTemplate, "FacilityId", "MYFACILITY", 
    false)
addRecordFieldValue(facilityTemplate, "Name", "Springfield 
    Elementary School", false)
newfacility = saveKeepnTrackFacility(conn, facilityTemplate)

Create/Update a KeepnTrack Person Record.

Property

Value

Description

connection*

expression, variable

the KeepnTrack connection definition

record*

expression, variable

the Record to save

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

# student
personTemplate = createRecord(true)
addRecordFieldValue(personTemplate, "Name_First", "Homer", false)
addRecordFieldValue(personTemplate, "Name_Last", "Simpson")
addRecordFieldValue(personTemplate, "IsStudent", "Y", false)
newPerson = saveKeepnTrackPerson(conn, personTemplate)
# staff
personTemplate = createRecord(true)
addRecordFieldValue(personTemplate, "Name_Prefix", "Mr.")
addRecordFieldValue(personTemplate, "Name_Suffix", "I", false)
addRecordFieldValue(personTemplate, "id", newPerson.id)
addRecordFieldValue(personTemplate, "IsStaff", "Y", true)
addRecordFieldValue(personTemplate, "Facilities", "1", true)
addRecordFieldValue(personTemplate, "Facilities", "3", true)
newPerson = saveKeepnTrackPerson(conn, personTemplate)

Required Fields on create: Name_First, Name_Last, and at least one of IsVisitor, IsVolunteer, IsStudent, IsStaff, or IsVendor must be set to 'Y'.

Field

Read-Only

Type

Description

Inactive

N

Logical(Y/N)

Whether this record is active or not. Missing means active.

EffectiveDate

N

Date(yyyy?mm?dd)

The date on which this record takes effect. Missing means “far distant past.

ExpirationDate

N

Date(yyyy?mm?dd)

The date on which this record expires. Missing means no expiration.

OnlineAppRecord

Y

Logical(Y/N)

Indicates if this Person record was created as an online application, which are filtered from Person lookup.

IsVisitor

N

Logical(Y/N)

Specifies whether this person is a visitor.

IsVolunteer

N

Logical(Y/N)

Specifies whether this person is a volunteer.

IsStudent

N

Logical(Y/N)

Specifies whether this person is a student.

IsStaff

N

Logical(Y/N)

Specifies whether this person is a staff member.

IsVendor

N

Logical(Y/N)

Specifies whether this person is a vendor.

PersonId

N

Text(24)

Account-assigned, unique identification number. Used for external interfaces. If empty on creation, the server assigns a unique value.

SignedInCount

Y

Unsigned

The number of times the person is currently signed in. Typically zero (not signed in) or one (signed in). Unimplemented.

Name_Prefix

N

Text(24)

Prefix to the person’s name. Examples include Ms., Dr., etc.

Name_First

N

Text(32)

The person’s given name.

Name_Last

N

Text(32)

The person’s surname name.

Name_Suffix

N

Text(24)

Suffix to the person’s name. Includes degrees, certifications, and affiliations.

Address_Organization

N

Text(64)

The name of the organization.

Address_Line1

N

Text(64)

The first line of the address.

Address_Line2

N

Text(64)

The second line of the address.

Address_City

N

Text(64)

The address’s city name.

Address_Region

N

Text(2)

Two-character state or province code. Link to the ‘Region’table.

Address_Postal_Code

N

Text

The address’s postal code. Not a link.

Address_Country

N

Text(2)

Two-character country code. Link to the ‘Country’table.

Address_Residence

N

Logical(Y/N)

Whether this is a resdential mailing address or not.

Address_Delivery_Instructions

N

Text

Instructions that may be passed along to the delivery person for this address.

Address_USPS_Validation

N

Logical(Y/N)

Whether USPS address validation has been attempted.

Address_UPS_Validation

N

Logical(Y/N)

Whether UPS address validation has been attempted.

Address_USPS_Validated_Address

N

Text(200)

The raw text returned by the USPS validation method. Missing if not validated.

Address_UPS_Validated_Address

N

Text(200)

The raw text returned by the USPS validation method. Missing if not validated.

HomePhone

N

Phone Number

The person’s home phone number.

WorkPhone

N

Phone Number

The person’s work phone number.

MobilePhone

N

Phone Number

The person’s mobile phone number.

FaxNumber

N

Phone Number

The person’s fax number.

EmailAddress

N

Email Recipient List

The person’s email address.

ConfirmationEmail

N

Email Recipient List

The email address that receives record update confirmation email messages.

Gender

N

Text(F/M)

The person’s gender.

Ethnicity

N

Text(16)

The person’s ethnicity. List of values determined from a preference.

BirthDate

N

Date(yyyy?mm?dd)

The person’s birth date.

SocialSecurityNumber

N

Text(9)

The person’s social security number.

PictureURL

Y

URL

The URL of this person's picture, if any.

CriminalConviction

N

Logical(Y/N)

Has this person been convicted of a crime?

MedicalReleaseonFile

N

Logical(Y/N)

Does this person have a medical release on file?

MedicalConditions

N

Text(200)

The known medical conditions for this person.

EmergencyContact

N

Text(100)

Free-text field containing emergency contact information.

Notes

N

Text(2500)

Free-text notes for this person.

CustomField1

N

Text(200)

A field that may be used for each customer’s specific needs.

CustomField2

N

Text(200)

A field that may be used for each customer’s specific needs.

CustomField3

N

Text(200)

A field that may be used for each customer’s specific needs.

CustomField4

N

Text(200)

A field that may be used for each customer’s specific needs.

CustomField5

N

Text(200)

A field that may be used for each customer’s specific needs.

CustomField6

N

Text(200)

A field that may be used for each customer’s specific needs.

CustomField7

N

Text(200)

A field that may be used for each customer’s specific needs.

CustomField8

N

Text(200)

A field that may be used for each customer’s specific needs.

DriverLicenseState

N

Text(2)

The two-letter postal code for the state issuing this person’s driver license.

DriverLicenseNumber

N

Text(24)

The person’s driver license number.

VehicleRegistrationState

N

Text(2)

The two-letter postal code for the state issuing this person’s vehicle registration.

VehicleRegistration Number

N

Text(12)

This person’s license plate number.

VehicleMake

N

Text(12)

The make of this person’s vehicle.

VehicleColor

N

Text(12)

The color of this person’s vehicle.

VolunteerId

N

Text(24)

For volunteers. Used to store a unique external id for this volunteer.

VolunteerType

N

Text(32)

For volunteers. The type of this volunteer. List determined from a preference.

VolunteerHours

Y

Minutes

For volunteers. The total number of volunteer minutes for this person.

FavoriteActivities

N

Text(1000)

For volunteers. Unused.

CheckoutAllowed

N

Logical(Y/N)

For students. Is this student permitted to be checked out?

Grade

N

Text(2)

For students. The grade this student is in.

Teacher

N

Text(32)

For students. The name of this student’s primary teacher.

Bus1

N

Text(12)

For students. This student’s bus number.

Bus2

N

Text(12)

For students. This student’s bus number.

StudentId

N

Text(24)

For students. A value used to link this student to the SIS.

Family Id

N

Text(24)

For students. A place to store information provided by the SIS.

StudentHours

Y

Minutes

For students. The number of minutes this person has been checked in as a student.

Homeroom

N

Text(12)

For students. The homeroom for this student.

AuthorizedToCheckout

N

Text(1000)

For students. The list of people who are authorized to checkout this student.

OnStaffDate

N

Date(yyyy?mm?dd)

For staff. The date this person joined the staff.

StaffId

N

Text(24)

For staff. A place to store information provided by the SIS.

StaffPosition

N

Text(32)

For staff. Text for the type of position this person holds. List determined from a preference.

StaffHours

Y

Minutes

For staff. The number of minutes this person has been checked in as staff.

Employer

N

Text(32)

For vendors. This vendor’s employer contact information.

VendorHours

Y

Minutes

For vendors. The number of minutes this vendor has been checked in.

CheckInAllowed

N

Logical(Y/N)

Is this person permitted to check in?

SecurityApproved

N

Logical(Y/N)

Has this person’s application been reviewed by an outside authority?

BackgroundCheckDate

N

Date(yyyy?mm?dd)

Date of this person’s most current background check. This background check is performed outside of KeepnTrack. May be missing.

SexOffenderCheckTime

Y

Time

The time this person was last checked against the sex offender database.

SexOffenderScore

Y

Unsigned

The score from the most recent sex offender check. Zero if no matches were found.

SexOffenderResults

Y

Text(1000)

Textual results from the most recent sex offender check.

CBCOffenderCheckTime

Y

Time

The time this person was last checked against criminal database. Unused.

CBCOffenderScore

Y

Unsigned

The score from the most recent criminal background check. Zero if no matches were found. Unused.

CBCOffenderResults

Y

Text(1000)

Textual results from the most recent criminal background check. Unused.

PrintBadge

N

Logical(Y/N)

Print a badge for this person on check in?

PersonalMessage

N

Text(250)

Text message to be displayed for this person on check in.

LoginId

N

Text(24)

An optional login id used by this person to access their information through a web interface.

Password

N

Password

Paired with the login id. Password authorizing this person to access their information.

Facilities

N

Id (Multi-value)

The ids of facilities to which this person is affiliated.

Field

Read-Only

Type

Description

FacilityId

N

Text(32)

A short character string identifying the facility.

Name

N

Text(32)

The name of the facility.

ContactPerson_Prefix

N

Text(24)

Prefix to the person’s name. Examples include Ms., Dr., etc.

ContactPerson_First

N

Text(32)

The person’s given name.

ContactPerson_Last

N

Text(32)

The person’s surname name.

ContactPerson_Suffix

N

Text(24)

Suffix to the person’s name. Includes degrees, certifications, and affiliations.

PhoneNumber

N

Phone Number

The main phone number for this facility.

FaxNumber

N

Phone Number

The fax number for this facility.

EmailAddress

N

Email Recipient List

The email address for the facility contact person.

Address_Organization

N

Text(64)

The name of the organization.

Address_Line1

N

Text(64)

The first line of the address.

Address_Line2

N

Text(64)

The second line of the address.

Address_City

N

Text(64)

The address’s city name.

Address_Region

N

Text(2)

Two-character state or province code. Link to the ‘Region’ table.

Address_PostalCode

N

Postal Code

The address’s postal code. Not a link.

Address_Country

N

Text(2)

Two-character country code. Link to the ‘Country’ table.

Address_Residence

N

Logical(Y/N)

Whether this is a resdential mailing address or not.

Address_DeliveryInstructions

N

Text

Instructions that may be passed along to the delivery person for this address.

Address_USPSValidation

N

Logical(Y/N)

Whether USPS address validation has been attempted.

Address_UPSValidation

N

Logical(Y/N)

Whether UPS address validation has been attempted.

Address_USPSValidatedAddress

N

Text(200)

The raw text returned by the USPS validation method. Nil if not validated.

Address_UPSValidatedAddress

N

Text(200)

The raw text returned by the USPS validation method. Nil if not validated.

TimeZone

N

Text(64)

The time zone in which this facility is located.

ScreenLogoURL

Y

URL

The URL of this accounts screen logo.

BadgeLogoURL

Y

URL

The URL of this accounts badge logo.

Field

Read-Only

Type

Description

Facility

Y

ID

The facility to which this activity is associated.

ActivityPerson

Y

ID

The person performing this activity. Applies only to activities for enrolled persons.

Student

Y

ID

The student on whose behalf these hours should be credited. Not implemented.

Parent

Y

ID

For a student being checked in or out, the parent who is doing the activity. Not implemented.

Source

Y

Text(8)

The client from which this Activity originated. Currently either Admin or Kiosk.

Classification

Y

Text(12)

The major classification for this Activity (e.g, Volunteer, Visitor, Student, Staff.)

ActivityGroup

Y

Text(32)

Previously, for non-timed activities, the event that triggered this activity (e.g. Activity, Early Dismissal, Late Arrival.) Obsolete.

ActivityType

Y

Text(32)

The type of activity this record represents. List determined from a preference.

Destination

Y

Text(32)

Specific location or activity associated with Activity Type.

TypeandDestination

Y

Text(64)

The text “Type (Destination)” for reporting and badges.

TransactionType

Y

Text(8)

One of 'Timed', 'In', or 'Out' specifying whether the transaction is timed or untimed.

StartTime

Y

Time

The time at which this activity started.

EndTime

Y

Time

The time at which this activity concluded.

Duration

Y

Minutes

The duration, in minutes, of this activity.

CheckinStation

Y

ID

Station at which this person checked in. Present only for activities handled by the Kiosk.

CheckinTime

Y

Time

Time at which this person checked out. Present only for activities handled by the Kiosk.

CheckoutStation

Y

ID

Station at which this person checked out. Present only for activities handled by the Kiosk.

CheckoutTime

Y

Time

Time at which this person checked out. Present only for activities handled by the Kiosk.

Login

Y

ID

For manually entered records, the administrator creating the record.

PersonId

Y

Text(24)

The Person Id of this Volunteer, Student, or Staff person. Used for sign out lookups. Applies only to enrolled persons.

PersonName_Prefix

Y

Text(24)

Prefix to the person’s name. Examples include Ms., Dr., etc.

PersonName_First

Y

Text(32)

The person’s given name.

PersonName_Last

Y

Text(32)

The person’s surname name.

PersonName_Suffix

Y

Text(24)

Suffix to the person’s name. Includes degrees, certifications, and affiliations.

VisitorId

Y

Text(32)

For visitors. The visitor's driver license number or other form of id.

VehicleMake

Y

Text(24)

For visitors. The visitor's vehicle make and color.

VehicleRegistration

Y

Text(16)

For visitors. The visitor's vehicle registration number.

BadgeNumber

Y

Text(8)

A unique number printed on the badge if a badge was printed at sign in.

JobNumber

Y

Text(32)

For staff. The government-required job number.

Donation

Y

Currency

The amount of a monetary donation.

Description

Y

Text(2500)

A textual description of this activity for manually entered records.

PictureURL

Y

URL

The URL of this person's picture, if any.

Notes

Y

Text(2500)

Notes, if any, associated with this activity.

FacilityName

Y

Text

The name of the facility where this activity took place.

LDAP Adapter Actions

Compare a Record field on the LDAP server.

Property

Value

Description

ldapConnection*

expression, variable

the LDAP connection

dn*

expression, variable

the DN of the Record

fieldName

text, expression, variable

name of the field to be compared

fieldValue

text, expression, variable

value of the field to be compared

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

mail = "testuser@test.local"
isEqual = compareLDAPField(conn, dn, "mail", mail)

if(isEqual == true) {
  log("mail = " + mail)
} else {
  log("mail <> " + mail)
}

Delete Record from the LDAP server.

Property

Value

Description

ldapConnection*

expression, variable

the LDAP connection

dn*

text, expression, variable

the DN of the Record

recursive

boolean, expression, variable

recursively delete subtree rooted at dn (default: false)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

queryExample = createRecord()
setRecordValue(queryExample,"loginDisabled","TRUE")
inactiveRecords = getLDAPRecords(conn,"ou=people,o=data","sub",
    "(loginDisabled=TRUE)")
forEach(inactive,inactiveRecords) {
  delStatus = deleteLDAPRecord(conn,inactive["@dn"])
  if(Boolean(delStatus)) {
    log("Deletion Successful!")
  } else {
    log("Deletion Failed!")
  }
}

Get changed Records from an Active Directory server.

Property

Value

Description

ldapConnection*

expression, variable

the LDAP connection

baseDn*

text, expression, variable

the search base dn

scope*

choice (sub, one, base), text, expression, variable

the search scope

filter*

text, expression, variable

the search filter expression or an example Record

attributes

text, expression, variable

comma separated list of attributes to return (default: none)

cookie

expression, variable

cookie returned from previous invocation (default: none, which will return all objects)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

cookieFile = "/cookie/studentsAD.cookie"
fileExists = isFile(cookieFile)

if(!fileExists) {
  saveToFile(cookieFile, "")
} else {
}

varCookie = loadFileAsBytes(cookieFile)

# getRecords
moreResults = 1
while(moreResults != 0) {
  recordChanges = getLDAPADChanges(conn, "OU=People,DC=test,DC=local", 
    "sub", "(employeeType=Student)", "cn,sn,givenName", varCookie)
  moreResults = 0

  if(recordChanges) {
    log("Count: " + recordChanges.length)
  } else {
  }

  # foreach
  forEach(recordChange, recordChanges) {
    if(recordChange.objectClass == "cookie") {
      saveToFile(cookieFile, recordChange.cookie)
      moreResults = Number(recordChange.moreResults)
    } else {
      record = getLDAPRecord(conn, recordChange['@dn'], "*")

      # transformations
      if(!record) {
        continue()
      } else {
        log("Name information has changed: " + record.sn + " 
            " + record.givenName)
      }
    }
  }
}

Gets password stored by RapidIdentity password filter from a Record in Active Directory.

Property

Value

Description

ldapConnection*

expression, variable

the LDAP connection

dn*

text, expression, variable

the DN of the Record

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

password = "password1"
dn = "CN=Test User,OU=People,DC=test,DC=local"
userPwd = getLDAPADPassword(conn, dn)

if(userPwd && userPwd == password) {
  log("User has not changed their default password!")
} else {
  log("Password has been changed from default.")
}
 

Get a Record from the LDAP server.

Property

Value

Description

ldapConnection*

expression, variable

the LDAP connection

dn*

expression, variable

the DN of the Record

attributes

text, expression, variable

comma separated list of attributes to return (default: none)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

resultRecord = getLDAPRecord(conn,"cn=jdoe,ou=people,o=data","givenName")

Get Records from the LDAP server.

Property

Value

Description

ldapConnection*

expression, variable

the LDAP connection

baseDn*

text, expression, variable

the search base dn

scope*

choice (sub, one, base), text, expression, variable

the search scope

filter*

text, expression, variable

the search filter expression or an example Record

maxResults

expression, variable

maximum number of Records to return (default: the server maximum)

attributes

text, expression, variable

comma separated list of attributes to return (default: none)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

inactiveRecords = getLDAPRecords(conn,"o=data","sub",
    "(&(objectclass=inetOrgPerson)(loginDisabled=TRUE))")
log("There are " + inactiveRecords.length + " inactive records.")

Returns the hostname or IP address of the LDAP server being used as the metadirectory.

Property

Value

Description

returnVariable

expression, variable

Name of the variable to be assigned to the return value.

Example

LDAP = getCurrentLDAPServerAddress()
log(LDAP)

Gets universal password from a Record on a Novell eDirectory LDAP server.

Property

Value

Description

ldapConnection*

expression, variable

the LDAP connection

dn*

text, expression, variable

the DN of the Record

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

up = getLDAPUniversalPassword(conn, "cn=user1,ou=people,o=data")
log("The password is " + up + ".")

Get changed Records from an OpenLDAP server.

Property

Value

Description

ldapConnection*

expression, variable

the LDAP connection

logDN*

text, expression, variable

the dn of the accesslog

baseDn*

text, expression, variable

the search base dn

scope*

choice (sub, one, base), text, expression, variable

the search scope

classes

text, expression, variable

comma separated list of classes to return (default: none)

attributes

text, expression, variable

comma separated list of attributes to check/return (default: all)

cookie

expression, variable

cookie returned from previous invocation (default: none, which will return all objects)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

cookieFile = "/cookie/studentsOpenLDAP.cookie"
fileExists = isFile(cookieFile)

if(!fileExists) {
  saveToFile(cookieFile, "")
} else {
}

varCookie = loadFileAsString(cookieFile)

# getRecords
moreResults = 1
while(moreResults != 0) {
  recordChanges = getOpenLDAPChanges(conn, "o=changelog", 
    "ou=people,ou=data,o=meta", "sub", "inetOrgPerson", 
    "cn,sn,givenName", varCookie)
  moreResults = 0

  if(recordChanges) {
    log("Count: " + recordChanges.length)
  } else {
  }

# foreach
  forEach(recordChange, recordChanges) {
    if(recordChange.objectClass == "cookie") {
      saveToFile(cookieFile, recordChange.cookie)
      varCookie = recordChange.cookie
      moreResults = recordChange.moreResults
    } else {
      record = getLDAPRecord(conn, recordChange['@dn'], "*")

# transformations
      if(!record || record['employeeType'] != "Student") {
        continue()
      } else {
        log("Student record has changed: " + record['@dn'])
        log(" Change type: " + recordChange.changeType)
        log(" Added attribute values: " + recordChange.added)
        log(" Deleted attribute values: " + recordChange.deleted)
      }
    }
  }
}

Gets password stored by RapidIdentity password filter from a Record in OpenLDAP.

Property

Value

Description

ldapConnection*

expression, variable

the LDAP connection

dn*

text, expression, variable

the DN of the Record

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

password = "password1"
dn = "CN=Test User,OU=People,DC=test,DC=local"
userPwd = getOpenLDAPPassword(conn, dn)

if(userPwd && userPwd == password) {
  log("User has not changed their default password!")
} else {
  log("Password has been changed from default.")
}

Get changed Records from an UnboundID-DS server.

Property

Value

Description

ldapConnection*

expression, variable

the LDAP connection

baseDn*

text, expression, variable

the search base dn

scope*

choice (sub, one, base), text, expression, variable

the search scope

classes

text, expression, variable

comma separated list of classes to return (default: none)

attributes

text, expression, variable

comma separated list of attributes to check/return (default: all)

cookie

expression, variable

cookie returned from previous invocation (default: none, which will return all objects)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

cookieFile = "/cookie/studentsUnboundId.cookie"
fileExists = isFile(cookieFile)

if(!fileExists) {
  saveToFile(cookieFile, "")
} else {
}

varCookie = loadFileAsBytes(cookieFile)

# getRecords
moreResults = 1

while(moreResults != 0) {
  recordChanges = getUnboundIDDSChanges(conn, 
    "ou=people,ou=Accounts,dc=meta", "sub", "inetOrgPerson", 
    "cn,sn,givenName", varCookie)
  moreResults = 0

  if(recordChanges) {
    log("Count: " + recordChanges.length)
  } else {
  }

  # foreach
  forEach(recordChange, recordChanges) {
    if(recordChange.objectClass == "cookie") {
      saveToFile(cookieFile, recordChange.cookie)
      varCookie = recordChange.cookie
      moreResults = recordChange.moreResults
    } else {
      record = getLDAPRecord(conn, recordChange['@dn'], "*")

      # transformations
      if(!record || record['employeeType'] != "Student") {
        continue()
      } else {
        log("Student record has changed: " + record['@dn'])
        log(" Change type: " + recordChange.changeType)
        log(" Added attribute values: " + recordChange.added)
        log(" Deleted attribute values: " + recordChange.deleted)
      }
    }
  }
}

Gets password stored by RapidIdentity password filter from a Record in UnboundIDDS.

Property

Value

Description

ldapConnection*

expression, variable

the LDAP connection

dn*

text, expression, variable

the DN of the Record

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

password = "password1"
dn = "CN=Test User,OU=People,DC=test,DC=local"
userPwd = getUnboundIDDSPassword(conn, dn)

if(userPwd && userPwd == password) {
  log("User has not changed their default password!")
} else {
  log("Password has been changed from default.")
}

Modify a Record on the LDAP server.

Property

Value

Description

ldapConnection*

expression, variable

the LDAP connection

dn*

expression, variable

the DN of the Record

removeRecord

expression, variable

a Record containing attributes/values to be removed

addRecord

expression, variable

a Record containing attribute values to be added

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

addRecord = createRecord()
removeRecord = createRecord()
setRecordFieldValue(addRecord, "objectClass", "customObjectClass")
addRecordField(removeRecord, "telephoneNumber")
dn = "cn=Test User,ou=People,o=test"
result = modifyLDAPRecord(conn, dn, removeRecord, addRecord)
if(result) {
  log("Record modified - Added " + addRecord)
  log("Record modified - Removed " + removeRecord)
} else {
  log("Record not modified - " + dn)

Open a connection to an LDAP server.

Property

Value

Description

ldapHost*

text, expression, variable

the host name or IP address of the LDAP server

ldapPort

expression, variable

the TCP port of the LDAP server (default: 636 if using SSL, 389 otherwise.)

useSSL

boolean, expression, variable

use SSL/TLS (default: false.)

userDn

text, expression, variable

the user DN for authenticating to the LDAP server

password

password, string, expression, variable

the user password for authenticating to the LDAP server

returnVariable

expression, variable

name of the variable to be assigned to the return value

extraProperties

expression, variable

Defined below as applicable

Table 80. Booleans

Property

Description

abandonOnTimeout

Indicates whether the LDAP SDK should attempt to abandon any request for which no response is received in the maximum response timeout period

captureConnectStackTrace

Indicates whether the LDAP SDK should capture a thread stack trace for each attempt made to establish a connection

useKeepAlive

Indicates whether to use the SO_KEEPALIVE option for the underlying sockets used by associated connections

useTCPNoDelay

Indicates whether to use the TCP_NODELAY option for the underlying sockets used by associated connections

followReferrals

Indicates whether associated connections should attempt to follow any referrals that they encounter

usePassiveSSLSocketVerifier

If true, corresponds to RapidIdentity setting a SSLSocketVerifier using a passive SSL socket verifier with the connection timeout milliseconds



Table 81. Integers

Property

Description

connectTimeoutMillis

The maximum length of time in milliseconds that a connection attempt should be allowed to continue before giving up

useLinger

The SO_LINGER timeout for the underlying sockets used by associated connections

referralHopLimit

The maximum number of hops that a connection should take when trying to follow a referral

responseTimeoutMillis

The maximum length of time in milliseconds that an operation should be allowed to block while waiting for a response from the server



Example

conn = openLDAPConnection("server1.company.com","636",true,
    "cn=admin,o=company","password")

if(outputLDAP) {
  log("LDAP connection successful!")
} else {
  log("LDAP connection failed!")
}

Open a connection to the MetaDirectory LDAP in scenarios where a Cloud Tenant's SharedGlobals.properties file is not populated in RapidIdentity Cloud versions 2021.4.9 or higher

Property

Value

Description

Assign To

Expression

Choose the variable type to assign the action to

Example

Input Parameters:
{
     sessionMeta = openMetadirLDAPConnection()
     if (sessionMeta) {
          log("Connection to MetaDirectory was successful: " + sessionMeta, "DEBUG")
     } else {
          log("Connection to Metadirectory failed: " + sessionMeta, "ERROR")
     }
     if (sessionMeta) {
          close(sessionMeta)
     } else {
     }
}

Open Change Iterator for OpenLDAP server.

Property

Value

Description

ldapConnection*

expression, variable

the LDAP connection

logDN*

text, expression, variable

the dn of the accesslog

scope*

choice (sub, one, base), text, expression, variable

the search scope

classes

text, expression, variable

comma separated list of classes to return (default: none)

attributes

text, expression, variable

comma separated list of attributes to check/return (default: all)

cookieFile*

text, expression, variable

path to file to load/save cookie

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

cookieFile = "/cookie/studentsOpenLDAP.cookie"
recordChanges = openOpenLDAPChangeIterator(conn, 
    "o=changelog", "ou=people,ou=data,o=meta", "sub", 
    "inetOrgPerson", "cn,sn,givenName", cookieFile)

forEach(recordChange, recordChanges) {
  record = getLDAPRecord(conn, recordChange['@dn'], "*")

  # transformations
  if(!record || record['employeeType'] != "Student") {
    continue()
  } else {
    log("Student record has changed: " + record['@dn'])
    log(" Change type: " + recordChange.changeType)
    log(" Added attribute values: " + recordChange.added)
    log(" Deleted attribute values: " + recordChange.deleted)
  }
}

Open Record Iterator for OpenLDAP server to sort large sets of records.

Property

Value

Description

filter*

text, expression, password, variable

the search filter expression or an example record

pageSize

expression, variable

the preferred number of records to fetch at a time from LDAP server. (default: 100)

attributes

text, expression, password, variable

comma-separated list of attributes to check/return (default: none)

sortKey

text, expression, password, variable

comma-separated list of attributes to use as sort keys, with optional +/- to indicate sort direction. (default: unsorted)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

sessionLDAP = openLDAPConnection("10.100.70.28", "636", true, 
    "cn=doc-admin,ou=users,ou=system,o=meta",<Password>)

# Record Iterator
i = 0
recordChanges = openLDAPRecordIterator(sessionLDAP, 
    "ou=students,ou=people,ou=data,o=meta", "sub", 
    "(employeeType=Student)","cn")

recordIterator: forEach(recordChange, recordChanges) {
  log(recordChanges)
  i = i + 1

  if(i >= 30) {
    break(recordIterator)
  } else {
  }
}

# Close
close(sessionLDAP)

Open Change Iterator for an UnboundID-DS server.

Property

Value

Description

ldapConnection*

expression, variable

the LDAP connection

baseDn*

text, expression, variable

the search base dn

scope*

choice (sub, one, base), text, expression, variable

the search scope

classes

text, expression, variable

comma separated list of classes to return (default: none)

attributes

text, expression, variable

comma separated list of attributes to check/return (default: all)

cookieFile*

text, expression, variable

path to file to load/save cookie

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

cookieFile = "/cookie/studentsUnboundId.cookie"
recordChanges = openUnboundIDDSChangeIterator(conn, 
    "ou=people,ou=data,o=meta", "sub", "inetOrgPerson", 
    "cn,sn,givenName", cookieFile)

forEach(recordChange, recordChanges) {
  record = getLDAPRecord(conn, recordChange['@dn'], "*")

  # transformations
  if(!record || record['employeeType'] != "Student") {
    continue()
  } else {
    log("Student record has changed: " + record['@dn'])
    log(" Change type: " + recordChange.changeType)
    log(" Added attribute values: " + recordChange.added)
    log(" Deleted attribute values: " + recordChange.deleted)
  }
}

Rename and/or move object on the LDAP server.

Property

Value

Description

ldapConnection*

expression, variable

the LDAP connection

oldDn*

text, expression, variable

the original DN of the object

newDn*

text, expression, variable

the new DN of the object

keepOldRdn*

boolean, expression, variable

preserve that attribute values used by the old dn (default: false.)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

oldDN = "cn=jdoe,ou=people,o=data"
newDN = "cn=xjdoe,ou=inactive,ou=people,o=data"
renameResult = renameLDAPRecord(conn, oldDN,newDN,false)

if(renameResult) {
  log(LDAP object rename successful!)
} else {
  log(LDAP object rename failed!)
}
  

Save a Record to the LDAP server.

Property

Value

Description

ldapConnection*

expression, variable

the LDAP connection

record*

expression, variable

the Record to save - must contain the dn in the @dn field

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

myRecord = createRecord()
setRecordFieldValue(myRecord,"@dn", "cn=jdoe,ou=people,o=data")
setRecordFieldValue(myRecord,"objectclass", "inetOrgPerson")
setRecordFieldValue(myRecord,"givenName", "John")
setRecordFieldValue(myRecord,"sn", "Doe")
saveResult = saveLDAPRecord(conn, myRecord)

if(Boolean(saveResult)) {
  log("Save Successful!")
} else {
  log("Save Failed!")
}

Sets password on a Record on the LDAP server.

Property

Value

Description

ldapConnection*

expression, variable

the LDAP connection

dn*

text, expression, variable

the DN of the Record

password*

password, string, expression, variable

the password

oldPassword

password, string, expression, variable

the old password (default: none)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

result = setLDAPPassword(conn, "cn=user1,cn=Users,dc=acme,dc=org", 
    <password>)
# Input from text file
textInput = openDelimitedTextInput("/root/senators.csv",
      "LastName,FirstName,Title,Email,Phone,Description")

# Open LDAP connection (SSL)
outputLDAP = openLDAPConnection("ldap.company.com",true,"cn=admin,o=company",
    "P@ssw0rD")

# Loop through input records
forEach(inputRecord,textInput) {
  # Schema mapping
  renameRecordFields(inputRecord, "LastName, FirstName, Title, Email, Phone", 
      "sn, givenName, title, mail, telephoneNumber")
  cn = inputRecord['givenName'].substr(0,1) + inputRecord['sn']
  setRecordValue(inputRecord,"@dn","cn=" + cn + ",ou=people,o=data")

  # Check for existance in target
  queryRecord = createRecord()
  setRecordFieldValue(queryRecord,"cn",cn)
  matchingRecords = getLDAPRecords(outputLDAP,"ou=people,o=data","sub",queryRecord)
  if(matchingRecords.length == 1) {
    # Match found. Add DN to current record from source.
    matchingKeyValue = getRecordFieldValue(matchingRecords[0],"@dn")
    setRecordFieldValue(inputRecord,"@dn",matchingKeyValue)
  } else {
    # No match found. Add new object.
    setRecordValue(inputRecord,"objectclass","inetorgperson")
    setRecordValue(inputRecord,"userPassword",inputRecord['sn'])
  }

  # Write (add/modify) record to LDAP
  saveLDAPRecord(outputLDAP,inputRecord)
}

# Close LDAP and file connections
close(outputLDAP)
close(textInput)
MackinVIA Adapter Actions

Define a connection to a MackinVIA Server.

Property

Value

Description

url*

text, expression, variable

the Base URL of the MackinVIA REST service

apiUsername*

text, expression, variable

API userName for authentication to the MackinVIA REST service

apiKey*

password, string, expression, variable

Secret key for authentication to the MackinVIA REST service

options

expression, variable

A record or JavaScript object with a field for each additional option. Currently defined fields are connectTimeout and socketTime which require a numeric value from 1 to 2147483647 (0x7FFFFFFF) that represents the number of milliseconds for the timeout, and 0 representing no timeout.

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

Global.MackinURL = "https://dss.mackinvia.com/"
Global.MackinApiUser = "MyMackinAdmin"
Global.MackinApiKey = <password>
conn = defineMackinVIAConnection(Global.MackinURL, 
    Global.MackinApiUser, Global.MackinApiKey)

Delete a given MackinVIA User.

Property

Value

Description

connection*

expression, variable

the MackinVIA connection definition

accountID*

text, expression, variable

The accountID of the User

userName*

text, expression, variable

The userName of the User

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

deleted = deleteMackinVIAUser(conn, Global.MackinAccountId, username)

Get a given MackinVIA User.

Property

Value

Description

connection*

expression, variable

the MackinVIA connection definition

accountID*

text, expression, variable

The accountID of the User

userName*

text, expression, variable

The userName of the User

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

userRecord = getMackinVIAUser(conn, Global.MackinAccountId, username)

Get MackinVIA Users.

Property

Value

Description

connection*

expression, variable

the MackinVIA connection definition

accountID*

text, expression, variable

The accountID of the s

lastNamePrefix

text, expression, variable

Lastname prefix of Users

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

userRecords = getMackinVIAUsers(conn, Global.MackinAccountId, "Jones")

Move a given MackinVIA User to a different Account.

Property

Value

Description

connection*

expression, variable

the MackinVIA connection definition

accountID*

text, expression, variable

The original accountID of the User

userName*

text, expression, variable

The userName of the User

newAccountID*

text, expression, variable

The new accountID of the User

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

moved = moveMackinVIAUser(conn, Global.MackinAccountId, username, 
    Global.OtherMackinAccountId)

Rename a given MackinVIA User.

Property

Value

Description

connection*

expression, variable

the MackinVIA connection definition

accountID*

text, expression, variable

The accountID of the User

userName*

text, expression, variable

The original userName of the User

newUserName*

text, expression, variable

The new userName of the User

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

renamed = renameMackinVIAUser(conn, Global.MackinAccountId, 
    username, newUsername)

Create or update a given MackinVIA User.

Property

Value

Description

connection*

expression, variable

the MackinVIA connection definition

record*

expression, variable

the User record

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

userTemplate = createRecord(false)
setRecordFieldValue(userTemplate, "accountID", Global.MackinAccountId)
setRecordFieldValue(userTemplate, "userName", username)
setRecordFieldValue(userTemplate, "password",<Password>)
created = saveMackinVIAUser(conn, userTemplate)
Supported MackinVIA User Record Fields

Field

Read-Only

Description

accountID

Y

the account id of the school or organization the user is associated with

userName

N

the user name of the User (required for create)

password

N

the User password (required for create / write-only)

lastName

N

the last name of the User

firstName

N

the first name of the User

middleName

N

the middle name of the User

active

N

“True” if the User is active, “False” otherwise

emailAddress

N

the email address of the User

Notes Adapter Actions

Enter a request in the Administration Requests database to delete a Notes Group.

Property

Value

Description

notesConnection*

expression, variable

the Notes Agent connection

adminpServer

text, expression, variable

the name of the server hosting the AdminP process (default: the agent server)

name*

text, expression, variable

the name of the Group to delete

immediate

boolean, expression, variable

delete Group from Domino Directory immediately (default: false)

deleteWindowsGroup

boolean, expression, variable

also delete the corresponding Windows Group (default: false)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

deleted = adminpDeleteNotesGroup(sessionNotes, "cn=server1/o=org", 
    "MyGroup", true)

Enter a request in the Administration Requests database to delete a Notes User.

Property

Value

Description

notesConnection*

expression, variable

the Notes Agent connection

adminpServer

text, expression, variable

the name of the server hosting the AdminP process (default: the agent server)

name*

text, expression, variable

the full hierarchical name of the Notes User to delete

immediate

boolean, expression, variable

delete Notes User from Domino Directory immediately (default: false)

mailFileAction*

choice (DELETE_ALL, DELETE_HOME, DELETE_NONE), text, expression, variable

disposition of the Notes User's mail file

denyGroup

text, expression, variable

name of an existing deny access group to which the name of the Notes User is added (default: none)

deleteWindowsUser

boolean, expression, variable

also delete the corresponding Windows User (default: false)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

deleted = adminpDeleteNotesUser(sessionNotes, "cn=server1/o=org", 
    "John Doe", true, "DELETE_HOME", false)

Enter a request in the Administration Requests database to move a Notes User's mail file.

Property

Value

Description

notesConnection*

expression, variable

the Notes Agent connection

adminpServer

text, expression, variable

the name of the server hosting the AdminP process (default: the agent server)

username*

text, expression, variable

the full hierarchical name of the Notes User to be moved

newHomeServer*

text, expression, variable

the name of the new home mail server

newHomeServerMailPath*

text, expression, variable

the path of the mail file on the new home mail server

useSCOS

boolean, expression, variable

the new mail file makes use of the shared mail feature (default: false)

newClusterReplicas

expression, variable

array of cluster replica server names and paths (e.g. [server1, server1Path, ....])

deleteOldClusterReplicas

boolean, expression, variable

delete old cluster replicas (default: false)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

result = adminpMoveNotesMailUser(sessionNotes, "cn=server1/o=org", 
    "John Doe", "cn=server2/o=org", "/local/notesdata/jdoe.id", 
    false, false, false)

Enter a request in the Administration Requests database to move a Notes User's roaming files to another server.

Property

Value

Description

notesConnection*

expression, variable

the Notes Agent connection

adminpServer

text, expression, variable

the name of the server hosting the AdminP process (default: the agent server)

username*

text, expression, variable

the full hierarchical name of the Notes User to be moved

newServer*

text, expression, variable

the new roaming server

newServerSubdir*

text, expression, variable

the new path on the roaming server

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

status = adminpMoveNotesRoamingUser(sessionNotes, 
    "cn=server1/o=org", "John Doe", "cn=server2/o=org", 
    "/local/notesdata/roaming/jdoe")

Enter requests in the Administration Requests database to move and optionally rename a Notes User's name in the hierarchy.

Property

Value

Description

notesConnection*

expression, variable

the Notes Agent connection

adminpServer

text, expression, variable

the name of the server hosting the AdminP process (default: the agent server)

username*

text, expression, variable

the current full hierarchical name of the Notes User to be moved

oldCertifier*

expression, variable

the current Certifier (defined with defineNotesCertifier)

newCertifier*

expression, variable

the new Certifier (defined with defineNotesCertifier)

newLastName

text, expression, variable

the new last name if Notes User is also to be renamed (default: no change)

newFirstName

text, expression, variable

the new first name if Notes User is also to be renamed (default: no change)

newMiddleInitial

text, expression, variable

the new middle initial if Notes User is also to be renamed (default: no change)

newOrgUnit

text, expression, variable

the new org unit if Notes User is also to be renamed (default: no change)

newAltCommonName

text, expression, variable

the new alternate common name if Notes User is also to be renamed (default: no change)

newAltOrgUnit

text, expression, variable

the new alternate org unit if Notes User is also to be renamed (default: no change)

newAltLanguage

text, expression, variable

the new alternate language if Notes User is also to be renamed (default: no change)

renameWindowsUser

boolean, expression, variable

also rename the corresponding Windows Notes User (default: false)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

status = adminpMoveNotesUserInHierarchy(sessionNotes, 
    "cn=server1/o=org", "John Doe", cert1, cert2, "movetest")

Enter a request in the Administration Requests database to recertify a Notes User.

Property

Value

Description

notesConnection*

expression, variable

the Notes Agent connection

adminpServer

text, expression, variable

the name of the server hosting the AdminP process (default: the agent server)

username*

text, expression, variable

the full hierarchical name of the Notes User to be recertified

certifier*

expression, variable

the Certifier (defined with defineNotesCertifier)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

status = adminpRecertifyNotesUser(sessionNotes, "cn=server1/o=org", 
    "John Doe", cert1)

Enter a request in the Administration Requests database to rename a Notes Group.

Property

Value

Description

notesConnection*

expression, variable

the Notes Agent connection

adminpServer

text, expression, variable

the name of the server hosting the AdminP process (default: the agent server)

oldName*

text, expression, variable

the current Notes Group name

newName*

text, expression, variable

the new Notes Group name

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

status = adminpRenameNotesGroup(sessionNotes, "cn=server1/o=org", 
    "MyGroup, "YourGroup")

Enter a request in the Administration Requests database to rename a Notes User.

Property

Value

Description

notesConnection*

expression, variable

the Notes Agent connection

adminpServer

text, expression, variable

the name of the server hosting the AdminP process (default: the agent server)

username*

text, expression, variable

the current full hierarchical name of the Notes User to be renamed

certifier*

expression, variable

the Certifier (defined with defineNotesCertifier)

newLastName

text, expression, variable

the new last name (default: no change)

newFirstName

text, expression, variable

the new first name (default: no change)

newMiddleInitial

text, expression, variable

the new middle initial (default: no change)

newOrgUnit

text, expression, variable

the new org unit (default: no change)

newAltCommonName

text, expression, variable

the new alternate common name (default: no change)

newAltOrgUnit

text, expression, variable

the new alternate org unit (default: no change)

newAltLanguage

text, expression, variable

the new alternate language (default: no change)

renameWindowsUser

boolean, expression, variable

also rename corresponding Windows User (default: false)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

status = adminpRenameNotesUser(sessionNotes, "cn=server1/o=org", 
    "John Doe", cert1, "Doh", "Jack")

Enter a request in the Administration Requests database to rename a Notes Web User.

Property

Value

Description

notesConnection*

expression, variable

the Notes Agent connection

adminpServer

text, expression, variable

the name of the server hosting the AdminP process (default: the agent server)

username*

text, expression, variable

the current full hierarchical name of the Notes User to be renamed

newFullName

text, expression, variable

the new full hierarchical name (default: no change)

newLastName

text, expression, variable

the new last name (default: no change)

newFirstName

text, expression, variable

the new first name (default: no change)

newMiddleInitial

text, expression, variable

the new middle initial (default: no change)

newShortName

text, expression, variable

the new short name (default: no change)

newInternetAddress

text, expression, variable

the new internet address (default: no change)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

status = adminpRenameNotesWebUser(sessionNotes, "cn=server1/o=org", 
    "John Doe", "Jack Doh", "Doh", "Jack")

Enter a request in the Administration Requests database to change the password management settings of a Notes User.

Property

Value

Description

notesConnection*

expression, variable

the Notes Agent connection

adminpServer

text, expression, variable

the name of the server hosting the AdminP process (default: the agent server)

username*

text, expression, variable

the full hierarchical name of the Notes User to be renamed

notesPasswordCheckSetting

choice(CHECK,DONTCHECK,LOCKOUT), text, expression, variable

the check password setting (default: no change)

notesPasswordChangeInterval

expression, variable

the password change required interval (default: no change)

notesPasswordGracePeriod

expression, variable

the password change grace period (default: no change)

internetPasswordForceChange

boolean, expression, variable

force the user to change the password on next login (default: no change)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

status = adminpSetNotesUserPasswordSettings(sessionNotes, 
    "cn=server1/o=org", "John Doe", ""LOCKOUT")

Enter a request in the Administration Requests database to upgrade a Notes User from a flat ID to a hierarchical ID.

Property

Value

Description

notesConnection*

expression, variable

the Notes Agent connection

adminpServer

text, expression, variable

the name of the server hosting the AdminP process (default: the agent server)

username*

text, expression, variable

current username

certifier*

expression, variable

the Certifier (defined with defineNotesCertifier)

newOrgUnit

text, expression, variable

the new org unit

newAltCommonName

text, expression, variable

the new alternate common name

newAltOrgUnit

text, expression, variable

the new alternate org unit

newAltLanguage

text, expression, variable

the new alternate language

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

status = adminpUpgradeNotesUserToHierarchical(sessionNotes, 
    "cn=server1/o=org", "John Doe", cert1)

Build a notes FullName.

Property

Value

Description

notesConnection*

expression, variable

the Notes Agent connection

certifier*

expression, variable

the Certifier (defined with defineNotesCertifier)

lastName*

text, expression, variable

the last name

firstName

text, expression, variable

the first name

middleInitial

text, expression, variable

the middle initial

ou

text, expression, variable

additional OU beyond the certifier

returnVariable

expression, variable

name of the variable to be assigned to the return value

Note

fullName = buildNotesFullName(sessionNotes, cert1, "Doe", "John")

Compare the HTTPPassword field for a Notes Record.

Property

Value

Description

notesConnection*

expression, variable

the Notes Agent connection

db*

text, expression, variable

the database name

unid*

text, expression, variable

the UNID of the record

password*

password, string, expression, variable

the password

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

passwordsEqual = compareNotesHTTPPassword(sessionNotes, "names", 
    userRecord['@UNID'], <Password>)

Define a connection to a Notes Agent.

Property

Value

Description

host*

text, expression, variable

the host name or ip address of the Domino server hosting the RapidIdentity Notes Agent

port

expression, variable

the https port of the Domino server hosting the RapidIdentity Notes Agent (default: 443)

adminUser*

text, expression, variable

the login name of Notes administrative User

password*

password, string, expression, variable

the password for adminUser

options

expression, variable

A record or JavaScript object with a field for each additional option. Currently defined fields are connectTimeout and socketTime which require a numeric value from 1 to 2147483647 (0x7FFFFFFF) that represents the number of milliseconds for the timeout, and 0 representing no timeout.

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

Global.notesAgentServer = "mynotesserver"
Global.notesAdminUser = "administrator"
Global.notesAdminPwd = <Password>
sessionNotes = defineNotesAgentConnection(Global.notesAgentServer, 
    Global.notesAdminUser,<Password>)

Define Notes certifier.

Property

Value

Description

certifierName*

text, expression, variable

the name of the notes certifier (e.g. o=myorg)

certifierIDFile

text, expression, variable

the full path on the agent server of idfile for the notes certifier (default: none, use Certificate Authority instead)

certifierPassword

password, string, expression, variable

the password for certifierIDFile (default: none)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

cert0 = defineNotesCertifier("o=org", "/local/notesdata/org.id",
    <Password>)
cert1 = defineNotesCertifier("ou=orgunit1/o=org", 
    "/local/notesdata/orgunit1.id",<Password>)
cert2 = defineNotesCertifier("ou=orgunit2/o=org", 
    "/local/notesdata/orgunit2.id",<Password>)

Delete an existing Notes Record.

Property

Value

Description

notesConnection*

expression, variable

the Notes Agent connection

db*

text, expression, variable

the database name

unid*

text, expression, variable

the UNID of the record

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

status = deleteNotesRecord(sessionNotes, "mytestdb", record['@UNID'])

Get an existing Notes Record.

Property

Value

Description

notesConnection*

expression, variable

the Notes Agent connection

db*

text, expression, variable

the database name

unid*

text, expression, variable

the UNID of the record

attributes

text, expression, variable

comma separated list of attributes to return (default: none)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

group = getNotesRecord(sessionNotes, "names", record['@UNID'], "+")

Get Notes Records.

Property

Value

Description

notesConnection*

expression, variable

the Notes Agent connection

db*

text, expression, variable

the database name

filter

text, expression, variable

the search filter formula (default: all records)

maxResults

expression, variable

maximum number of Records to return (default: the server maximum)

attributes

text, expression, variable

comma separated list of attributes to return (default: none)

since

expression, variable

Date object - return only records created or modified since (default: none)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

people = getNotesRecords(sessionNotes, "names", 'Type="Person"', 5)

Parse a Notes name.

Property

Value

Description

notesConnection*

expression, variable

the Notes Agent connection

name*

text, expression, variable

the name to parse

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

parsedUsernameRecord = parseNotesName(sessionNotes, username)

Registers a new Notes User.

Property

Value

Description

notesConnection*

expression, variable

the Notes Agent connection

record*

expression, variable

Record containing the registration properties

certifier*

expression, variable

the Certifier (defined with defineNotesCertifier)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

userTemplate = createRecord()
setRecordFieldValue(userTemplate, "FirstName", "John")
setRecordFieldValue(userTemplate, "LastName", "Doe")
setRecordFieldValue(userTemplate, "IdFile", "/local/notesdata/JohnDoe.id")
setRecordFieldValue(userTemplate, "Password",<Password>)
setRecordFieldValue(userTemplate, "MailServer", "cn=server1/o=org")
setRecordFieldValue(userTemplate, "MailDBPath", "mail/JohnDoe")
setRecordFieldValue(userTemplate, "MailSystem", 1)
user1 = registerNewNotesUser(sessionNotes, userTemplate, cert1)

Create or update a Notes Record.

Property

Value

Description

notesConnection*

expression, variable

the Notes Agent connection

db*

text, expression, variable

the database name

record*

expression, variable

the Record to save

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

groupTemplate = createRecord()
setRecordFieldValue(groupTemplate, "ListName", "Group1")
setRecordFieldValue(groupTemplate, "Type", "Group")
setRecordFieldValue(groupTemplate, "Form", "Group")
setRecordFieldValue(groupTemplate, "LocalAdmin", "LocalDomainAdmins")
setRecordFieldValue(groupTemplate, "Members", username1)
addRecordFieldValue(groupTemplate, "Members", username2, true)
group = saveNotesRecord(sessionNotes, "names", groupTemplate)

Send a console command to a Domino server.

Property

Value

Description

notesConnection*

expression, variable

the Notes Agent connection

server

text, expression, variable

the name of the target server

cmd*

text, expression, variable

the console command

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

sent = sendNotesConsoleCommand(sessionNotes, "tell adminp process all")

Set the HTTPPassword field for a Notes Record.

Property

Value

Description

notesConnection*

expression, variable

the Notes Agent connection

db*

text, expression, variable

the database name

unid*

text, expression, variable

the UNID of the record

password*

password, string, expression, variable

the password

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

passwordSet = setNotesHTTPPassword(sessionNotes, "names", 
    userRecord['@UNID'],<Password>)

Notes databases do not have a fixed schema, but rather any record can have pretty much any field that conforms to the field naming restrictions imposed by Notes. Fields that start with $ are usually considered reserved or system fields and the adapter currently treats them as read-only. Each record also has metadata that is not stored as a field in the database and are available as read-only on any record. This metadata is represented in the adapter as fields that start with @.

Name

Type

Description

@UNID

String

The Universal ID of the record

@CREATED

Date

The creation timestamp

@MODIFIED

Date

The modification timestamp

@AUTHORS

String(s)

Names of those who have edited the record

The @UNID field will be included in all records returned by getNotesRecord() and getNotesRecords(). The other @ fields will only be returned if explicitly specified the attribute list or the attribute list is “+”. When calling saveNotesRecord(), a record that contains @UNID will be considered to be an update, whereas one without @UNID will create a new record in the database.

When searching using getNotesRecords(), you may specify a filter expression using Notes Formula Language which is similar to the expressions used in Lotus 1-2-3 spreadsheets and provides very powerful selection capabilities.

While any record can have pretty much any field, the Form field associates the record with a Notes form definition which includes a predefined set of fields and rules for what can or must in each defined field. A database can also have a default form that applies to records that don't have an explicitly specified Form. Whenever the adapter saves a record, it asks Notes to apply any applicable form validation before it saves the record. In this respect a form definition can be thought of a kind of schema. As part of that validation, Notes may add fields, changes fields, or reject the save altogether if any validation requirements are not met. The easiest way to get a list of the fields that a form supports is to open a record that uses the given form in Notes or Domino Administrator, right click on the record, select Document Properties, and then select the second tab of the little dialog that pops up. Another way would be to use getNotesRecords() with filter = 'Form = “xxx”' and maxResults = 1 and log the results.

In Notes, Users and Groups live in what is known both as the Domino Directory and the Public Address Book, which is a database usually called “names”.

A User is associated with the Person form and has an associate ID file, and usually an associated mail file. While it a possible to create a Person record directly using saveNotesRecord(), in order to create a User (as opposed to e.g. a contact), you must use registerNewNotesUser(), which can also create and certify the User's ID file, and optionally create the User's mail file. There are also several operations on Users, such as rename, move, delete, etc., that must be performed via the adminpXXX() family of actions. Failure to do so will result in inconsistencies in Notes.

A Group is associated with the Group form. Unlike Users, Groups are created directly using saveNotesRecord(), but like Users,  renaming and deleting groups must be performed via the adminpXXX() family of actions. Failure to do so will result in inconsistencies in Notes.

Name

Type

Description

AltFullName

String

(default: none) An alternate User name

AltFullNameLanguage

String

(default: none) The language for the alternate User name

AltOrgUnit

String(s)

(default: none) Alternate name(s) for the organizational unit to use when creating ID files

AltOrgUnitLang

String(s)

(default: none) Languages associated with the alternate name(s) for the organizational unit to use when creating ID files

CreateMailDBInBackground

Boolean

(default: false) Create mail database in the background (via AdminP)

EnforceUniqueShortName

Boolean

(default: true) Indicates whether a short name must be unique

Expiration

Date

(default: system default) The expiration date to use when creating ID file

FirstName

String

(default: blank) A first name for the User

ForeignDN

String

(default: none) A foreign DN for the User

ForwardDomain

String

(default: none) The forwarding domain for the user's mail file

FullName

String

(default: calculated from other fields)

GroupList

String(s)

(default: none) The Groups(s) to which the User is assigned during registration

IDType

Number

(default: 173) The type of ID file to create 171 → FLAT, 172 → HIERARCHICAL, 173 → SAME AS CERTIFIER

IdFile

String

(default: none) The ID file to be created; specify the complete path, for example, c:\notes\data\user.id

LastName

String

(default: blank) A last name for the User to be registered

Location

String

(default: none) A value for the location field in the Domino Directory record

MailACLManager

String

(default: none) A name that is assigned Manager access in the mail database ACL

MailCreateFTIndex

Boolean

(default: false) Indicates the creation of a full-text index for the mail database

MailDBPath

String

(default: none) The path of the User's mail file relative to the data directory, e.g. “mail\jones.nsf”

MailInternetAddress

String

(default: blank) The user's Internet name for sending and receiving mail

MailOwnerAccess

Number

(default: 0) The mail database ACL setting for the owner 0 → Manager, 1 → Designer, 2 → Editor

MailQuotaSizeLimit

Number

(default: no limit) The maximum size of the user's mail database, in megabytes.

MailQuotaWarningThreshold

Number

(default: no limit) The size, in megabytes, at which the user's mail database issues a warning that it is getting too large

MailReplicaServers

String(s)

(default: none) The names of servers to which the mail database will replicate.

MailServer

String

(default: none) The canonical name of the server containing the User's mail file

MailSystem

String

(default: 0) The user's mail system 0 → Notes, 1 → POP, 2 → IMAP, 3 → INotes, 4→ Internet, 5 → Other, 6 → None

MailTemplateName

String

(default: system default) The name of the template for the design of the mail file

MiddleInitial

String

(default: blank) A middle initial for the User

MinPasswordLength

Number

(default: system default) The strength assigned to a password in an ID file

NorthAmerican

Boolean

(default: system default) Indicates whether an ID file is North American

OrgUnit

String

(default: none) The organizational unit to use when creating ID file

Password

String

(default: none) Password for the user ID file

PolicyName

String

(default: none) The name of an explicit policy

PublicKeySize

Number

(default: system default) Size of the public key when creating ID file 630, 1024, 2048

RegistrationLog

String

(default: “certlog.nsf”) The log file to use when creating ID

RegistrationServer

String

(default: the agent server) The server to use when creating ID and performing other registration functions

RoamingCleanupPeriod

Number

(default: none) The interval in days for cleaning up data on Notes clients set up for roaming users - only needed when RoamingCleanupSetting == 1

RoamingCleanupSetting

String

(default: 0) Indicates the clean-up process for data on Notes clients set up for roaming users 0 → NEVER, 1 → EVERY_NDAYS, 2 → AT_SHUTDOWN, 3 → PROMPT

RoamingServer

String

(default: none) The server on which the user's roaming data is stored

RoamingSubdir

String

(default: none) The subdirectory that contains the user's roaming data

RoamingUser

Boolean

(default: false) Indicates whether a user is a roaming user

ShortName

String

(default: calculated from other fields) The short name when creating user ID

StoreIDInAddressBook

Boolean

(default: true) Indicates whether the ID file is stored in the Address Boook

StoreIDInMailFile

Boolean

(default: false) Indicates whether the ID file is stored in the user's mail file

SynchInternetPassword

Boolean

(default: true) Synchronizes the user's Internet password with the password for the Notes client ID.

UpdateAddressBook

Boolean

(default: true) Indicates whether an ID document in the Domino Directory is created when the ID file is created

The Administration Process (AdminP) is a facility that runs on the Domino Server and handles complex tasks that involve possibly many steps, such as moving, renaming, or deleting Users and Groups. These tasks are considered complex because them may involve fixing up or removing references to the User or Group across the Notes infrastructure as well as performing tasks outside of the database such as deleting or moving other files. You make requests to AdminP via one of the actions prefixed with adminP.

Unlike direct Record access, requests to AdminP expect Users and Groups to be identified by name rather than by @UNID. The name for a User can be found as the first value of the FullName field and the name for a Group can be found as the first value of the ListName field.

Requests to AdminP are processed asynchronously after the action returns, so subsequent operations on the User or Group usually will need to be delayed until AdminP has finished processing the request. AdminP normally only wakes up periodically to process its queue of requests, but you can use a console command to tell AdminP to process new requests immediately:

sendNotesConsoleCommand("tell adminp process new")

Note that many requests happen in multiple phases so waking up AdminP may only start the first step of the process, with each subsequent step happening one at a time each time adminp runs through its queue.

Office 365 Adapter Actions

The list of filterable attributes can be found here.

Add a member to an Office 365 DistributionGroup

Property

Value

Description

connection*

expression, variable

the Office 365 connection

groupIdentity*

text, expression, variable

the identity of the DistributionGroup

memberIdentity*

text, expression, variable

the identity of the object to add to the DistributionGroup

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

added = addOffice365DistributionGroupMember(session, "testgroup", 
    "johndoe@example.com")

Add a member to an Office 365 MsolGroup

Property

Value

Description

connection*

expression, variable

the Office 365 connection

groupIdentity*

text, expression, variable

the identity of the MsolGroup

memberIdentity*

text, expression, variable

the identity of the object to add to the MsolGroup

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

added = addOffice365MsolGroupMember(session, "testgroup@example.com", 
    "johndoe@example.com")

Add a member to an Office 365 MsolRole

Property

Value

Description

connection*

expression, variable

the Office 365 connection

groupIdentity*

text, expression, variable

the identity of the MsolRole

memberIdentity*

text, expression, variable

the identity of the object to add to the MsolRole

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

filter = createRecord()
setRecordFieldValue(filter, "RoleName" "User Account Administrator")
roles = getOffice365MsolRoles(session, filter, 1)
added = addOffice365MsolGroupMember(session, roles[0].ObjectId, 
    "johndoe@example.com")

Add a member to an Office 365 SharePoint Online Site Group

Property

Value

Description

connection*

expression, variable

the Office 365 connection

site*

text, expression, variable

the url of the SharePoint Online Site

groupIdentity*

text, expression, variable

the name of the SPOSiteGroup

memberIdentity*

text, expression, variable

the login name of the object to add to the SPOSiteGroup

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

added = addOffice365SPOSiteGroupMember(session, 
    "https://example.sharepoint.com/", "MySiteGroup", 
    "JohnDoe@example.com")

Delete an Office 365 DistributionGroup record by Id.

Property

Value

Description

connection*

expression, variable

the Office 365 connection

identity*

text, expression, variable

the identity of the Office 365 DistributionGroup to delete

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

deleted = deleteOffice365DistributionGroup(session, "testgroup")

Delete a member from an Office 365 DistributionGroup.

Property

Value

Description

connection*

expression, variable

the Office 365 connection

groupIdentity*

text, expression, variable

the identity of the DistributionGroup

memberIdentity*

text, expression, variable

the identity of the object to delete from the DistributionGroup

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

removed = deleteOffice365DistributionGroupMember(session, 
    "testgroup@example.com", "jdoe@example.com")

Delete an Office 365 Mailbox record by Id.

Property

Value

Description

connection*

expression, variable

the Office 365 connection

identity*

text, expression, variable

the identity of the Office 365 Mailbox to delete

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

deleted = deleteOffice365Mailbox(session, "jdoe@example.com")

Delete an Office 365 MailContact record by Id.

Property

Value

Description

connection*

expression, variable

the Office 365 connection

identity*

text, expression, variable

the identity of the Office 365 MailContact to delete

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

deleted = deleteOffice365MailContact(session, "testContact")

Delete an Office 365 MailUser record by Id.

Property

Value

Description

connection*

expression, variable

the Office 365 connection

identity*

text, expression, variable

the identity of the Office 365 MailUser to delete

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

deleted = deleteOffice365MailUser(session, "testMailUser@example.com")

Delete an Office 365 MsolGroup record by Id.

Property

Value

Description

connection*

expression, variable

the Office 365 connection

identity*

text, expression, variable

the identity of the Office 365 MsolGroup to delete

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

deleted = deleteOffice365MsolGroup(session, "testgroup@example.com")

Delete a member from an Office 365 MsolGroup.

Property

Value

Description

connection*

expression, variable

the Office 365 connection

groupIdentity*

text, expression, variable

the identity of the MsolGroup

memberIdentity*

text, expression, variable

the identity of the object to delete from the MsolGroup

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

deleted = deleteOffice365MsolGroupMember(session, 
    "testgroup@example.com", "jdoe@example.com")

Delete a member from an Office 365 MsolRole.

Property

Value

Description

connection*

expression, variable

the Office 365 connection

groupIdentity*

text, expression, variable

the identity of the MsolRole

memberIdentity*

text, expression, variable

the identity of the object to delete from the MsolRole

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

filter = createRecord()
setRecordFieldValue(filter, "RoleName" "User Account Administrator")
roles = getOffice365MsolRoles(session, filter, 1)
deleted = deleteOffice365MsolGroupMember(session, roles[0].ObjectId, 
    "jdoe@example.com")

Delete an Office 365 MsolUser record by Id.

Property

Value

Description

connection*

expression, variable

the Office 365 connection

identity*

text, expression, variable

the identity of the Office 365 MsolUser to delete

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

deleted = deleteOffice365MsolUser(session, "jdoe@example.com")

Delete an Office 365 SharePoint Online Site Group record by Id.

Property

Value

Description

connection*

expression, variable

the Office 365 connection

site*

text, expression, variable

the url of the SharePoint Online Site

identity*

text, expression, variable

the name of the Office 365 SharePoint Online Site Group to delete

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

deleted = deleteOffice365SPOSiteGroup(session, 
    "https://example.sharepoint.com/", "MySiteGroup")

Delete a member from an Office 365 SharePoint Online Site Group.

Property

Value

Description

connection*

expression, variable

the Office 365 connection

site*

text, expression, variable

the url of the SharePoint Online Site

groupIdentity*

text, expression, variable

the name of the SPOSiteGroup

memberIdentity*

text, expression, variable

the login name of the object to delete from the SPOSiteGroup

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

deleted = deleteOffice365SPOSiteGroupMember(session, 
    "https://example.sharepoint.com/", "MySiteGroup", 
    "jdoe@example.com")

Get an Office 365 DistributionGroup record by Id.

Property

Value

Description

connection*

expression, variable

the Office 365 connection

identity*

text, expression, variable

the identity of the Office 365 DistributionGroup to get

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

distGroup = getOffice365DistributionGroup(session, "testgroup")

Get Office 365 DistributionGroup records.

Property

Value

Description

connection*

expression, variable

the Office 365 connection

filter

text, expression, variable

an OPath filter or an example Record

maxResults

expression, variable

maximum number of Records to return (default: 1000)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

filter = createRecord()
setRecordFieldValue(filter, "GroupType", "SecurityEnabled")
mailboxes = getOffice365DistributionGroups(session, filter, 50)

Get an Office 365 Mailbox record by Identity.

Property

Value

Description

connection*

expression, variable

the Office 365 connection

identity*

text, expression, variable

the identity of the Office 365 Mailbox to get

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

mailbox = getOffice365Mailbox(session, "jdoe@example.com")

Get Office 365 Mailbox records.

Property

Value

Description

connection*

expression, variable

the Office 365 connection

filter

text, expression, variable

an OPath filter or an example Record

maxResults

expression, variable

maximum number of Records to return (default: 1000)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

filter = createRecord()
setRecordFieldValue(filter, "LastName", "Doe")
setRecordFieldValue(filter, "FirstName", "John")
mailboxes = getOffice365Mailboxes(session, filter, 2)

Get an Office 365 MailContact record by Id.

Property

Value

Description

connection*

expression, variable

the Office 365 connection

identity*

text, expression, variable

the identity of the Office 365 MailContact to get

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

contact = getOffice365MailContact(session, "testContact")

Get Office 365 MailContact records.

Property

Value

Description

connection*

expression, variable

the Office 365 connection

filter

text, expression, variable

an OPath filter or an example Record

maxResults

expression, variable

maximum number of Records to return (default: 1000)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

filter = createRecord()
setRecordFieldValue(filter, "LastName", "Doe")
setRecordFieldValue(filter, "FirstName", "John")
mailboxes = getOffice365MailContacts(session, filter, 2)

Get an Office 365 MailUser record by Id.

Property

Value

Description

connection*

expression, variable

the Office 365 connection

identity*

text, expression, variable

the identity of the Office 365 MailUser to get

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

mailUser = getOffice365MailUser(session, "testMailUser")

Get Office 365 MailUser records.

Property

Value

Description

connection*

expression, variable

the Office 365 connection

filter

text, expression, variable

an OPath filter or an example Record

maxResults

expression, variable

maximum number of Records to return (default: 1000)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

filter = createRecord()
setRecordFieldValue(filter, "LastName", "Doe")
setRecordFieldValue(filter, "FirstName", "John")
mailboxes = getOffice365MailUsers(session, filter, 2)

Get an Office 365 MsolGroup record by Id.

Property

Value

Description

connection*

expression, variable

the Office 365 connection

identity*

text, expression, variable

the identity of the Office 365 MsolGroup to get

returnVariable

expression, variable

name of the variable to be assigned to the return value

Note

filter = createRecord() setRecordFieldValue(filter, "GroupType", 
    "Security") mailboxes = getOffice365MsolGroups(session, 
    filter, 50)

Get Office 365 MsolGroup records.

Property

Value

Description

connection*

expression, variable

the Office 365 connection

filter

text, expression, variable

an example Record

maxResults

expression, variable

maximum number of Records to return (default: 1000)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

filter = createRecord()
setRecordFieldValue(filter, "GroupType", "Security")
mailboxes = getOffice365MsolGroups(session, filter, 50)

Get an Office 365 MsolRole record by Id.

Property

Value

Description

connection*

expression, variable

the Office 365 connection

identity*

text, expression, variable

the identity of the Office 365 MsolRole to get

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

role = getOffice365MsolRole(session, "fe930be7-5e62-47db-91af-98c3a49a38b1")

Get Office 365 MsolRole records.

Property

Value

Description

connection*

expression, variable

the Office 365 connection

filter

text, expression, variable

an example Record

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

filter = createRecord()
setRecordFieldValue(filter, "RoleName" "User Account Administrator")
roles = getOffice365MsolRoles(session, filter, 1)

Get an Office 365 MsolUser record by Identity.

Property

Value

Description

connection*

expression, variable

the Office 365 connection

identity*

text, expression, variable

the identity of the Office 365 MsolUser to get

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

user = getOffice365MsolUser(session, "jdoe@example.com")

Get Office 365 MsolUser records.

Property

Value

Description

connection*

expression, variable

the Office 365 connection

filter

text, expression, variable

an example Record

maxResults

expression, variable

maximum number of Records to return (default: 1000)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

filter = createRecord()
setRecordFieldValue(filter, "Department", "Sales")
setRecordFieldValue(filter, "State", "CA")
users = getOffice365MsolUsers(session, filter, 200)

Get an Office 365 SharePoint Online Site Group record by Id.

Property

Value

Description

connection*

expression, variable

the Office 365 connection

site*

text, expression, variable

the url of the SharePoint Online Site

identity*

text, expression, variable

the name of the Office 365 SharePoint Online Site Group to get

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

siteGroup = getOffice365SPOSiteGroup(session, 
    "https://example.sharepoint.com/", "MySiteGroup")

Get Office 365 SharePoint Online Site Group records.

Property

Value

Description

connection*

expression, variable

the Office 365 connection

site*

text, expression, variable

the url of the SharePoint Online Site

maxResults

expression, variable

maximum number of Records to return (default: 200)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

siteGroups = getOffice365SPOSiteGroups(session, 
    "https://example.sharepoint.com/", 50)

Open a connection to Office 365.

Property

Value

Description

office365AgentURL*

text, expression, variable

the URL of the Exchange Administrative Web Service agent (e.g. https://hostname:port/idautoExchangeAdminWS)

noExchange

boolean, expression, variable

set to true for domains that don't support Exchange Online (default: false)

spoAdminURL

text, expression, variable

the URL of the SharePoint Online Administration Center (e.g. https://mycompany-admin.sharepoint.com)

username*

text, expression, variable

username for authentication to Office 365

password*

password, string, expression, variable

password for authentication to Office 365

options

expression, variable

A record or JavaScript object with a field for each additional option. Currently defined fields are connectTimeout and socketTime which require a numeric value from 1 to 2147483647 (0x7FFFFFFF) that represents the number of milliseconds for the timeout, and 0 representing no timeout.

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

Global.office365URL = "https://10.10.10.10/idautoExchangeAdminWS"
Global.office365User = "office365admin@example.net"\nGlobal.office365Pwd 
    = <Password>
session = openOffice365Connection(Global.office365URL,Global.office365User,
    Global.office365Pwd)

Purge deleted users from Office 365 Recycle Bin.

Property

Value

Description

connection*

expression, variable

the Office 365 connection

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

purgeOffice365UserRecycleBin(session)

Create/Update an Office 365 DistributionGroup record.

Property

Value

Description

connection*

expression, variable

the Office 365 connection

record*

expression, variable

the record to save

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

groupTemplate = createRecord(, )
setRecordFieldValue(groupTemplate, "Name", "testgroup")
saveOffice365DistributionGroup(session, groupTemplate)

Create/Update an Office 365 Mailbox record.

Property

Value

Description

connection*

expression, variable

the Office 365 connection

record*

expression, variable

the record to save

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

mailboxTemplate = createRecord()
setRecordFieldValue(mailboxTemplate, "Name", "JDoe")
setRecordFieldValue(mailboxTemplate, "Password",Password>)
setRecordFieldValue(mailboxTemplate, "MicrosoftOnlineServicesID", 
    johndoe@example.com")
mailbox = saveOffice365Mailbox(session, mailboxTemplate)

Create/Update an Office 365 MailContact record.

Property

Value

Description

connection*

expression, variable

the Office 365 connection

record*

expression, variable

the record to save

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

contactTemplate = createRecord()
setRecordFieldValue(contactTemplate, "Name", "testContact")
setRecordFieldValue(contactTemplate, "ExternalEmailAddress", 
    "testContact@example.com")
contact = saveOffice365MailContact(session, contactTemplate)

Create/Update an Office 365 MailUser record.

Property

Value

Description

connection*

expression, variable

the Office 365 connection

record*

expression, variable

the record to save

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

mailUserTemplate = createRecord()
setRecordFieldValue(
setRecordFieldValue(mailUserTemplate, "EmailAddresses", 
    "testMailUser@example.org")
mailUser = saveOffice365MailUser(session, mailUserTemplate)

Create/Update an Office 365 MsolGroup record.

Property

Value

Description

connection*

expression, variable

the Office 365 connection

record*

expression, variable

the record to save

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

groupTemplate = createRecord()
setRecordFieldValue(groupTemplate, "DisplayName", "testGroup")
group = saveOffice365MsolGroup(session, groupTemplate)

Create/Update an Office 365 MsolUser record.

Property

Value

Description

connection*

expression, variable

the Office 365 connection

record*

expression, variable

the record to save

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

userTemplate = createRecord()
setRecordFieldValue(userTemplate, "DisplayName", testId)
setRecordFieldValue(userTemplate, "Password",<//Password//>)
setRecordFieldValue(userTemplate, "UserPrincipleName", testId + 
    "@" + testDomain)
setRecordFieldValue(userTemplate, "UsageLocation", "US")
setRecordFieldValue(userTemplate, "LicenseAssignment", 
    "mydomain:ENTERPRISEPACK")
msolUser = saveOffice365MsolUser(session, userTemplate)

Create/Update an Office 365 SharePoint Online Site Group record.

Property

Value

Description

connection*

expression, variable

the Office 365 connection

record*

expression, variable

the record to save

returnVariable

expression, variable

name of the variable to be assigned to the return value

Fields supported for creating/updating on Office 365 objects are documented as parameters to the New-* and Set-* , Exchange Cmdlets, Azure AD Cmdlets, and SharePoint Online Cmdlets. Because many objects are polymorphic, there are different cmdlets that can be applied to the same object and the set of supported attributes is based on all the applicable cmdlets, e.g. a Mailbox is also a User, a Recipient, a CASMailbox, and a MailboxRegionalConfiguration, so the set of supported attributes is the union of the Cmdlets for those 5 object types. Note that some of the fields documented for Exchange are not available in Office 365, though the specifics of which fields is not documented.

For all Record types, the Identity field serves as the identifier for the corresponding Office 365 object. On save, a Record that has the Identity field will be treated as an update, whereas any Record without the Identity field will be treated as a create. Records returned from the Office 365 will always have the Identity field populated, though for purposes of getting or updating the object, any of the following can be used interchangeably as the Identity: ADObjectID, ,Alias, Distinguished name (DN), Domain\Account, GUID, LegacyExchangeDN, SmtpAddress, User principal name (UPN), Windows Live ID.

For search filters, only one Office 365 object type is supported for each Record type, which means that searches cannot be performed across all the attributes that are supported for create/update on each Record type. The list of attributes supported in search filters can be found here: http://technet.microsoft.com/en-us/library/bb738155.aspx.The syntax for searching is called OPath and is documented here: http://technet.microsoft.com/en-us/library/bb124268.aspx#OPATH. Filters should NOT be enclosed in braces { } because the adapter automatically takes care of that. Note that the filter could also be an example record.

For Msol* object types, OPath filters are not supported, and an example record filter will be used as additional parameters on the Get-Msol* cmdlet, many of which can be used to filter the result set.

Record type

New Cmdlet

Set Cmdlet(s)

Supported Attributes

Search Filter Object Type

MsolUser

New-MsolUser

Set-MsolUser

Set-MsolUserPassword

Set-MsolUserLicense

Set-MsolUserPrincipalName

AlternateEmailAddresses, BlockCredential, City, Country, Department, DisplayName, Fax, FirstName, ImmutableId, LastName, LicenseAssignment, LicenseOptions, MobilePhone, Office, Password, PasswordNeverExpires, PhoneNumber, PostalCode, PreferredLanguage, State, StreetAddress, StrongPasswordRequired, TenantId, Title, UsageLocation, UserPrincipalName, NewPassword, AddLicenses, RemoveLicenses, NewUserPrincipalName, ForceChangePassword

MsolUser

MsolGroup

New-MsolGroup

Set-MsolGroup

Description, DisplayName, ManagedBy, TenantId

MsolGroup

Mailbox

New-Mailbox

Set-Mailbox

Set-User

Set-CASUser

Set-MailboxRegionalConfiguration

Set-UserPhoto

AcceptMessagesOnlyFrom, AcceptMessagesOnlyFromDLMembers, AcceptMessagesOnlyFromSendersOrMembers, ActiveSyncAllowedDeviceIDs, ActiveSyncBlockedDeviceIDs, ActiveSyncDebugLogging, ActiveSyncEnabled, ActiveSyncMailboxPolicy, Alias, ApplyMandatoryProperties, AssistantName, BypassModerationFromSendersOrMembers, CalendarRepairDisabled, CalendarVersionStoreDisabled, City, Company, CountryOrRegion, CustomAttribute1, CustomAttribute2, CustomAttribute3, CustomAttribute4, CustomAttribute5, CustomAttribute6, CustomAttribute7, CustomAttribute8, CustomAttribute9, CustomAttribute10, CustomAttribute11, CustomAttribute12, CustomAttribute13, CustomAttribute14, CustomAttribute15, DeliverToMailboxAndForward, Department, Discovery, DisplayName, EmailAddresses, EvictLiveId, ExternalOofOptions, Fax, FederatedIdentity, FirstName, Force, ForwardingAddress, GrantSendOnBehalfTo, HiddenFromAddressListsEnabled, HomePhone, Identity, ImapEnabled, ImapMessagesRetrievalMimeFormat, ImapUseProtocolDefaults, ImmutableId, ImportLiveId, Initials, Languages, LastName, MAPIEnabled, MailTip, MailTipTranslations, MailboxPlan, Manager, MessageTrackingReadStatusEnabled, MobilePhone, ModeratedBy, ModerationEnabled, Name, Notes, OWAEnabled, Office, OrganizationalUnit, OtherFax, OtherHomePhone, OtherTelephone, Pager, Password, Phone, PopEnabled, PopMessagesRetrievalMimeFormat, PopUseProtocolDefaults, PostOfficeBox, PostalCode, RejectMessagesFrom, RejectMessagesFromDLMembers, RejectMessagesFromSendersOrMembers, RemotePowerShellEnabled, RemovedMailbox, RequireSenderAuthenticationEnabled, ResetPasswordOnNextLogon, ResourceCapacity, ResourceCustom, SecondaryAddress, SendModerationNotifications, SimpleDisplayName, StateOrProvince, StreetAddress, Title, Type, UseExistingLiveId, UserCertificate, UserSMimeCertificate, WebPage, WindowsEmailAddress, MicrosoftOnlineServicesID, DateFormat, Language, LocalizeDefaultFolderName, TimeFormat, TimeZone, PictureData

Recipient

DistributionGroup

New-DistributionGroup

Set-DistributionGroup

Set-Group

AcceptMessagesOnlyFrom, AcceptMessagesOnlyFromDLMembers, AcceptMessagesOnlyFromSendersOrMembers, Alias, BypassModerationFromSendersOrMembers, BypassNestedModerationEnabled, CopyOwnerToMember, CreateDTMFMap, CustomAttribute1, CustomAttribute2, CustomAttribute3, CustomAttribute4, CustomAttribute5, CustomAttribute6, CustomAttribute7, CustomAttribute8, CustomAttribute9, CustomAttribute10, CustomAttribute11, CustomAttribute12, CustomAttribute13, CustomAttribute14, CustomAttribute15, DisplayName, EmailAddresses, GrantSendOnBehalfTo, HiddenFromAddressListsEnabled, Identity, MailTip, MailTipTranslations, ManagedBy, MemberDepartRestriction, MemberJoinRestriction, Members, ModeratedBy, ModerationEnabled, Name, Notes, OrganizationalUnit, PhoneticDisplayName, PrimarySmtpAddress, RejectMessagesFrom, RejectMessagesFromDLMembers, RejectMessagesFromSendersOrMembers, ReportToManagerEnabled, ReportToOriginatorEnabled, RequireSenderAuthenticationEnabled, RoomList, SendModerationNotifications, SendOofMessageToOriginatorEnabled, SimpleDisplayName, Type, Universal, WindowsEmailAddress

Recipient

MailContact

New-MailContact

Set-MailContact

Set-Contact

AcceptMessagesOnlyFrom, AcceptMessagesOnlyFromDLMembers, AcceptMessagesOnlyFromSendersOrMembers, Alias, AllowUMCallsFromNonUsers, AssistantName, BypassModerationFromSendersOrMembers, City, Company, CountryOrRegion, CreateDTMFMap, CustomAttribute1, CustomAttribute2, CustomAttribute3, CustomAttribute4, CustomAttribute5, CustomAttribute6, CustomAttribute7, CustomAttribute8, CustomAttribute9, CustomAttribute10, CustomAttribute11, CustomAttribute12, CustomAttribute13, CustomAttribute14, CustomAttribute15, Department, DisplayName, EmailAddresses, ExternalEmailAddress, Fax, FirstName, GrantSendOnBehalfTo, HiddenFromAddressListsEnabled, HomePhone, Identity, Initials, LastName, MacAttachmentFormat, MailTip, MailTipTranslations, Manager, MessageBodyFormat, MessageFormat, MobilePhone, ModeratedBy, ModerationEnabled, Name, Notes, Office, OrganizationalUnit, OtherFax, OtherHomePhone, OtherTelephone, Pager, Phone, PhoneticDisplayName, PostOfficeBox, PostalCode, RejectMessagesFrom, RejectMessagesFromDLMembers, RejectMessagesFromSendersOrMembers, RequireSenderAuthenticationEnabled, SecondaryAddress, SecondaryDialPlan, SendModerationNotifications, SimpleDisplayName, StateOrProvince, StreetAddress, TelephoneAssistant, Title, UMCallingLineIds, UMDialPlan, UseMapiRichTextFormat, UsePreferMessageFormat, WebPage, WindowsEmailAddress

Recipient

MailUser

New-MailUser

Set-MailUser

Set-User

Set-CASUser

AcceptMessagesOnlyFrom, AcceptMessagesOnlyFromDLMembers, AcceptMessagesOnlyFromSendersOrMembers, Alias, AllowUMCallsFromNonUsers, AssistantName, BypassModerationFromSendersOrMembers, City, Company, CountryOrRegion, CreateDTMFMap, CustomAttribute1, CustomAttribute2, CustomAttribute3, CustomAttribute4, CustomAttribute5, CustomAttribute6, CustomAttribute7, CustomAttribute8, CustomAttribute9, CustomAttribute10, CustomAttribute11, CustomAttribute12, CustomAttribute13, CustomAttribute14, CustomAttribute15, Department, DisplayName, EmailAddresses, ExternalEmailAddress, Fax, FirstName, GrantSendOnBehalfTo, HiddenFromAddressListsEnabled, HomePhone, Identity, Initials, LastName, MacAttachmentFormat, MailTip, MailTipTranslations, Manager, MessageBodyFormat, MessageFormat, MobilePhone, ModeratedBy, ModerationEnabled, Name, Notes, Office, OrganizationalUnit, OtherFax, OtherHomePhone, OtherTelephone, Pager, Phone, PhoneticDisplayName, PostOfficeBox, PostalCode, RejectMessagesFrom, RejectMessagesFromDLMembers, RejectMessagesFromSendersOrMembers, RequireSenderAuthenticationEnabled, SecondaryAddress, SecondaryDialPlan, SendModerationNotifications, SimpleDisplayName, StateOrProvince, StreetAddress, TelephoneAssistant, Title, UMCallingLineIds, UMDialPlan, UseMapiRichTextFormat, UsePreferMessageFormat, WebPage, WindowsEmailAddress

Recipient

SPOSiteGroup

New-SPOSiteGroup

Set-SPOSiteGroup

Name, Owner, OwnerTitle, PermissionLevels, PermissionLevelsToAdd, PermissionLevelsToRemove, Site, Title, Users

N/A

Important Notes
  • Office 365 supports a new higher level management object, MsolUser, that should be preferred to managing users via the Mailbox object.

  • While a Mailbox can still be created directly, the corresponding MsolUser must be assigned a license or the Mailbox will be disabled after a grace period.

    • The corresponding MsolUser is not available immediately (probably due to AD replication latency) so immediately trying to add a license after creating a Mailbox directly will usually fail.

    • Creating a Mailbox directly requires the field MicrosoftOnlineServicesID as opposed to WindowsLiveID (Live@EDU) or UserPrincipalName (Exchange).

  • After an MsolUser is created and assigned an appropriate license, a Mailbox will be automatically created after some delay.

  • While initial password can still be set when creating a Mailbox, subsequent password changes can only be made to the MsolUser.

  • Setting the initial password on an MsolUser uses the Password field, but subsequent password changes can use either the Password or NewPassword field.

  • Licenses can be added on the initial creation of MsolUser using the LicenseAssignment field. Subsequent addition or removal of licenses use the AddLicenses or RemoveLicense field. In either case the assigning a license will fail of the UsageLocation field has not been set.

  • The licenses available for assignment for a particular domain can be determined by going to the server hosting the Exchange agent and opening the “Microsoft Online Services Module for Windows PowerShell” from the desktop. Then running the following commands:

    Connect-MsolService -Credential ( Get-Credential )
    (Get-MsolAccountSku).AccountSkuid
  • You can disable specific applications that would normally be enabled by a license usin the LicenseOptions field. The LicenseOptions field is a record that has two fields: AccountSkuID, which is the name of the license; and DisabledPlans, which is an array of the names of specific modules to be disabled for the user. The names of the modules that are available within a given license can be determined by going to the server hosting the Exchange agent and opening the “Microsoft Online Services Module for Windows PowerShell” from the desktop. Then running the following commands:

    Connect-MsolService -Credential ( Get-Credential )
    forEach ( $sku in Get-MsolAccountSku) { 
        echo $sku; 
    forEach ( $service in $sku.ServiceStatus) { 
        echo $service.ServicePlan.ServiceName} 
    }
    
  • Creating an MsolGroup will create a security group (as opposed to a distribution group), after initial creation, MsolGroup can be used for listing or adding/removing members from both security and distribution groups.

  • There is a timing issue with user creation on the Office 365 backend. We are recommending that you not set Location, Time Zone or Language at user creation time. If you wish to set these attributes you should update them in a later action.

Org Adapter Actions
Department Actions

Retrieves a Department.

Property

Value

Description

id*

string

The ID of the Department

Example

department = saveDepartment({"name": "Math", "code": "765", "description": "Math Department"})
department = getDepartment(department.id)

Retrieves all Departments.

Note

If there is no department ID yet in the system, RapidIdentity will create one using a createDepartment Action.

Property

Value

Description

pageSize

integer

The page size (required for a paging request)

pageNum

integer

The page number (defaults to 1 for a paging request)

Example

saveDepartment({"name": "Math", "code": "765", "description": "Math Department"})
departments = getAllDepartments()

Updates a Department.

Property

Value

Description

id*

string

The ID of the Department

Example

saveDepartment({"name": "Math", "code": "765", "description": "Math Department"})

Retrieves just one Department Relationship.

Property

Value

Description

id*

string

The ID of the Department Relationship

Example

department = saveDepartment({"name": "Math", "code": "765", "description": "Math Department"}) 
departmentRelationship = saveDepartmentRelationship({"departmentId": department.id, "userId":<some user's id>, "role": "ADMINISTRATOR"})
departmentRel = getDepartmentRelationShip(departmentRelationship.id)

Retrieves all Department Relationships. If no relationship IDs have yet been defined, RapidIdentity will create one using a createDepartmentRelationship Action Set.

Property

Value

Description

departmentId

string

The department ID for which to fetch department relationships

userId

string

The user ID for which to fetch department relationships

role

string

The role for which to fetch department relationships

pageSize

integer

The page size (required for a paging request)

pageNum

integer

The page number (defaults to 1 for a paging request)

Example

department = saveDepartment({"name": "Math", "code": "765", "description": "Math Department"})
saveDepartmentRelationship({"departmentId": department.id, "userId":<some user's id>, "role": "ADMINISTRATOR"})
departments = getAllDepartmentRelationships()

Updates a Department Relationship.

Property

Value

Description

id*

string

The ID of the Department Relationship

Example

department = saveDepartment({"name": "Math", "code": "765", "description": "Math Department"})
saveDepartmentRelationship({"departmentId": department.id, "userId":<some user's id>, "role": "ADMINISTRATOR"})

Deletes a Department Relationship.

Property

Value

Description

id*

string

The ID of the Department Relationship

Process

Delete by Department Relationship id.

Deletes a department.

Property

Value

Description

id*

string

The ID of the department to be deleted

Process

Delete by Department id.

District Actions

Retrieves just one District.

Property

Value

Description

id*

string

The ID of the District

Example

district = saveDistrict({"name": "District 1", "code": "123456", "ncesID": "123456", "stated": stateId}) 
district = getDistrict(district.id }

Retrieves all Districts.

Property

Value

Description

pageSize

integer

The page size (required for a paging request)

pageNum

integer

The page number (defaults to 1 for a paging request)

Example

districts = getAllDistricts()
districtId = " "
if (districts.length <1) {
    district = saveDistrict({"name": "District 1", "code": "123456", "ncesID": "123456", "stated": stateId})
    districtID = districtid
    } else {
    districtId = districts[0].id
    district = getDistrict(districtId)
}

Updates a District.

Property

Value

Description

id*

string

The ID of the District

Example

districtRec = createRecord()
addRecordFieldValue(districtRec, 'name', districtName, false)
addRecordFieldValue(districtRec, "code", districtCode, false)
addRecordFieldValue(districtRec, "ncesId", ncesId, false)
addRecordFieldValue(districtRec, "stateId", stateId, false)
district = saveDistrict(districtRec)
return district

Retrieves just one District Relationship.

Property

Value

Description

id*

string

The ID of the District Relationship

Example

district = saveDistrict({"name": "District 1", "code": "123456", "ncesID": "123456", "stated": stateId}) 
districtRel = saveDistrictRelationship({"districtId": districtId, "userId": user_id, "role": "ADMINISTRATOR"})
districtRel = getDistrictRelationship(districtRelId)

Retrieves all District Relationships.

Property

Value

Description

districtId

string

The dID for which to fetch district relationships

userId

string

The user ID for which to fetch district relationships

role

string

The role for which to fetch district relationships

pageSize

integer

The page size (required for a paging request)

pageNum

integer

The page number (defaults to 1 for a paging request)

Example

districtRels = getDistrictRelationships(districtId, user_id)
districtRelId = " "
if (districtRels.length < 1) {
    districtRel = saveDistrictRelationship({"districtId": districtId, "userId": user_id, "role": "ADMINISTRATOR"})
    districtRelId = districtRel.id
    } else {
    districtRelId = districtRels[0].id
    districtRel = getDistrictRelationship(districtRelId)

Updates a District Relationship.

Property

Value

Description

id*

string

The ID of the District Relationship

Example

district = saveDistrict({"name": "District 1", "code": "123456", "ncesID": "123456", "stated": stateId}) 
districtRel = saveDistrictRelationship({"districtId": districtId, "userId": user_id, "role": "ADMINISTRATOR"})

Deletes a District Relationship.

Property

Value

Description

id*

string

The ID of the District Relationship

Process

Delete by District Relationship id.

Deletes a District.

Property

Value

Description

id*

string

The ID of the District

Process

Delete by District id.

Job Actions

Retrieves just one Job.

Property

Value

Description

id*

string

The ID of the Job

Example

saveJob({"name": "math123", "code": "456", "title": "Best Math Teacher"})

Retrieves all Jobs.

Property

Value

Description

pageSize

integer

The page size (required for a paging request)

pageNum

integer

The page number (defaults to 1 for a paging request)

Example

saveJob({"name": "math123", "code": "456", "title": "Best Math Teacher"})
getAllJobs()

Updates a Job.

Property

Value

Description

id*

string

The ID of the Job

Example

job = saveJob({"name": "math123", "code": "456", "title": "Best Math Teacher"})
job = getJob(job.id)

Retrieves just one Job Relationship.

Property

Value

Description

id*

string

The ID of the Job Relationship

Example

job = saveJob({"name": "math123", "code": "456", "title": "Best Math Teacher"})
jobRel = saveJobRel({{"jobId": job.id, "userId":"user_id", "role": "ADMINISTRATOR"}
jobRel = getJobRelationship(jobRel.id)

Retrieves all Jobs Relationships.

Property

Value

Description

jobId

string

The job ID for which to fetch job relationships

userId

string

The user ID for which to fetch job relationships

role

string

The role for which to fetch job relationships

pageSize

integer

The page size (required for a paging request)

pageNum

integer

The page number (defaults to 1 for a paging request)

Example

job = saveJob({"name": "math123", "code": "456", "title": "Best Math Teacher"})
jobRel = saveJobRel({{"jobId": job.id, "userId":"user_id", "role": "ADMINISTRATOR"}
jobRels = getAllJobRelationships()
saveJob

Updates a job.

Property

Value

Description

id*

string

The ID of the Job

Example

job = saveJob({"name": "math123", "code": "456", "title": "Best Math Teacher"})
job = getJob(job.id)

Updates a Job Relationship.

Property

Value

Description

id*

string

The ID of the Job Relationship

Example

job = saveJob({"name": "math123", "code": "456", "title": "Best Math Teacher"})
jobRel = saveJobRel({{"jobId": job.id, "userId":"user_id", "role": "ADMINISTRATOR"}

Deletes a Job Relationship.

Property

Value

Description

id*

string

The ID of the Job Relationship

Process

Delete by Job Relationship id.

Deletes a Job.

Property

Value

Description

id*

string

The ID of the Job

Process

Delete by Job id.

Location Actions

Retrieves just one Location.

Property

Value

Description

id*

string

The ID of the Location

Example

location = saveLocation({"name": "Houston", "code": "111"})
location = getLocation(location.id)

Retrieves all Locations.

Property

Value

Description

pageSize

integer

The page size (required for a paging request)

pageNum

integer

The page number (defaults to 1 for a paging request)

Example

saveLocation({"name": "Houston", "code": "111"})
locations = getAllLocations()

Updates a Location.

Property

Value

Description

id*

string

The ID of the Location

Example

saveLocation({"name": "Houston", "code": "111"})

Retrieves just one Location relationship.

Property

Value

Description

id*

string

The ID of the Location relationship

Example

location = saveLocation({"name": "Houston", "code": "111"})
locationRel = saveLocationRelationship({"locationId": location.id, "userId":"user_id", "role": "ADMINISTRATOR"})
locationRel = getLocationRelationship(locationRel.id)

Retrieves all Location Relationships.

Property

Value

Description

locationId

string

The location ID for which to fetch location relationships

userId

string

The user ID for which to fetch location relationships

role

string

The role for which to fetch location relationships

pageSize

integer

The page size (required for a paging request)

pageNum

integer

The page number (defaults to 1 for a paging request)

Example

location = saveLocation({"name": "Houston", "code": "111"})
locationRel = saveLocationRelationship({"locationId": location.id, "userId":"user_id", "role": "ADMINISTRATOR"})
locationRels = getAllLocationRelationships()

Updates a Location Relationship.

Property

Value

Description

id*

string

The ID of the Location Relationship

Example

location = saveLocation({"name": "Houston", "code": "111"})
saveLocationRelationship({"locationId": location.id, "userId":"user_id", "role": "ADMINISTRATOR"})

Deletes a Location Relationship.

Property

Value

Description

id*

string

The ID of the Location Relationship

Process

Delete by Location Relationship id.

Deletes a Location.

Property

Value

Description

id*

string

The ID of the Location

Process

Delete by Location id.

School Actions

Retrieves just one School.

Property

Value

Description

id*

string

The ID of the School

Example

school = saveSchool({"name": "The School", "code": "234", "ncesId": 123451234512, "districtId": district.id})
school = getSchool(school.id)

Retrieves all Schools.

Property

Value

Description

pageSize

integer

The page size (required for a paging request)

pageNum

integer

The page number (defaults to 1 for a paging request)

Example

schools = getAllSchools()
SchoolId = " "
if (schools.length <1) {
    school = saveSchool({"name": "School 1", "code": "321654", "ncesId": "123456789123", "districtId": districtId})
} else {
    schoolId = schools[0].id
    school = getSchool(schoolId)
}

Updates a School.

Property

Value

Description

id*

string

The ID of the School

Example

schoolRec = createRecord()
addRecordFieldValue(schoolRec, 'name', schoolName, false)
addRecordFieldValue(schoolRec, "code", schoolCode, false)
addRecordFieldValue(schoolRec, "ncesId, ncesId, false)
addRecordFieldValue(schoolRec, "districtId", districtId, false)
school = saveSchool(schoolRec)
return school

Retrieves just one School relationship.

Property

Value

Description

id*

string

The ID of the School relationship

Example

school = saveSchool({{"name": "The School", "code": "234", "ncesId": 123451234512, "districtId": district.id})
schoolRel = saveSchoolRelationship ("schoolId": schoolId, "userId": user_id, "role": ADMINISTRATOR})
schoolRel = getSchoolRelationships(schoolRel.id)

Retrieves all School Relationships.

Property

Value

Description

schoolId

string

The school ID for which to fetch school relationships

userId

string

The user ID for which to fetch school relationships

role

string

The role for which to fetch school relationships

pageSize

integer

The page size (required for a paging request)

pageNum

integer

The page number (defaults to 1 for a paging request)

Example

schoolRels = getSchoolRelationship(schoolId, user_id)
schoolRelId = " "
if (schoolRels.length <1) {
    schoolRel = saveSchoolRelationship ("schoolId": schoolId, "userId": user_id, "role": ADMINISTRATOR})
    schoolRelID = schoolRel.id
} else {
    schoolRelID = schoolRels[0].id
    schoolRel = getSchoolRelationships(schoolRelId)
}

Updates a School relationship.

Property

Value

Description

id*

string

The ID of the School relationship

Example

id = "cc913124-c1d6-4716-9462-42e5577c730f"
schoolId = "aef284b-9c6fe-4ad1-8e12-8cd7ee0b7c4f"
conn = openMetadirLDAPConnection()
schoolRel = saveSchoolRelationship({"userId": id, "schoolId": schoolID, "role": "ADMINISTRATOR"})
log('Adding User with Email: "' + email + '" as an Administrator for School with ID: "' + schoolID + '"')
close(conn)
return id 

Deletes a School Relationship.

Property

Value

Description

id*

string

The ID of the School Relationship

Process

Delete by School Relationship id.

Deletes a School.

Property

Value

Description

id*

string

The ID of the School

Process

Delete by School id.

Deletes a School Type.

Property

Value

Description

id*

string

The ID of the School Type

Process

Delete by School Type id.

State Actions

Retrieves just one State.

Property

Value

Description

id*

string

The ID of the State

Example

state = saveState({"name": "State 1", "code": 123456
state = getState(state.id)

Retrieves all States. If there are no existing states in the system, RapidIdentity will create one using a createState action set.

Property

Value

Description

pageSize

integer

The page size (required for a paging request)

pageNum

integer

The page number (defaults to 1 for a paging request)

Example

states = getAllStates()
stateId = " "
if (states.length) < 1) {
    state = saveState({"name": "State 1", "code": 123456
    stateID = state.id
    } else {
    stateId = states[0].id
    state = getState(stateID)

Updates a State.

Property

Value

Description

id*

string

The ID of the State

Example

idautoStateRec = createRecord(false)
addRecordFieldValue(idautoStateRec, 'name', stateName, false)
addRecordFieldValue(idautoStateRec, "code", stateCode, false)
idautoState = saveState(idautoStateRec)
return idautoState

Retrieves just one State relationship.

Property

Value

Description

stateid*

string

The state ID of the State relationship

user_id

expression

The user ID for the state relationships to retrieve

role

string

The role of the state relationships to retrieve

Example

stateRel = getStateRelationship(stateId, user_id)
stateRelId = " "
if stateRel.length < 1) {
    stateRel = savestateRelationship({"stateId": state.id, "userId": user_id, "role": ADMINISTRATOR
    } else {
    stateRelID = stateRel[0].id
    stateRel = getStateRelationship(stateRelId)
}

Retrieves all State Relationships. If there are no state relationships currently in the system, RapidIdentity will create one using a createStateRelationship action set.

Property

Value

Description

stateId

string

The ID for which to fetch state relationships

userId

string

The user ID for which to fetch state relationships

role

string

The role for which to fetch state relationships

pageSize

integer

The page size (required for a paging request)

pageNum

integer

The page number (defaults to 1 for a paging request)

Example

stateRels = getStateRelationships(stateId, user_id)
stateRelId = " "
if stateRels.length < 1) {
    stateRel = savestateRelationship({"stateId": state.id, "userId": user_id, "role": ADMINISTRATOR
    } else {
    stateRelID = stateRel[0].id
    stateRel = getStateRelationship(stateRelId)
}

Updates a State Relationship.

Property

Value

Description

stateId

string

The ID for which to fetch state relationships

userId

string

The user ID for which to fetch state relationships

role

string

The role for which to fetch state relationships

pageSize

integer

The page size (required for a paging request)

pageNum

integer

The page number (defaults to 1 for a paging request)

Example

state = saveState({"name": "State 1", "code": 123456
stateRel = savestateRelationship({"stateId": state.id, "userId": user_id, "role": ADMINISTRATOR
stateRel = getStateRelationship(stateRel.id)

Deletes a State Relationship.

Property

Value

Description

id*

string

The ID of the State Relationship

Process

Delete by State Relationship id.

Deletes a State.

Property

Value

Description

id*

string

The ID of the State

Process

Delete by State id.

Portal Adapter Actions
Core Actions

Define a connection to a Portal server and optionally login for a token.

Property

Value

Description

url*

text, expression, variable

The url of the Portal server.

username

text, expression, variable

The username for authentication to the Portal server.

password

password, string, expression, variable

The password for authentication to the Portal server.

login

boolean, expression, variable

Determines whether or not to login for an authentication token. If false, each Portal action will perform a full authentication. Set this to true if you are invoking 2 or more actions within this session.

remoteDebug

choice ('OFF', 'DEBUG', 'DEBUG_ALL'), text, expression, variable

Remote Portal request debug logging options. DEBUG: standard debug logging. DEBUG_ALL: extended debug logging (not recommended).

options

expression, variable

A record or JavaScript object with a field for each additional option. Currently defined fields are connectTimeout and socketTime which require a numeric value from 1 to 2147483647 (0x7FFFFFFF) that represents the number of milliseconds for the timeout, and 0 representing no timeout.

returnVariable

expression, variable

The name of the variable to be assigned to the return value

Example

connection = definePortalConnection("http://server.company.com", 
    "testuser1", <Password>, true)
connection = definePortalConnection("http://server.company.com", 
    "testuser1", <Password>, true, \'DEBUG\')

Creates/Retrieves the IdautoID value for a particular Role in LDAP

Property

Value

Description

connection*

expression, variable

the Portal connection definition

roleDN*

text, expression, variable

the DN of the Group in question

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

idautoID = getPortalIdautoIDForGroup(connection, 
    "CN=My Group,OU=groups,DC=example,DC=com")

Creates/Retrieves the IdautoID value for a particular User in LDAP

Property

Value

Description

connection*

expression, variable

the Portal connection definition

userDN*

text, expression, variable

the DN of the User in question

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

idautoID = getPortalIdautoIDForUser(connection, 
    "CN=Homer Simpson,OU=people,DC=example,DC=com")
Profiles Actions

Retrieve the Challenge Set information for a target DN

Property

Value

Description

connection*

expression, variable

the Portal connection definition

targetDN*

text, expression, variable

the DN of the target to query

returnVariable

expression, variable

name of the variable to be assigned to the return value

The returned object is a record which will have the following fields:

Field

Description

“challengePolicyId”

The ID of the ARMS Challenge Policy associated with the target

“adminQuestions”

The Admin questions required by the Challenge Policy (if any)

“numUserQuestions”

The number of User questions required by the Challenge Policy (may be 0)

Example

targetDN = "CN=user,OU=people,DC=example,DC=com"
challengeSetupDefn = getPortalChallengeSetPolicy(connection,
     targetDN)
challengePolicyId = getRecordFieldValue(challengeSetupDefn, 
    "challengePolicyId")
adminQuestions = getRecordFieldValues(challengeSetupDefn, 
    "adminQuestions")
numUserQuestions = getRecordFieldValue(challengeSetupDefn, 
    "numUserQuestions")

Determines if the provided password is valid for the specified User's current Portal Password Policy.

Property

Value

Description

returnVariable

expression, variable

name of the variable to be assigned to the return value

connection*

expression, variable

the Portal connection object obtained from invoking definePortalConnection

password*

text

the password to check for validity

userDNOrId

text, expression, variable

the ID or DN or the user to check password validity for

Example

portalConn = definePortalConnection("https://localhost:8443", "jdoe", <Password>, true)
isValid = isPasswordValidForPortalUser(portalConn, <Password>, "cn=jdoe,ou=employees,ou=people,o=idauto,dc=meta")
if (isValid)_ {
    log("The password is valid", "INFO")
} else {
    log("The password is invalid", "INFO")
}

Set challenge questions and answers for a target DN

Property

Value

Description

connection*

expression, variable

the Portal connection definition

targetDN*

text, expression, variable

the DN of the target whose challenge questions will be updated

challengePolicyId*

text, expression, variable

the ID of the Portal Challenge Policy for the target

adminQAs

text, expression, variable

Record containing Admin questions and associated answers

userQAs

text, expression, variable

Record containing User questions and associated answers

helpdeskQAs

text, expression, variable

Record containing Helpdesk questions and associated answers

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

adminQAs = createRecord(false)
addRecordFieldValue(adminQAs, "Admin Question 1", "Admin Answer 1", 
    false)
addRecordFieldValue(adminQAs, "Admin Question 2", "Admin Answer 2", 
    false)
userQAs = createRecord(false)
addRecordFieldValue(userQAs, "User Question 1", "User Answer 1", 
    false)
addRecordFieldValue(userQAs, "User Question 2", "User Answer 2", 
    false)
# Example of creating a Record from an object literal
helpdeskQAs = createRecordFromObject({"Helpdesk Question 1": 
    "Helpdesk Answer 1"})
success = setPortalChallengeSetAnswers(connection, targetDN, 
    challengePolicyId, adminQAs, userQAs, helpdeskQAs)

Retrieves the ID of the default Portal Password Policy.

Property

Value

Description

connection*

expression, variable

the Portal connection definition

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

defaultPolicyId = getPortalDefaultPasswordPolicyID(connection)

Retrieves the ID of the Portal Password Policy associated with a particular user.

Property

Value

Description

connection*

expression, variable

the Portal connection definition

userDNorID*

text, expression, variable

the DN or IdautoID of the target user

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

defaultPolicyId = getPortalPasswordPolicyID(connection)

Generates a random password for a user based on their current Portal Password Policy.

Property

Value

Description

connection*

expression, variable

the Portal connection definition

userDNorID*

text, expression, variable

the DN or IdautoID of the target user

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

randomPassword = generatePortalPasswordForUser(connection, 
    "CN=John Simpson,OU=people,DC=example,DC=com")

Generates a random password based on the specified Portal Password Policy ID.

Property

Value

Description

connection*

expression, variable

the Portal connection definition

policyId*

text, expression, variable

the Portal Password Policy ID

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

policyId = getPortalDefaultPasswordPolicyID(connection)
randomPassword = generatePortalPasswordForPolicy(connection, policyId)
Dashboard Actions

Increment the tally for a user-defined ROI Type

Property

Value

Description

connection*

expression, variable

the Portal connection definition

roiTypeId*

choice (dss.addDistributionListMember, dss.addGroupMember, dss.changePassword, dss.createAccount, dss.createDistributionList, dss.createGroup, dss.createMailbox, dss.deleteAccount, dss.deleteDistributionList, dss.deleteGroup, dss.deleteMailbox, dss.disableAccount, dss.disableMailbox, dss.enableAccount, dss.enableMailbox, dss.moveAccount, dss.moveDistributionList, dss.moveGroup, dss.removeDistributionListMember, dss.removeGroupMember, dss.renameAccount, dss.renameDistributionList, dss.renameGroup, dss.updateAccount, dss.updateDistributionList, dss.updateGroup, dss.updateMailbox) text, expression, variable

the ID of the ROI Type whose tally should be incremented

count

expression, variable

the number of tallies to generate (must be > 0). The default value is 1 if no value is provided

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

roiTally = incrementROITally(connection, "TestROITally")
log("ROI incremented = " + roiTally, "green")
Roles Actions

Deletes a Portal role.

Property

Value

Description

connection*

expression, variable

the Portal connection definition

roleDNOrID*

text, expression, variable

the DN or IdautoID of the role to delete

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

deleted = deletePortalRole(connection, 
    "CN=My Role,OU=groups,DC=example,DC=com")

Obtains the DN or IdAutoId of all members in the listed Role.

Property

Value

Description

connection*

expression, variable

The Identity Portal connection definition

roleDNsORId*

text, expression, variable

The DN or the IdAutoID of the user

returnVariable

expression, variable

Returns an array of Role DNs or IdAutoIDs

See openPortalRoleMembershipIterator

Initiate import of a particular new Portal role.

Property

Value

Description

connection*

expression, variable

the Portal connection definition

roleId*

text, expression, variable

the IdautoID of the role to import

syncAfterImport*

boolean, expression, variable

whether the imported role should be synced after importing

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

groupId = getIdautoIDForGroup(connection, 
    "CN=My New Group,OU=groups,DC=example,DC=com")
success = importPortalRole(connection, groupId, true)

Initiate import of new Portal roles.

Property

Value

Description

connection*

expression, variable

the Portal connection definition

syncAfterImport*

boolean, expression, variable

whether imported roles should be synced after the import completes

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

success = importPortalRoles(connection, true)

Property

Value

Description

connection*

expression, variable

The Identity Portal connection definition

userDNorID*

text, expression, variable

The DN or the IdAutoID of the user

roleDNsORIds*

expression, variable

An array of Role DNs or IdAutoIDs

returnVariable

expression, variable

Returns true or false.

Determines whether a listed user is a member of any of queried roles.

Property

Value

Description

connection*

expression, variable

The Identity Portal connection definition

userDNorID*

text, expression, variable

The DN or the IdAutoID of the user

roleDNsORIds*

expression, variable

An array of Role DNs or IdAutoIDs

returnVariable

expression, variable

Returns true or false.

Example

conn = definePortalConnection("https://localhost:8443", "username", 
    <Password>, true)
array = createArray(6)
insertArrayItem(array, 0, "CN=Role Managers,OU=managed,OU=groups,
    DC=test,DC=local")
insertArrayItem(array, 1, "0b0ad0e1-2222-3333-ceds-44se4444")
insertArrayItem(array, 2, "0ed8092a-29dw-23ub-sw19-23sdf09u")
insertArrayItem(array, 3, "sedrofle-234n-32fs-2wld-sadf343d")
insertArrayItem(array, 4, "34ajedf2-a232-adv0-a34w-adf3ljww")
result = isPortalUserInAllRoles(conn, 
    "34dsaer2-2342-saef-adv9-e4sdv039", array)
log(result)
log(" ")
result = isPortalUserInAnyRoles(conn, 
    "34dsaer2-2342-saef-adv9-e4sdv039", array)
log(result)
close(conn)

Opens an iterator over the members of a particular Portal Role.

Property

Value

Description

connection*

expression, variable

The Identity Portal connection definition

roleDNsORId*

text, expression, variable

The DN or the IdAutoID of the user

returnVariable

expression, variable

Returns an array of Role DNs or IdAutoIDs

Example

conn = definePortalConnection("https://localhost:8443", "username", 
    <Password>, true)
result = getPortalRoleMembership(conn, 
    "CN=Role Managers,OU=managed,OU=groups,DC=test,DC=local")
log(result)
#
# With membership array in hand, add two new members to the role 
    in the Roles module of Identity Portal
#
# Use the iterator to obtain the two new role members
#
records = openPortalRoleMembershipIterator(conn, 
    "CN=Role Managers,OU=managed,OU=groups,DC=test,DC=local")
forEach(record, records) {
 log(record)
}
close(conn)

Initiate synchronization of a Portal role.

Property

Value

Description

connection*

expression, variable

the Portal connection definition

roleDN*

text, expression, variable

the DN of the role

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

success = syncPortalRole(connection, "CN=testgroup1,OU=groups,
    DC=test,DC=idauto,DC=lab")

Sync membership among all Portal roles for a single user.

Property

Value

Description

connection*

expression, variable

the Portal connection definition

userDNOrID*

text, expression, variable

the DN or IdautoID of the user to sync

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

syncResult = syncPortalMembership(connection, "CN=Test User,
    OU=people,DC=example,DC=com")
if(hasRecordField(syncResult, "added") {
    forEach(addedDN, getRecordFieldValues(syncResult, "added")) {
        log( "The user was added to role " + addedDN )
    }
} else {
    log( "The user was added to no role" )
}
if (hasRecordField(syncResult, "removed")) {
    forEach(removedDN, getRecordFieldValues(syncResult, "removed")) {
        log("The user was removed from role " + removedDN)
    }
} else {
    log("The user was removed from no roles")
}
Workflow Actions

Get the ID of entitlement based on its name.

Property

Value

Description

connection*

expression, variable

the Portal connection definition

entitlementName*

text, expression, variable

the name of the entitlement

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

nameOfEntitlement = "LabMonitor"
entitlementID = getPortalEntitlementId(connection, nameOfEntitlement)

Start a Portal workflow, returning the workflow request ID.

Property

Value

Description

connection*

expression, variable

the Portal connection definition

type*

choice (GRANT, REVOKE), text, expression, variable

the workflow type

recipientId*

text, expression, variable

the idautoID of the workflow recipient

entitlementId*

text, expression, variable

the ID of the workflow entitlement

comments

text, expression, variable

optional workflow comments

previousRequestId

text, expression, variable

the ID of the workflow request that granted the entitlement to be revoked (required for REVOKE of a multi-bound entitlement)

formData

expression, variable

optional Record or object containing form data

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

nameOfEntitlement = "LabMonitor"
entitlementId = getPortalEntitlementID(connection, 
    nameOfEntitlement)
workFlowStarted = startPortalWorkflow(connection, "GRANT", 
    "cn=testuser1,OU=People,DC=test,DC=idauto,DC=lab", entitlementId, 
    "Start the LabMonitor Workflow")
QuickSchools Adapter Actions

Define a connection to a QuickSchools Server.

Property

Value

Description

apiKey*

password, string, expression, variable

Secret key for authentication to the QuickSchools REST service

options

expression, variable

A record or JavaScript object with a field for each additional option. Currently defined fields are connectTimeout and socketTime which require a numeric value from 1 to 2147483647 (0x7FFFFFFF) that represents the number of milliseconds for the timeout, and 0 representing no timeout.

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

conn = defineQuickSchoolsConnection(<Password>)

Get a QuickSchools record.

Property

Value

Description

connection*

expression, variable

The connection to the QuickSchools Server

type*

choice (class, parent, section, student, student sections, teacher), text, expression, variable

The type of record to retrieve

id*

text, expression, variable

The ID of the record

fields

text, expression, variable

A comma separated list of additional attributes to retrieve

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

record = getQuickSchoolsRecord(conn, "student", "415330")

Get QuickSchools Records.

Property

Value

Description

connection*

expression, variable

The connection to the QuickSchools Server

type*

choice (classes, parents, school, schools, sections, students, student sections, teachers), text, expression, variable

The type of records to retrieve

filter

expression, variable

A record to filter by

fields

text, expression, variable

A comma separated list of additional attributes to retrieve

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

records = getQuickSchoolsRecords(conn, "students")

Open QuickSchools record iterator.

Property

Value

Description

connection*

expression, variable

The connection to the QuickSchools Server

type*

choice (parents, students, student sections, teachers), text, expression, variable

The type of record to retrieve

filter

expression, variable

A record to filter by

fields

text, expression, variable

A comma separated list of additional attributes to retrieve

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

it = openQuickSchoolsRecordIterator(conn, "students")
forEach(record, it) {
# process record
}

Create or Update a QuickSchools record.

Property

Value

Description

returnVariable

expression, variable

name of the variable to be assigned to the value

connection*

expression, variable

The connection to the QuickSchools Server

type*

choice (classes, parents, school, schools, sections, students, student sections, teachers), text, expression, variable

The type of records to save

id

text, expression, variable

The ID of the record to update. This is required for resource types of parents, sections, or assignments

record*

text, expression, variable

the QuickSchools record to save

Field

Type

Description

Read

Create

Update

age

integer

the age of the student

Yes

No

No

classCode

string

the grade level abbreviation

Yes

No

No

classId

integer

the identifier for the class

Yes

No

No

className

string

the grade level of the student

Yes

No

No

fullName

string

the full name of the student

Yes

No

No

gender

string

the gender of the student

Yes

No

No

id

integer

unique student identifier

Yes

No

No

preferredName

string

the preferred name of the student

Yes

No

No

Field

Type

Description

homeroomId

integer

the unique identifier of the student's homeroom

classId

integer

the unique identifier of the student's grade level

parentId

integer

the unique identifier of the student's parent

showHasLeft

boolean

if true, includes students who have graduated

showDeleted

boolean

if true, includes deleted students

studentNumbers

string

a student number, or a comma separated list of student numbers

search

string,integer

the student's full name, the student's number, or class name

  • firstName

  • middleName

  • familyName

  • suffix

  • studentNumber

  • enrollmentDate

  • parents

  • siblings

  • homeroomId

  • homeroomTeacher

  • multiLineResidentialAddress

  • country

  • zip

  • state

  • city

  • phone

  • cellPhone

  • fax

  • email

  • nationality

  • confidentialInformation

  • deleted

  • hasLeft

  • isExpelled

  • customFields

Field

Type

Description

Read

Create

Update

fullName

string

the full name of the teacher

Yes

No

No

gender

string

the gender of the teacher

Yes

No

No

id

integer

unique teacher identifier

Yes

No

No

title

string

the title of the teacher

Yes

No

No

Field

Type

Description

employeeNumbers

string

an employee number, or a comma separated list of employee numbers

search

string,integer

the teacher's full name or employee name

Field

Type

Description

Read

Create

Update

fullName

string

the full name of the parent

Yes

No

No

id

integer

unique parent identifier

Yes

No

No

  • students

  • country

  • zip

  • state

  • city

  • cellPhone

  • homePhone

  • email

Field

Type

Description

Read

Create

Update

abbreviation

string

the grade level abbreviation

Yes

No

No

id

integer

unique class identifier

Yes

No

No

name

string

the grade level

Yes

No

No

sortOrder

integer

the key used for sorting classes

Yes

No

No

Field

Type

Description

Read

Create

Update

classId

integer

the identifier for the class

Yes

No

No

className

string

the grade level of the section

Yes

No

No

id

integer

unique section identifier

Yes

No

No

sectionCode

string

the code of the section

Yes

No

No

sectionName

string

the name of the section

Yes

No

No

teachers

string

a list of section teachers and their details

Yes

No

No

Field

Type

Description

Read

Create

Update

address

string

the address of the school

Yes

No

No

email

string

the email address of the school

Yes

No

No

id

integer

unique school identifier

Yes

No

No

phone

string

the phone number of the school

Yes

No

No

principalName

string

the name of the school principle

Yes

No

No

schoolCode

string

the code of the school

Yes

No

No

schoolName

string

the name of the school

Yes

No

No

website

string

the website for the school

Yes

No

No

Field

Type

Description

subdomain

string

the subdomain for a school

Field

Type

Description

Read

Create

Update

fullName

string

the full name of the student

Yes

No

No

id

integer

unique student identifier

Yes

No

No

sections

string

a list of enrolled sections and their details

Yes

No

No

Filter Example

record = createRecord(true)
setRecordFieldValue(record, "studentNumbers", "S-000003,S-000010,
    S-000006")
records = getQuickSchoolsRecords(conn, "students", record)

Search Example

record = createRecord(true)
setRecordFieldValue(record, "search", "Amber Phillips")
records = getQuickSchoolsRecords(conn, "students", record)

Additional Fields Example

records = getQuickSchoolsRecords(conn, "students", "city, state, 
    zip, country, cellPhone, parents") 
Documentation from QuickSchools

QuickSchools API Documentation.

To obtain an API Key for QuickSchools, click QuickSchools.

Schoology Adapter Actions

Define a connection to Schoology server.

Property

Value

Description

consumerKey*

text, expression, variable

the consumer key

secretKey*

password, string, expression, variable

the secret key

options

expression, variable

A record or JavaScript object with a field for each additional option. Currently defined fields are connectTimeout and socketTime which require a numeric value from 1 to 2147483647 (0x7FFFFFFF) that represents the number of milliseconds for the timeout, and 0 representing no timeout.

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

connection = defineSchoologyConnection("myConsumerKey",<myPassword>)

Delete/Deactivate the specified Schoology User.

Property

Value

Description

connection*

expression, variable

the Schoology connection

id*

text, expression, variable

the user Schoology ID

reason

text, expression, variable

comment on reason for deactiving

keepEnrollments

boolean, expression, variable

keep history of user's grad and attendance data

emailNotification

boolean, expression, variable

send email notification to user that the account was deactived.

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

deletedUser = deleteSchoologyUser(connection, "1234")

Gets a specified inactive Schoology User record.

Property

Value

Description

connection*

expression, variable

the Schoology connection definition

id*

text, expression, variable

the user Schoology ID

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

inactive = getInactiveSchoologyUsers(connection) 

Gets inactive Schoology User records.

Property

Value

Description

connection*

expression, variable

the Schoology connection

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

inactive = getInactiveSchoologyUsers(connection) 

Get the specified Schoology User record.

Property

Value

Description

connection*

expression, variable

the Schoology connection

id*

text, expression, variable

the Schoology id of the User

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

user = getSchoologyUser(connection, "1234")

Gets Schoology User records.

Property

Value

Description

connection*

expression, variable

the Schoology connection

filterRecord

expression, variable

a record containing filter parameters

returnVariable

expression, variable

name of the variable to be assigned to the return value

Filters can be defined by creating a record object and populating the record with the fields and values to filter by. The following are the fields that can be used as filters.

Field

Value

Description

building_id

text, variable

Only return users for the given building.

role_ids

text, variable

(Comma-separated list of IDs) Only return users who belong to the given role IDs

parent_access_codes

boolean, variable

Add in parent access codes for each of the returned users (set to 1)

school_uids

text, variable

A comma-separated list of school_uids within the school (up to 50 at one time)

Example

#define the connection
connection = defineSchoologyConnection("myConsumerKey",<Password>)
# create record filter
{
fr = createRecord(false)
addRecordFieldValue(fr, "role_id", "Student")
}
list = getSchoologyUsers(connection, fr)

Open Schoology inactive User Iterator.

Property

Value

Description

connection*

expression, variable

the Schoology connection

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

#define the connection
connection = defineSchoologyConnection("myConsumerKey",<Password>)
inactiveUser = openSchoologyInactiveUserIterator(connection)
forEach(inactiveUser, inactiveUser) {
...
}

Get Schoology User records.

Property

Value

Description

connection*

expression, variable

the Schoology connection

filterRecord

expression, variable

a record containing filter parameters

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

#define the connection
connection = defineSchoologyConnection("myConsumerKey",<Password>)
# create record filter
{
fr = createRecord(false)\n addRecordFieldValue(fr, "role_id", "Student")
}
users = openSchoologyUserIterator(connection, fr)
forEach(user, users) {
...
}

Reactivates a specified list of Schoology Users.

Property

Value

Description

connection*

expression, variable

the Schoology connection

ids*

expression, variable

an array of Schoology ids to be reactivated

reenroll*

boolean, expression, variable

Set to true in the request body to place the user back into their courses and groups.

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

reactivateSchoologyUsers(connection,"1234",true)

Create/Update an Schoology User record. Note you cannot update inactive users.

Property

Value

Description

connection*

expression, variable

the Schoology connection

record*

expression, variable

the Schoology User record

returnVariable

expression, variable

name of the variable to be assigned to the return value

Field

Value

Description

school_uid

text, expression, variable

The user's unique ID (e.g. student ID, SIS ID)

name_first

text, expression, variable

The user's first name

name_last

text, expression, variable

The user's last name

role_id

text, expression, variable

The ID of the role to which you would like to assign the user

username

text, expression, variable

The user's username (either a username or email address is required for each user)

primary_email

text, expression, variable

The user's primary email address (either a username or email address is required for each user)

To see additional optional fields go to the user api.

Example

connection = defineSchoologyConnection("myConsumerKey",<Password>)
# create the new user record
addTest = createRecord(false)
setRecordFieldValue(addTest, "school_uid", "testUser1234")
setRecordFieldValue(addTest, "name_first", "MrTest")
setRecordFieldValue(addTest, "name_last", "Tester")
setRecordFieldValue(addTest, "role_id", "296904")
setRecordFieldValue(addTest, "additional_buildings", "456")
setRecordFieldValue(addTest, "username", "TestMaster2")
# attempt the add
newUser = saveSchoologyUser(connection, addTest)
log(newUser)

Creates multiple Schoology User records.

Property

Value

Description

connection*

expression, variable

the Schoology connection

records*

expression, variable

the array of records to save

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

# create users
    (true) {
        # user 1 {
            
            user1 = createRecord(false)
            setRecordFieldValue(user1, "school_uid", "u1")
            setRecordFieldValue(user1, "name_first", "Sara")
            setRecordFieldValue(user1, "name_last", "Doe")
            setRecordFieldValue(user1, "role_id", "296904")
            setRecordFieldValue(user1, "additional_buildings", "456")
            setRecordFieldValue(user1, "username", "user1")
        }
        # user 2 {
            
            user2 = createRecord(false)
            setRecordFieldValue(user2, "school_uid", "u2")
            setRecordFieldValue(user2, "name_first", "Ryan")
            setRecordFieldValue(user2, "name_last", "Jordan")
            setRecordFieldValue(user2, "role_id", "296904")
            setRecordFieldValue(user2, "additional_buildings", "456")
            setRecordFieldValue(user2, "username", "jryan")
        }
        # user 3 {
            
            user3 = createRecord(false)
            setRecordFieldValue(user3, "school_uid", "u3")
            setRecordFieldValue(user3, "name_first", "Austin")
            setRecordFieldValue(user3, "name_last", "Powell")
            # role ids can also be set using their title rather 
                than their id value
            setRecordFieldValue(user3, "role_id", "Student")
            setRecordFieldValue(user3, "additional_buildings", "456")
            setRecordFieldValue(user3, "username", "paustin")
        }
        # create array of user records {
            
            users = createArray()
            appendArrayItem(users, user1) appendArrayItem(users, user2)
            appendArrayItem(users, user3)
        }
    }
# connection
connection = defineSchoologyConnection("myConsumerKey", < Password > )
ret = saveSchoologyUsers(connection, users)

Example

connection = defineSchoologyConnection("myConsumerKey", < Password > )
# create the new user record {
    addTest = createRecord(false)
    setRecordFieldValue(addTest, "school_uid", "testUser12345")
    setRecordFieldValue(addTest, "name_first", "MrTest")
    setRecordFieldValue(addTest, "name_last", "Tester")
    setRecordFieldValue(addTest, "role_id", "296904")
    setRecordFieldValue(addTest, "additional_buildings", "456")
    setRecordFieldValue(addTest, "username", "TestMaster3")
}
# attempt the add
newUser = saveSchoologyUser(connection, addTest)
uid = getRecordFieldValue(newUser, "uid")
log(newUser)# get the user
user = getSchoologyUser(connection, uid)
log(user)# delete the user\ nret = deleteSchoologyUser(connection, uid)
log(ret)# reactivate the user
reactivateList = createArray()
appendArrayItem(reactivateList, uid)
user = reactivateSchoologyUsers(connection, reactivateList, false)
log(user)
ServiceNow Adapter Actions

Define a connection to a ServiceNow Server.

Property

Value

Description

url*

text, expression, variable

the Base URL of the ServiceNow web service

username*

text, expression, variable

Username for authentication to the ServiceNow web service

password*

password, string, expression, variable

Password for authentication to the ServiceNow web service

options

expression, variable

A record or JavaScript object with a field for each additional option. Currently defined fields are connectTimeout and socketTime which require a numeric value from 1 to 2147483647 (0x7FFFFFFF) that represents the number of milliseconds for the timeout, and 0 representing no timeout.

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

Global.snUrl = "https://sandbox.service-now.com"
Global.snUser = "admin"
Global.snPwd = "admin"
session = defineServiceNowConnection(Global.snUrl, Global.snUser, 
    Global.snPwd)

Deletes the record in ServiceNow. Returns a success boolean.

Property

Value

Description

connection*

expression, variable

the ServiceNow connection definition

objectType*

text, expression, variable

The ServiceNow object type

id*

text, expression, variable

The sys_id of the ServiceNow record to delete.

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

users = getServiceNowRecords(session, "sys_user", "user_name=joh.doe, 1)
if(users.length) {
result = deleteServiceNowRecord(session, "sys_user", users[0][\'sys_id\'])
}

Gets a given ServiceNow Record.

Property

Value

Description

connection*

expression, variable

the ServiceNow connection definition

objectType*

text, expression, variable

The ServiceNow object type

id*

text, expression, variable

The sys_id of the ServiceNow record.

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

user = getServiceNowRecord(session, "02826bf03710200044e0bfc8bcbe5d55")

Get All ServiceNow Records.

Property

Value

Description

connection*

expression, variable

the ServiceNow connection definition

objectType*

text, expression, variable

The ServiceNow object type

filter

text, expression, variable

The filter used to limit results. Can either be an encoded query as specified by ServiceNow, or a Record example object.

limit

expression, variable

The maximum number of records to return. Defaults to all objects.

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

users = getServiceNowRecords(sessionServiceNow, "sys_user",
    "user_name=john.doe", 1)

Open a ServiceNow Record Iterator.

Property

Value

Description

connection*

expression, variable

the ServiceNow connection definition

objectType*

text, expression, variable

The ServiceNow object type

filter

text, expression, variable

The filter used to limit results. Can either be an encoded query as specified by ServiceNow, or a Record example object.

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

it = openServiceNowRecordIterator(sessionServiceNow, "sys_user")
forEach(user, it) {
# do something with user
}
close(it)

Creates or updates the record in ServiceNow. Returns the id of the object.

Property

Value

Description

connection*

expression, variable

the ServiceNow connection definition

objectType*

text, expression, variable

The ServiceNow object type

record*

text, expression, variable

A Record object containing the fields you want to save. If 'sys_id' is set, an update will be performed, otherwise a create will be performed.

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

userTemplate = createRecord(true)
setRecordFieldValue(userTemplate, "user_name", "john.doe")
setRecordFieldValue(userTemplate, "first_name", "John")
setRecordFieldValue(userTemplate, "user_name", "john.doe")
setRecordFieldValue(userTemplate, "user_name", "john.doe")
user = saveServiceNowRecord(sessionServiceNow, "sys_user", userTemplate)
SharePoint Adapter Actions

Add a member to a SharePoint Group

Property

Value

Description

connection*

expression, variable

the SharePoint connection definition

groupName*

text, expression, variable

the name of the Group

userLoginName*

text, expression, variable

the login name of the User to add to the Group

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

memberAdded = addSharePointGroupMember(session, 
    "testGroup", "Test\\\\testuser")

Define a connection to SharePoint.

Property

Value

Description

siteUrl*

text, expression, variable

URL of the SharePoint site

username

text, expression, variable

username for authentication to SharePoint

password

password, string, expression, variable

password for authentication to SharePoint

options

expression, variable

A record or JavaScript object with a field for each additional option. Currently defined fields are connectTimeout and socketTime which require a numeric value from 1 to 2147483647 (0x7FFFFFFF) that represents the number of milliseconds for the timeout, and 0 representing no timeout.

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

Global.spHost = "sharepoint.test.local"
Global.spUser = "Test\\\\Administrator"
Global.spPwd = <Password>
session = defineSharePointConnection("http://" + Global.spHost, 
    Global.spUser,<Password>)

Delete a SharePoint Group record.

Property

Value

Description

connection*

expression, variable

the SharePoint connection definition

groupName*

text, expression, variable

the name of the SharePoint Group to delete

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

deleted = deleteSharePointGroup(session, "testGroup") 

Delete a member from a SharePoint Group.

Property

Value

Description

connection*

expression, variable

the SharePoint connection definition

groupName*

text, expression, variable

the id of the group

userLoginName*

text, expression, variable

the id of the object to delete from the Group

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

memberDeleted = deleteSharePointGroupMember(session, "testGroup", 
    "Test\\\\testuser")

Get a SharePoint Group record.

Property

Value

Description

connection*

expression, variable

the SharePoint connection definition

groupName*

text, expression, variable

the name of the SharePoint Group to get

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

group = getSharePointGroup(session, "testGroup")

Get SharePoint Group records.

Property

Value

Description

connection*

expression, variable

the SharePoint connection definition

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

groups = getSharePointGroups(session) 

Get a SharePoint User record.

Property

Value

Description

connection*

expression, variable

the SharePoint connection definition

loginName*

text, expression, variable

the loginName of the SharePoint User to get

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

user = getSharePointUser(session, "Test\\\\testuser") 

Get SharePoint User records.

Property

Value

Description

connection*

expression, variable

the SharePoint connection definition

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

users = getSharePointUsers(session) 

Rename a SharePoint Group record.

Property

Value

Description

connection*

expression, variable

the SharePoint connection definition

groupName*

text, expression, variable

the name of the SharePoint Group to rename

newName*

text, expression, variable

the new name

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

renamed = renameSharePointGroup(session, "testGroup", "testGroup1")

Create/Update a SharePoint Group record.

Property

Value

Description

connection*

expression, variable

the SharePoint connection definition

record*

expression, variable

the record to save

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

groupTemplate = createRecord()
setRecordField(groupTemplate, "Name", "testGroup")
created = saveSharePointGroup(session, groupTemplate)

Create/Update a SharePoint User record.

Property

Value

Description

connection*

expression, variable

the SharePoint connection definition

record*

expression, variable

the record to save

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

userTemplate = createRecord()
setRecordField(userTemplate, "LoginName", "Test\\\\testUser")
setRecordField(userTemplate, "Name", "testUser")
created = saveSharePointUser(session, userTemplate)

Field

Read-Only

Description

LoginName (required)

Y

User login name (from the Authentication Provider, usually AD - must exist in the provider before can be created in SharePoint)

Name

N

Display Name

Email

N

User e-mail address

Notes

N

Descriptive notes about User

Groups

Y

List of Groups that the User is a member of

ID

Y

Internal SharePoint ID

IsDomainGroup

Y

Domain group flag

IsSiteAdmin

Y

Site administrator flag

SID

Y

Security ID

Field

Read-Only

Description

Name (required)

Y

Name of Group

Description

N

Description of Group

OwnerIdentifier

N

Name of Group or LoginName of User that owns this group

OwnerType

N

The type of the OwnerIdentitifier: “user” or “group”

Users

Y

List of Users that are members of Group

ID

Y

Internal SharePoint ID

OwnerID

Y

Internal SharePoint ID of Owner

OwnerIsUser

Y

Owner type flag flag

Text Adapter Actions

Open a Delimited Text file for reading.

Property

Value

Description

filesystem

expression, variable

the filesystem definition to use (default: dss server managed files)

fileName*

text, expression, variable

the name of the Delimited Text input file

charSet

text, expression, variable

the character encoding of the file (default: ISO-8859-1)

fieldNames

text, expression, variable

comma separated string containing the names of the fields in each Record

firstRecordHandling

choice (Normal, Field Names, Skip), text, expression, variable

how to handle the first Record of the file

fieldSeparator

text, expression, variable

the field separator character (default: ',')

quoteCharacter

text, expression, variable

the quote character (default: '"')

escapeCharacter

text, expression, variable

the quote character (default: the quoteCharacter)

strictQuoteHandling

boolean, expression, variable

true if strict quote handling should be enforced (default: false)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

csvInput = openDelimitedTextInput("input.csv", "utf-8", 
    "fname,lname,dept,loc,job,status,type", "Skip", ",", "\\"", 
    "\\"", false)

Open a Delimited Text file for writing.

Property

Value

Description

filesystem

expression, variable

the filesystem definition to use (default: dss server managed files)

fileName*

text, expression, variable

the name of the Delimited Text output file

appendToFile

boolean, expression, variable

true if the file should be appended to (default: false)

charSet

text, expression, variable

the character encoding of the file (default: ISO-8859-1)

fieldNames*

text, expression, variable

comma separated string containing the names of the fields in each Record

outputHeaderRecord

boolean, expression, variable

true if a header Record should be output containing the field names (default: false)

fieldSeparator

text, expression, variable

the field separator character (default: ',')

quoteCharacter

text, expression, variable

the quote character (default: '"')

escapeCharacter

text, expression, variable

the quote character (default: the quoteCharacter)

eol

expression, variable

the character(s) to use as end-of-line (default: '\n')

quoteAllFields

boolean, expression, variable

quote all fields (default: false)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

csvOutput = openDelimitedTextOutput("output.csv", "utf-8", 
    "fname,lname,dept,loc,job,status,type", true, ",", "\\"", 
    "\\"", false) 

Open an LDIF file for writing.

Property

Value

Description

filesystem

expression, variable

the filesystem definition to use (default: dss server managed files)

fileName*

text, expression, variable

the name of the LDIF output file

appendToFile

boolean, expression, variable

true if the file should be appended to (default: false)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

ldifOutput = openLDIFOutput("output.ldif", false) 

Open a Text file for reading.

Property

Value

Description

filesystem

expression, variable

the filesystem definition to use (default: dss server managed files)

fileName*

text, expression, variable

the name of the Delimited Text input file

charSet

text, expression, variable

the character encoding of the file (default: ISO-8859-1)

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

textInput = openTextInput("input.txt", "utf-8", false) 

Open a Text file for writing.

Property

Value

Description

filesystem

expression, variable

the filesystem definition to use (default: dss server managed files)

fileName*

text, expression, variable

the name of the Delimited Text output file

appendToFile

boolean, expression, variable

true if the file should be appended to (default: false)

charSet

text, expression, variable

the character encoding of the file (default: ISO-8859-1)

eol

expression, variable

the character(s) to use as end-of-line (default: '\n')

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

textOutput = openTextOutput("output.txt", false, "utf-8", false, 
    "\\r\\n")

Put a line to a Text Output.

Property

Value

Description

textOutput*

expression, variable

the Text Output

line*

expression, variable

the output line

Example

putTextOutputLine(textOutput, "The quick brown fox jumped over 
    the lazy dog.") 

Put a Record to a Text Output.

Property

Value

Description

textOutput*

expression, variable

the Text Output

record*

expression, variable

the output Record

Example

record = createRecord(, )
setRecordFieldValue(record, "fname", "John")
setRecordFieldValue(record, "lname", "Doe")
setRecordFieldValue(record, "dept", "Sales")
setRecordFieldValue(record, "loc", "CA")
setRecordFieldValue(record, "job", "Manager")
setRecordFieldValue(record, "status", "Active")
setRecordFieldValue(record, "type", "Full-Time")
putTextOutputRecord(textOutput, record)

Rewind Text Input back to the beginning.

Property

Value

Description

textInput*

expression, variable

the Text Input

Example

rewindTextInput(csvInput) 

Example

# open csv input file using first line as field names
csvInput = openDelimitedTextInput("input.csv", "utf-8", 1, \',\\'
    "\\'"\false)
# open csv output file using specified field names, don't write 
    header, append if existing file
csvOutput = openDelimitedTextOutput("input.csv", false, "utf-8", 
    "sn,givenName,gender,species", true, \'\\n\')
# open ldif output file
ldifOutput = openLDIFOutput("output.ldif")
# loop through input records
forEach(record, csvInput) {
    # write record to output csv
    putTextOutputRecord(output, record)
}
# add dn and also write to output ldif
setRecordFieldValue(record, record[\'@dn\'] , "cn=" + 
    record[\'givenName\'] + " " + record[\'sn\'] + 
        "OU=Staff,OU=Internal,DC=test,DC=local")
putTextOutputRecord(output, ldifOutput)
close(csvInput)
close(csvOutput)
close(ldifOutput)

Example

# read lines from input file, transform to uppercase, and write to 
    output file
lineInput = openTextInput("input.txt", "utf-8")
lineOutput = openTextOutput("output.txt", "utf-8", "\\n")
forEach(line, lineInput) {
line = stringToUpper(line)\n putTextOutputLine(lineOutput, line)
}
close(lineOutput)
close(lineInput)
TIES Adapter Actions

Define a connection to a TIES Server.

Property

Value

Description

url*

text, expression, variable

the Base URL of the TIES REST service, not including page number

apiKey*

text, expression, variable

API key for authentication to the TIES REST service

secretKey*

password, string, expression, variable

Secret key for authentication to the TIES REST service

districtNumber*

text, expression, variable

The District Number for use with the TIES REST service

options

expression, variable

A record or JavaScript object with a field for each additional option. Currently defined fields are connectTimeout and socketTime which require a numeric value from 1 to 2147483647 (0x7FFFFFFF) that represents the number of milliseconds for the timeout, and 0 representing no timeout.

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

Global.tiesURL = "https://api.tiescloud.net"
Global.tiesApiKey = "feeddeadbeef"
Global.tiesSecretKey = <Password>
Global.tiesDistrictNumber = 4200000000
session = defineTIESConnection(Globale.tiesURL, Global.tiesApiKey, 
    Global.tiesSecretKey, Global.tiesDistrictNumber)

Get All TIES Family Records.

Property

Value

Description

connection*

expression, variable

the TIES connection definition

filter

text, expression, variable

Any additional parameters to pass to the TIES REST service

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

filter = createRecord()
setRecordFieldValue(filter, "StudentIds", student.StudentId)
families = getTIESFamilies(session, filter)

Get a given TIES Family Record.

Property

Value

Description

connection*

expression, variable

the TIES connection definition

id*

text, expression, variable

The ID of the family

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

family = getTIESFamily(session, "1234") 

Gets a given TIES Staff Member Record.

Property

Value

Description

connection*

expression, variable

the TIES connection definition

id*

text, expression, variable

The ID of the Staff Member

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

staffMember = getTIESStaffMember(session, "1234") 

Get All TIES Staff Member Records.

Property

Value

Description

connection*

expression, variable

the TIES connection definition

filter

text, expression, variable

Any additional parameters to pass to the TIES REST service

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

teachers = getTIESStaffMembers(session) 

Gets a given TIES Student Record.

Property

Value

Description

connection*

expression, variable

the TIES connection definition

id*

text, expression, variable

The ID of the student

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

student = getTIESStudent(session, "4567") 

Get All TIES Student Records.

Property

Value

Description

connection*

expression, variable

the TIES connection definition

filter

text, expression, variable

Any additional parameters to pass to the TIES REST service

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

filter = createRecord()
setRecordFieldValue(filter, "SchoolYear", "2015")
setRecordFieldValue(filter, "Grade", "12")
students = getTIESStudents(session, filter)

Open TIES Family Iterator.

Property

Value

Description

connection*

expression, variable

the TIES connection definition

filter

text, expression, variable

Any additional parameters to pass to the TIES REST service

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

filter = createRecord()
setRecordFieldValue(filter, "StudentIds", student.StudentId)
it = openTIESFamilyIterator(session, filter)

Open TIES Staff Member Iterator.

Property

Value

Description

connection*

expression, variable

the TIES connection definition

filter

text, expression, variable

Any additional parameters to pass to the TIES REST service

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

it = openTIESStaffMemberIterator(session) 

Open TIES Student Iterator.

Property

Value

Description

connection*

expression, variable

the TIES connection definition

filter

text, expression, variable

Any additional parameters to pass to the TIES REST service

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

filter = createRecord()
setRecordFieldValue(filter, "SchoolYear", "2015")
setRecordFieldValue(filter, "Grade", "12")
it = openTIESStudentIterator(session, filter)
Web Services Adapter Actions

All HTTP actions return a record with the following fields:

Field

Description

statusCode

the HTTP status code returned from the server

statusReason

the descriptive name of the HTTP status code returned from the server

headers

a Record containing the HTTP header fields returned from the server

data

the data returned from the server. Will be E4X XML object if the data is detected to be XML, an ECMAScript object if detected to be JSON, a String if detected to be any other kind of text, and a byte array if anything else

All HTTP actions may also return undefined in the event of any error that doesn't result in at least an HTTP status.

Perform an HTTP DELETE operation.

Property

Value

Description

url*

text, expression, variable

the url

headers

expression, variable

Record or Object containing HTTP header fields

username

text, expression, variable

username for authentication to the url

password

password, string, expression, variable

password for authentication to the url

options

expression, variable

A record or JavaScript object with a field for each additional option. Currently defined fields are connectTimeout and socketTimeout which require a numeric value from 1 to 2147483647 (0x7FFFFFFF) that represents the number of milliseconds for the timeout, and 0 representing no timeout.

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

result = httpDELETE("http://httpbin.org/delete")
log(result ? result.statusCode + " " + result.statusReason + "\n" 
    + toJSON(result.data, true) : "Missing Result")

Perform an HTTP GET operation.

Property

Value

Description

url*

text, expression, variable

the url

headers

expression, variable

a Record or Object containing HTTP header fields

username

text, expression, variable

username for authentication to the url

password

password, string, expression, variable

password for authentication to the url

options

expression, variable

A record or JavaScript object with a field for each additional option. Currently defined fields are connectTimeout and socketTime which require a numeric value from 1 to 2147483647 (0x7FFFFFFF) that represents the number of milliseconds for the timeout, and 0 representing no timeout.

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

result = httpGET("http://httpbin.org/get")
log(result ? result.statusCode + " " + result.statusReason + "\n" + toJSON(result.data, true) : "Missing Result")

Perform an HTTP HEAD operation.

Property

Value

Description

url*

text, expression, variable

the url

headers

expression, variable

Record or Object containing HTTP header fields

username

text, expression, variable

username for authentication to the url

password

password, string, expression, variable

password for authentication to the url

options

expression, variable

A record or JavaScript object with a field for each additional option. Currently defined fields are connectTimeout and socketTimeout which require a numeric value from 1 to 2147483647 (0x7FFFFFFF) that represents the number of milliseconds for the timeout, and 0 representing no timeout.

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

result = httpHEAD("http://httpbin.org/get")
log(result ? result.statusCode + " " + result.statusReason + "\n" + toJSON(result.headers, true) : "Missing Result")

Perform an HTTP OPTIONS operation.

Property

Value

Description

url*

text, expression, variable

the url

headers

expression, variable

Record or Object containing HTTP header fields

username

text, expression, variable

username for authentication to the url

password

password, string, expression, variable

password for authentication to the url

options

expression, variable

A record or JavaScript object with a field for each additional option. Currently defined fields are connectTimeout and socketTimeout which require a numeric value from 1 to 2147483647 (0x7FFFFFFF) that represents the number of milliseconds for the timeout, and 0 representing no timeout.

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

result = httpOPTIONS("http://httpbin.org/get")
log(result ? result.statusCode + " " + result.statusReason + "\n" + toJSON(result.headers, true) : "Missing Result")

Perform an HTTP PATCH operation.

Property

Value

Description

url*

text, expression, variable

the url

headers

expression, variable

Record or Object containing HTTP header fields

data

expression, variable

Data to post

username

text, expression, variable

username for authentication to the url

password

password, string, expression, variable

password for authentication to the url

options

expression, variable

A record or JavaScript object with a field for each additional option. Currently defined fields are connectTimeout and socketTimeout which require a numeric value from 1 to 2147483647 (0x7FFFFFFF) that represents the number of milliseconds for the timeout, and 0 representing no timeout.

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

jsonRestMessage = toJSON({surname: "Jon", givenName: "Doe"})
result = httpPATCH("http://httpbin.org/patch", {"Content-Type": "application/json"}, jsonRestMessage, "user",<Password>)
log(result ? result.statusCode + " " + result.statusReason + "\n" + toJSON(result.data, true) : "Missing Result")

Perform an HTTP POST operation.

Property

Value

Description

url*

text, expression, variable

the url

headers

expression, variable

Record or Object containing HTTP header fields

data

expression, variable

Data to post

username

text, expression, variable

username for authentication to the url

password

password, string, expression, variable

password for authentication to the url

options

expression, variable

A record or JavaScript object with a field for each additional option. Currently defined fields are connectTimeout and socketTimeout which require a numeric value from 1 to 2147483647 (0x7FFFFFFF) that represents the number of milliseconds for the timeout, and 0 representing no timeout.

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

soapMessage =
  <Envelope>
    <Body>
      <thankYou xmlns="urn:idauto:dss:samples:thankYouServer"/>
    </Body>
  </Envelope>

result = httpPOST("http://httpbin.org/post", {"Content-Type": "application/xml", SOAPAction: "thankYou"}, soapMessage, "user",<Password>)
log(result ? result.statusCode + " " + result.statusReason + "\n" + toJSON(result.data, true) : "Missing Result")

Perform an HTTP PUT operation.

Property

Value

Description

url*

text, expression, variable

the url

headers

expression, variable

Record or Object containing HTTP header fields

data

expression, variable

Data to post

username

text, expression, variable

username for authentication to the url

password

password, string, expression, variable

password for authentication to the url

options

expression, variable

A record or JavaScript object with a field for each additional option. Currently defined fields are connectTimeout and socketTimeout which require a numeric value from 1 to 2147483647 (0x7FFFFFFF) that represents the number of milliseconds for the timeout, and 0 representing no timeout.

returnVariable

expression, variable

name of the variable to be assigned to the return value

Example

formMessage = "surname=Doe&givenName=John"
result = httpPUT("http://httpbin.org/put", {"Content-Type": "application/x-www-form-urlencoded"}, formMessage, "user",<Password>)
log(result ? result.statusCode + " " + result.statusReason + "\n" + toJSON(result.data, true) : "Missing Result")

Usually for HTTP Basic Authentication, the client makes a request without the credentials and the server responds with a challenge telling the client what kind of authentication it needs to perform the operation. The client then reissues the request with the provided credentials. For some web services, the server does not issue the challenge, but rather expects the client to send any the credentials without being asked for them. Usually this is the case when some requests can be processed without any authentication, but will provide a different answer based on being authenticated as a known user who has more rights. This is known as unsolicited authentication. The Web Service Adapter will perform unsolicited authentication if you provide the X-UnsolicitedBaseAuth header with a non-null value.

Example

formMessage = "surname=Doe&givenName=John"
result = httpPUT("http://httpbin.org/put", {"Content-Type": "application/x-www-form-urlencoded", "X-UnsolicitedBaseAuth": "1"}, formMessage, "user",<Password>)
log(result ? result.statusCode + " " + result.statusReason + "\n" + toJSON(result.data, true) : "Missing Result")

The Web Service Adapter supports implementing SOAP endpoints using an Action Set.

  • The Action Set MUST define at least one input parameter. Any additional input parameters must be defined as optional. When invoked as an endpoint, the first input parameter will contain an E4X XML object that represents the SOAP message and is guaranteed to be a valid SOAP Envelope. Any additional input parameters will have the value undefined.

  • The Action Set MUST return a valid SOAP Envelope (either as a String or as an XML object). Failure to do so will result in a SOAP Fault message being returned to the client. The SOAP version of the returned Envelope SHOULD match the SOAP Version of the Envelope provided as the first input parameter.

  • Other than the above requirements, the Action Set MAY exercise any/all DSS capabilities for which the server is licensed.

  • An Action Set is invoked as a SOAP endpoint by POSTing a valid SOAP 1.1 or SOAP 1.2 Envelope to a URL of the form:

    • http[s]:server[:port]/dss/services/soap/<action-set-name> * Clients that cannot gracefully handle an HTTP return code of 500 Internal Server Error (e.g. Flash/Flex) , should post to the alternate URL which will return 200 OK even when there is a SOAP Fault: * http[s]:server[:port]/dss/ws/dss/soap/<action-set-name>

  • Invoking an Action Set as SOAP endpoint MUST provide valid credentials of a User that is authorized to run the Action Set (e.g. have role Administrator or Operator) using one of the following methods.

    • HTTP Basic Authentication; OR

    • Providing the credentials as query parameters on the URL:

      • ?authUser=<user>&authPassword=<password>

  • An Action Set invoked as a SOAP endpoint will write its execution log to a file on the DSS server exactly as it would if it were invoked manually using the runAsync or runForValue REST resource endpoints. The log will contain detailed trace information if and only if the URL has the trace=true query paramter appended.

  • An Action Set that implements a SOAP endpoint MAY still be invoked/called like any other Action Set provided that the required first parameter is supplied. Calling the SOAP endpoint Action Set from a wrapper Action Set is usually the simplest way to test/debug the Action Set.

Example

# define the soepenv and thanks namespaces so we can use them in e4x expressions
# (since differing namespaces for different versions of SOAP, respond with the same SOAP version as the request)
soapenv = message.namespace()
thanks = "urn:idauto:dss:samples:thankYouServer"

# Start off with a mostly empty response
response = <Envelope xmlns={soapenv}> <Body/> </Envelope>
responseBody = response.soapenv::Body

# Check that request body has a thanks::thankYou element
thankYou = message.soapenv::Body.thanks::thankYou[0]

if(!thankYou) {
  # Fault structure is different in SOAP 1.2 than SOAP 1.1
  if(soapenv == "http://www.w3.org/2001/06/soap-envelope") {
    # SOAP 1.2
    fault = <Fault xmlns={soapenv} xmlns:soapenv={soapenv}> <Code> <Value>soapenv:Sender</Value> </Code> <Reason> <Text>Missing thankYou element</Text> </Reason> </Fault>
  } else {
    # Check that request body has a thanks::thankYou element
    # Fault structure is different in SOAP 1.2 than SOAP 1.1
    fault = <Fault xmlns={soapenv} xmlns:soapenv={soapenv}> <faultcode>soapenv:Client</faultcode> <faultstring>Missing thankYou element</faultstring> </Fault>
  }

  dummy = responseBody.appendChild(fault)
} else {
  youreWelcome = <youreWelcome xmlns={thanks}/>
  dummy = responseBody.appendChild(youreWelcome)
}

# return the response
return response.toXMLString()
Workday Adapter Actions

Workday adapter actions are deprecated - these functions are now performed by a Web Service adapter to access the current API directly.

Documentation from Workday

Useful information on the Workday API.

RapidIdentity Developer Guides
RapidIdentity Agent Guides

In RapidIdentity, agents act as an intermediary between RapidIdentity and an application or service provider to facilitate extract, transform, and load (ETL) operations.

The agents are only used when the APIs provided by the application or service provider and are not directly accessible by the RapidIdentity Linux appliance.

Credential Provider Install Guide

The RapidIdentity Credential Provider can be installed in three different pathways.

  1. A single workstation prompted dialog using an msi file.

  2. An unprompted command line installation.

  3. Active Directory Group Policy Object.

System Requirements

Prior to installing the Credential Provider, ensure the environment meets the following requirements.

  • Workstation with:

    • Intel/AMD x86 or x86-64 processor

    • Microsoft Windows 7 or later

    • Administrator access

    • Browser access to RapidIdentity 2017.x.x or higher with the Portal Capability is enabled.

Single Workstation Installation

Installing the RapidIdentity Credential Provider to a single workstation requires running the .msi installation file, which will provide a normal, prompted installation.

These files can be downloaded through the RapidIdentity Appliance downloads.

Standard (unprompted) Workstation Installation

Standard (unprompted) workstation installation of the RapidIdentity Credential Provider Module is accomplished from a command-line execution and requires Administrator or System privileges.

Follow these three steps to install the credential provider through the command line.

  1. Right mouse click the shortcut for Command Prompt , select Run as , and choose Administrator.

  2. Run the command listed below using the syntax provided: 

    msiexec /passive /i <UNC path of .msi file to install> 
    ARMSURL=https://<RapidIdentity Portal Address> ALLUSERS=1
  3. After successful installation of the RapidIdentity Credential Provider Module and upon next user login to the workstation, the option to Switch User will have an additional user entry named Forgot My Password displays. The Identity Automation logo is displayed as its user picture.

If the RapidIdentity server URL needs to be modified after completing the installation, it is best to uninstall the Credential Provider and then reinstall the Credential Provider with the revised URL.

Active Directory Group Policy Object (GPO) Installation

A GPO created for “Software installation” will set up the RapidIdentity Credential Provider Module, but without command-line options, and there is no simple way to configure the standard Software Install, to add the command line options.

The workaround to add the command line options is to create a batch file (example: InstallRapidIdentityCentralProvider.cmd contents, below in the Notes section) containing the proper command-line for install, as noted in the “Standard Workstation Installation” above.

Then, setup a GPO, associated to Domain Computers, and configure as follows:

  1. Run Command Prompt as an Administrator on a domain controller and enter gpme.msc.

  2. Select the default Domain Policy (or other policy as applicable) and press OK.

  3. In the left panel, navigate to and select Computer Configuration > Policies > Windows Settings > Scripts.

  4. In the right panel, double-click Startup.

  5. In the Script Name field, enter the UNC path of the script and click OK.

  6. Click OK.

At the next user login, assuming the machine is associated with the Active Directory domain and that it has been rebooted, the machine will run the script / batch file in the background, and install the Credential Provider with proper rights to make the registry changes.

The next time a user logs out and selects to change user, the Credential Provider user will be accessible to allow for a password change.

Notes - Credential Provider Install Guide

The RapidIdentity Credential Provider requires a trusted certificate, as described above.

Example InstallRapidIdentityCentralProvider.cmd

:CheckOSIF EXIST "%PROGRAMFILES(X86)%"
    (GOTO 64BIT)
ELSE
    (GOTO 32BIT)
:64BIT msiexec /passive /i \\<address of shared software server>\
    <shared software directory ARMSURL=https://<portal server ip>/portal
GOTO END

:32BIT msiexec /passive /i \\<address of shared software server>\
    <shared software directory 
GOTO END

:END
Credential Provider User's Guide

The RapidIdentity Credential Provider is a self-service feature to enable users to reset a forgotten domain password.

The domain password can be reset without contacting the HelpDesk, provided the user can confirm their identity by answering their configured challenge-response questions correctly.

Change a Forgotten Password

Follow these steps to access the Credential Provider and reset a forgotten password.

  1. Click on the Switch User button on the login screen and then click the Forgot My Password user. 

    Forgot_Password.png
  2. Click Reset Password

    Reset_Password.png
  3. Enter the domain username and click Next

    Next.png
  4. Answer your challenge questions to validate your identity and click Next.  

    Step_2.png
  5. Enter a new password to match the policy description and click  Next.  

    Step_3.png
  6. Finally, click either of the two links to proceed.  

    Step_4.png
Exchange/Office 365 Agent Guides

The following guides provide detailed information on installing Exchange 2007, Exchange 2010/2013, and Office 365 Agent:

Exchange Agent Install Guide for Exchange 2010/2013
System Requirements

System Hosting Exchange

  • Exchange 2013+

  • Windows PowerShell and winRM 3.0 or higher

Note

The Agent may be deployed on the same server hosting Exchange (if it meets the OS requirements) or a different server in the same domain.

System Hosting Agent

  • Windows Server 2012 or newer

    Note

    The server on which the agent is running must have Windows Management Framework (WMF) 5.1.

  • Windows PowerShell and WinRM 3.0 or higher

  • Internet Information Services (IIS) 7 or higher

  • .NET Framework 4.x

  • Must have access to:

    • Package Provider: NuGet

    • Up-to-date modules:

      • PowerShellGet

      • MSOnline

Note

The RapidIdentity Exchange Administrative Web Service Agent exposes the Powershell based Exchange ManagementAPI as a web service for consumption by the Exchange and Office 365 adapters.

Installing/Configuring the Prerequisites

Both Systems

System Hosting Exchange

  • In Internet Information Services (IIS) Manager:

  • Make sure Powershell virtual directory is configured to allow Windows Authentication.

System Hosting Agent

  • In Server Manager:

  • Under Roles, make sure Web Server (IIS) Role is installed, and the ASP.NET and IIS 6 Management Compatibility Role Services have been added to it.

  • In Internet Information Services (IIS) Manager:

  • Configure the IIS site that will host the service (can use the default website). It is strongly recommended that the site is configured to support or even require HTTPS connections.

  • Ensure ASP.NET is registered with IIS by running %WINDIR%\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis -i

Installing the Agent
  • If your environment is running RapidIdentity Connect 4.0 or later with Exchange 2013 or higher, download the most current version of the agent which will be listed at the top of the directory with a name format ending in yyyy.m.d.msi. In this example, the most current agent is idautoExchangeAdminWSInstaller-2018.3.1.msi.

  • Run idautoExchangeAdminWSInstaller.msi

  • When prompted, select the IIS Site.

Verifying Your Installation in Exchange 2013 or Newer

You can verify that the RapidIdentity Exchange Administrative Web Service Agent is working correctly by accessing the agent through a web browser using a URL of the form:

http[s]://<hostname>[:<port>]/idautoExchangeAdminWS/test

where <hostname>[:<port>] is the hostname and port of the IIS site hosting the Agent

In the resulting page, select Exchange 2013 or newer, and enter the Exchange server name, and username/password for the administrative user, and press Test.

Office 365 Agent Install Guide
Microsoft Awareness

Microsoft periodically updates its requirements, links, and nomenclature without prior notice.

Thus, some downloads and installations may not exactly correspond to a particular environment, or the Microsoft links may break due to a Microsoft content reorganization. If any of these events occur please contact Support to initiate the troubleshooting and updating processes.

System Requirements
  • Windows 2012R2 Server (or higher)

    Note

    The server on which the agent is running must have Windows Management Framework (WMF) 5.1.

  • Windows PowerShell and WinRM 3.0 or newer

  • Internet Information Services (IIS) 7 or newer

  • .NET Framework 4.x or higher

  • Microsoft Online Services Sign-In Assistant

  • MSOnline PowerShell for Azure Active Directory

  • SharePoint Online Management Shell (Only required for SharePoint Online support)

  • Must have access to:

    • Package Provider: NuGet

    • Up-to-date modules:

      • PowerShellGet

      • MSOnline

Note

The RapidIdentity Connect Exchange Administrative Web Service Agent exposes the Powershell based Exchange ManagementAPI as a web service for consumption by the Exchange and Office 365 adapters.

MSOnline PowerShell for Azure Active Directory Requirement

MSOnline PowerShell for Azure Active Directory currently requires the PowerShellGet module and should be installed prior to starting the process linked to MSOnline PowerShell for Azure Active Directory.

Installing/Configuring the Prerequisites
  • If running a version of Windows Server 2008R2:

  • Download and install both Microsoft Online Services Sign-In Assistant and MSOnline PowerShell for Azure Active Directory.

  • If Sharepoint Online support is desired, download and install Sharepoint Online Management Shell.

  • In Server Manager (2008R2):

    • Under Roles, make sure Web Server (IIS) Role is installed, and ASP.NET have been added to it.

    • Under Role Services, make sure IIS 6 Management Compatibility has been added

  • In Server Manager (2012):

    • Under Roles, select Web Server (IIS)

    • Under Features, make sure the all the .NET Framework 4.5 features are installed.

    • Under Role Services, make sure IIS 6 Management Compatibility has been added

  • In Internet Information Services (IIS) Manager:

    • Configure the IIS site that will host the service (can use the default website). It is strongly recommended that the site is configured to support or even require HTTPS connections.

    • Ensure ASP.NET is registered with IIS by running ”%WINDIR%\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis -i”

  • In the Office 365 admin panel, validate that the account being used by the agent holds the Global Administrator role (required to retrieve/submit information through remote power shell calls)

Installing the Agent

Exchange 2007 / 2010 is known to have incompatibilities with PowerShell 3 and .NET4, and a given .NET executable cannot be built to support both PowerShell 3 and .NET4

  • Run idautoExchangeAdminWSInstaller.msi.

  • When prompted, select the IIS Site you configured above.

Verifying Your Installation in Office 365

You can verify that the RapidIdentity Connect Exchange Administrative Web Service Agent is working correctly by accessing the agent through a web browser using a URL of the form:

http[s]://<hostname>[:<port>]/idautoExchangeAdminWS/test

where <hostname>[:<port>] is the hostname and port of the IIS site hosting the Agent

In the resulting page, select Exchange 2010 or higher, and enter the Exchange server name, and username/password for the administrative user, and press Test.

Notes Agent Install Guide
System Requirements
  • IBM Domino Server 8.0.x or higher.

Preparing the Domino Server
Installing the Agent
  • Download idautoAgent.nsf and place it in the Domino data folder.

  • On Unix/Linux systems, make sure that that idautoAgent.nsf is owned by the Domino user (usually notes) and has a permissions mask of 0644.

  • In the Files tab in Domino Administrator or Domino Web Administrator, select idautoAgent.nsf and:

  • Tools | Database | Manage ACL

  • Make sure entries for LocalDomainAdmins and LocalDomainServers exist and are set to allow Manager access.

  • Make sure the -Default- and OtherDomainServers entries exist and are set to No Access.

  • Delete any other entries.

  • Tools | Database | Sign

  • Sign design documents with the server id.

  • Restart the HTTP task.

Verifying Your Installation in Notes

You can verify that the DSS Notes Agent is working correctly by accessing the agent through a web browser using a URL of the form:

https://<hostname>[:<port]/idautoAgent.nsf/ws

If working correctly, you be prompted for username and password: Enter the username and password of a member of the localdominoadministrator group. After successfully authenticating, you should see a bullet list like:

  • NotesAgent(wsdl)

  • getVersion

RapidIdentity API Guides

All RapidIdentity APIs are defined by Swagger, and the URL that returns the Swagger-defined APIs reflect the RapidIdentity APIs with respect to the Rolling or Long Term Support Release installed.

RapidIdentity Authentication API Guides

There are three main API calls involved in the Modular Authentication API.

Table 82. API Endpoints

Endpoint

Description

GET /idp/ws/rest/authn/krb

Attempt to initialize the process with Kerberos SSO. See Kerberos.

GET /idp/ws/rest/authn

Initialize the authentication process and receive the initial authentication step. See Initialization.

POST /idp/ws/rest/authn

Submit an authentication step and receive the next step.



Each response from the server and associated request from the client is a JSON object which has at the very minimum a type and id field.

In a response from the server, the type field indicates the next authentication method required to proceed.

The id field is an opaque value which has no meaning in-and-of-itself.  All requests from the client should contain the same id value which was previously included in the response from the server.

During the authentication process, the server currently maintains session data using the Java HttpSession mechanism and this is bound to a particular client using a HTTP Cookie. This implies that the client must support cookies in order to use RapidFederation Modular Authentication.

The Authentication API Consumer allows access to all of the API endpoints listed in the table below.

Authentication Method API

Details

Username

This API should be used to identify a user by "username" and receive the idautoID of that user.

QR Code

This API should be used to identify a user by QR code and receive the idautoID of that user.

OTP

This API should be used to authenticate a user by OTP code.

Pictograph

This API should be used to authenticate a user by Pictograph code.

Pictograph authentication requires the client to first request a "challenge set" from the server. The response contains various inner and outer arrays. The inner arrays include objects that represent a set of images to be used to challenge the user, along with the valid choice for the user. The outer array contains "n" inner arrays where "n" is also the number of choices the user must answer correctly.

Important

When the client requests the Pictograph challenge for a particular user, the response will include a "cookie" string. This value must be included in the next request that includes the list of selected image IDs to successfully complete a Pictograph authentication.

PingMe

This API should be used to authenticate a user by PingMe code.

PingMe authentication is performed by first requesting the server send a PingMe notification to all of the target user's registered devices and then polling for the response.

Proximity Card

This API should be used to identify a user by proximity card (contactless smart card) and receive the idautoID of that user.

Exchange

The Exchange API may be used by the client to exchange claims previously received on behalf of an authenticating user.

Available Authentication Methods
Failure

If an un-recoverable failure occurs during the authentication process the server will send a response with the type property value fail and generally some kind of error object that in some way explains what went wrong. The only reasonable thing for the UI to do in this situation is to display the error message and allow the user to start over.

HTTP/1.1 200 OK 
Content-Type: application/json
{
  "type": "fail",
  "id": "931c4a40-2dc9-11e6-937b-005056c00008",
  "error": {
    "type": "simple",
    "message": "Unable to complete the authentication process. Please try again later"
  }
}
Completion

When the authentication process has completed successfully, the server will send a response with the type property value complete.

HTTP/1.1 200 OK 
Content-Type: application/json
{
  "type": "complete",
  "id": "931c4a40-2dc9-11e6-937b-005056c00008"
}

In order to finalize the SAML authentication process, the browser should then issue a POST to /idp/authn/idauto with a parameter complete and a value of 1. This will indicate to the IdP's SAML engine that the user has authenticated successfully and the user should then be forwarded on to their destination application with a valid SAML Assertion.

FIDO Authentication

Here is an example response from the server indicating that FIDO Authentication is required as the next step:

Note

Displayed values have been truncated here for formatting purposes, but the strings listed here should represent actual, usable values when generated in a production environment.

HTTP/1.1 200 OK 
Content-Type: application/json
{
  "id": "e230e2e0-25ae-11e5-8dc9-0050b6c32ffc",
  "step": {
    "appId": "https://rapidIdentity.example.com:8443/FIDO/appId",
    "challenge": "g9WMWOFyFef8x9nNwt4zfZnJhaLHoSyKEprXT_EGPxU",
    "devices": [
      {
        "name": "FIDO Device - (ID: a28af5qa-f4r2-4271-a926-7d09537f869c)",
        "deviceId": "a24af5ca-f4f2-4171-a936-7d01567f869c",
        "keyHandle": "jwCS9L5WAxN4PjZFjIOgv-D9FE0Fze_[...]_CsCSUQtI__[...]"
      }
    ],
    "type": "authenticate",
    "userId": "8e123420-00e4-11r6-c668-005056r00008",
    "version": "U2F_V2"
  },
  "type": "fido"
}

Note that the value of the type property is fido and the step.type property is authenticate.

When responding to the FIDO Authenticate response, a value for the clientData and signatureData properties are required. These values should be generated between the FIDO device and client.

POST /idp/ws/rest/authn HTTP/1.1 
Content-Type: application/json 
Accept: application/json
{
  "id": "e230e2e0-25ae-11e5-8dc9-0050b6c32ffc",
  "step": {
    "clientData": "eyJvcmlnaW4iOiJodHRwczovL2xvY2FsaG9zdDoyNTE0OCIsImNpZF9wdWJrZ[...]",
    "signatureData": "AQEBAQEiYycLYY0_EHePpkSt22mTwjZJ2HMCIF9IE_gT0jmxaknCyM4cbp[...]",
    "defer": false,
    "type": "authenticate"
  },
  "type": "fido"
}

Here is an example response from the server indicating that FIDO Registration is required as the next step:

HTTP/1.1 200 OK 
Content-Type: application/json
{
  "id": "e230e2e0-25ae-11e5-8dc9-0050b6c32ffc",
  "step": {
    "appId": "https://rapidIdentity.example.com:8443/FIDO/appId",
    "challenge": "g9WMWOFyFef8x9nNwt4zfZnJhaLHoSyKEprXT_EGPxU",
    "passwordRequired": true,
    "name": "FIDO Device - (ID: a28af5ca-f4f2-4271-a946-7d09567f869c)",
    "deviceId": "a28af5ca-f4f2-4271-a946-7d09567f869c",
    "type": "register",
    "userId": "8e193920-00e4-11e6-a668-005056c00008",
    "version": "U2F_V2"
  },
  "type": "fido"
}

Note that the value of the type property is fido and the step.type property is register.

When responding to the FIDO Register response, a value for the clientData and registrationData properties are required. These values should be generated between the FIDO device and client. The password property is only required if the user has yet to enter a password or authenticate using a Pre-Auth authentication type.

POST /idp/ws/rest/authn HTTP/1.1 
Content-Type: application/json 
Accept: application/json
{
  "id": "e230e2e0-25re-11s5-8da9-0050b6c32ffc",
  "step": {
    "clientData": "eyJvcmlnaW4iOiJodHRwczovL2xvY2FsaG9zdDoyNTE0OCIsImNpZF9wdWJrZXki[...]",
    "registrationData": "BQQtRU22R6qjdGYw3d1JWg5dxy7W2Y8_YXxbYLyn_NzXV6SNhabfaoSzkDwsoheJ[...]",
    "password": "p@$$w0rd",
    "type": "register"
  },
  "type": "fido"
}
Initialization

If Kerberos  authentication was not successful, then the way to proceed is to issue the following request:

GET /idp/ws/rest/authn HTTP/1.1
Accept: application/json

The response from the server will always be of type username, username+password or policyChoice and will contain other pieces of information needed to construct the initial authentication page:

HTTP/1.1 200 OK 
Content-Type: application/json
{
  "type": "username+password",
  "id": "35bf1450-2dbe-11e6-8a8b-005056c00008",
  "availableRealms": [
    {
      "id": "internal",
      "name": "Internal"
    },
    {
      "id": "11541860-161f-11e6-aec5-005056c00008",
      "name": "Realm 1"
    },
    {
      "id": "233d3570-161f-11e6-aec5-005056c00008",
      "name": "Realm 2"
    }
  ],
  "allowQRCodeScan": false,
  "allowKerberos": false,
  "claimAccountLink": {
    "href": "/arms/claim/",
    "displayName": "Claim My Account"
  },
  "helpLinks": [
    {
      "href": "/arms/forgotmyusername",
      "displayName": "Forgot My Username"
    },
    {
      "href": "/arms/forgotmypassword?redirect_to=/arms",
      "displayName": "Forgot My Password"
    }
  ]
}

Let's ignore the type for now, it will be discussed later.

The id property is a value that must be included in the subsequent request

The availableRealms property is an array of authentication realms to which the user may authenticate. This is only included if RapidFederation is currently configured for realms other than the default which has the id value of internal.

The allowQRCodeScan property is a boolean indicating that the user may initiate the authentication process by scanning a QR code

The allowKerberos property is a boolean indicating that the user may initiate the authentication process by attempting Manual Kerberos Authentication

The claimAccountLink object contains the link location (href) as well as the text to display on the button (displayName) which allows a user to claim their account. This object will only be included in the response if the link should be displayed.

The helpLinks property is an array of objects describing help links and their display names which should be available to the user when they click the "Need help?" button on the login page. If no help links are configured, this property will not be included.

Username/Password

This initial authentication step is required if the type property in the initial response has the value username+password. It indicates that

  1. There are no enabled Authentication Policies defined for RapidFederation OR

  2. All enabled Authentication Policies require Password as the initial authentication method

A valid username and password combination is required to proceed to the next authentication step:

POST /idp/ws/rest/authn HTTP/1.1 
Content-Type: application/json 
Accept: application/json
{
  "type": "username+password",
  "id": "35bf1450-2dbe-11e6-8a8b-005056c00008",
  "username": "someuser",
  "password": "mysecurepassword"
}

Additionally, if authenticating against a realm other than internal is desired, the realm property may be included in the request body:

POST /idp/ws/rest/authn HTTP/1.1 
Content-Type: application/json 
Accept: application/json
{
  "type": "username+password",
  "realm": "233d3570-161f-11e6-aec5-005056c00008",
  "id": "35bf1450-2dbe-11e6-8a8b-005056c00008",
  "username": "someuser",
  "password": "mysecurepassword"
}

Here is an example of a response from the server if the username/password combination sent in the request is incorrect:

HTTP/1.1 200 OK 
Content-Type: application/json
{
  "type": "username+password",
  "id": "35bf1450-2dbe-11e6-8a8b-005056c00008",
  "availableRealms": [
    {
      "id": "internal",
      "name": "Internal"
    },
    {
      "id": "11541860-161f-11e6-aec5-005056c00008",
      "name": "Realm 1"
    },
    {
      "id": "233d3570-161f-11e6-aec5-005056c00008",
      "name": "Realm 2"
    }
  ],
  "claimAccountLink": {
    "href": "/arms/claim/",
    "displayName": "Claim My Account"
  },
  "helpLinks": [
    {
      "href": "/arms/forgotmyusername",
      "displayName": "Forgot My Username"
    },
    {
      "href": "/arms/forgotmypassword?redirect_to=/arms",
      "displayName": "Forgot My Password"
    }
  ],
  "error": {
    "type": "simple",
    "message": "Incorrect Username and/or Password"
  }
}

Notice the error property in the response. It has a type value of simple which means that the associated message should be displayed to the user.

Here is an example of the response from the server if the username & password combination were correct but the user is required to update their password before continuing:

HTTP/1.1 200 OK 
Content-Type: application/json
{
  "type": "username+password",
  "id": "cd4f0ab0-2dc7-11e6-937b-005056c00008",
  "availableRealms": [
    {
      "id": "internal",
      "name": "Internal"
    },
    {
      "id": "11541860-161f-11e6-aec5-005056c00008",
      "name": "Realm 1"
    },
    {
      "id": "233d3570-161f-11e6-aec5-005056c00008",
      "name": "Realm 2"
    }
  ],
  "claimAccountLink": {
    "href": "/arms/claim/",
    "displayName": "Claim My Account"
  },
  "helpLinks": [
    {
      "href": "/arms/forgotmyusername",
      "displayName": "Forgot My Username"
    },
    {
      "href": "/arms/forgotmypassword?redirect_to=/arms",
      "displayName": "Forgot My Password"
    }
  ],
  "error": {
    "type": "password-expired",
    "message": "Your password is expired and must be updated before continuing",
    "expiredPasswordText": "CLICK HERE to change your password.",
    "targetUrl": "/arms/expired-password",
    "username": "8kb+8GQVM2HUGJQtMRxKjNFfUNuboOhcdtBw8VtIlZU=",
    "password": "78EV3jkq6IYu/8S2rC4M54NQYwTQRPRaUEaFuNdRx6w="
  }
}

Notice the error property in the response. It has a type value of password-expired which indicates that the user must change their password and the associated message should be displayed to the user to let them know. The expiredPasswordTexttargetUrlusername and password property values are used to construct a link which, when clicked, submits a form in a new window which POSTs the obfuscated username and password to the targetUrl.

Username

This initial authentication step is required if the type property in the initial response has the value username. It indicates that

  1. There is at least one enabled Authentication Policies defined for RapidFederation AND

  2. At least one of the enabled Authentication Policies requires an initial authentication method other than Password.

A valid username is required to proceed to the next step:

POST /idp/ws/rest/authn HTTP/1.1 
Content-Type: application/json 
Accept: application/json
{
  "type": "username+password",
  "id": "35bf1450-2dbe-11e6-8a8b-005056c00008",
  "username": "someuser"
}

Additionally, if authenticating against a realm other than internal is desired, the realm property may be included in the request body:

POST /idp/ws/rest/authn HTTP/1.1 
Content-Type: application/json 
Accept: application/json
{
  "type": "username+password",
  "realm": "233d3570-161f-11e6-aec5-005056c00008",
  "id": "35bf1450-2dbe-11e6-8a8b-005056c00008",
  "username": "someuser"
}

If a username which does not successfully map to a valid account is provided in the username request, it will kick off a "Bogus" authentication flow which will always fail.

PolicyChoice

This authentication step allows users to select which authentication policy they want to use to authenticate, and is only present if:

  • There are multiple authentication policies which are applicable to a user

  • Authentication Policy Options have been "opted-in" to

Here is an example of the response from the server if either username or username+password has been completed successfully and authentication policy options are enabled:

POST /idp/ws/rest/authn HTTP/1.1 
Content-Type: application/json 
Accept: application/json
{
  "type": "policyChoice",
  "id": "2f875a60-dbfc-11e6-8449-005056c00008",
  "claimAccountLink": {
    "href": "/arms/claim/",
    "displayName": "Claim My Account"
  },
  "helpLinks": [
    {
      "href": "/arms/forgotmyusername",
      "displayName": "Forgot My Username"
    },
    {
      "href": "/arms/forgotmypassword?redirect_to=/arms",
      "displayName": "Forgot My Password"
    }
  ],
  "policies": [
    {
      "id": "5fda6a30-d1ee-11e6-8629-005056c00008",
      "methods": [
        {
          "type": "password"
        }
      ]
    },
    {
      "id": "4101afb0-d1ee-11e6-8629-005056c00008",
      "methods": [
        {
          "type": "password"
        },
        {
          "type": "rapidPortalChallenge"
        }
      ]
    }
  ]
}

Next, the user returns a request with the policy ID that they would like to authenticate with:

POST /idp/ws/rest/authn HTTP/1.1 
Content-Type: application/json 
Accept: application/json
{
  "id": "65a22d80-d9c9-11e6-9ed6-005056c00008",
  "type": "policyChoice",
  "policyId": "5fda6a30-d1ee-11e6-8629-005056c00008"
}
Kerberos

If the API is being invoked from a browser, the first step in the process should be attempting Kerberos SSO. The following request should be issued:

GET /idp/ws/rest/authn/krb HTTP/1.1
Accept: application/json

If Kerberos authentication is successful, the server will return a status of 200 and the JSON data for the next authentication step to perform will be included in the response.  In the event that Kerberos is the only authentication method required for the user, the next step will of type compete which indicates that no further authentication steps are required.

If Kerberos authentication is successful it means that the username of the user is known and a username prompt is not required to initiate the RapidFederation authentication process.

If any other status besides 200 is returned, then it means that Kerberos authentication failed and the authentication process should proceed with the Initialization step.

Manual Authentication

An internal engineering ticket was opened to address an issue with automatic Kerberos processing and, as such, we've had to slightly adjust how Kerberos works. Specifically, there is a new option in the Kerberos Configuration which allows an admin to toggle "Automatic Kerberos Processing". From the server's point of view if automatic processing is turned off, this means that all Kerberos requests made at the very beginning of the process will automatically fail, however the response from the normal init call at /idp/ws/rest/authn/ will have a new allowKerberos flag set to true. This indicates to the client that manual Kerberos authentication is enabled and the user should be given the option to do so if they wish. A manual Kerberos request is exactly the same as the automatic one except that a request parameter requested must be present with the value true.

GET /idp/ws/rest/authn/krb?requested=true HTTP/1.1
Accept: application/json

Everything else about the response will be the same as with automatic processing.

As an Authentication Method

If the Kerberos authentication method is enabled for a given policy, it means that Kerberos authentication is required to have completed successfully or authentication will automatically fail.

As an Authentication Policy Criteria

If Kerberos criteria is enabled for a given policy, it means that only users who have successfully completed Kerberos authentication will be eligible for that policy.

Example Javascript

This example demonstrates how to attempt Kerberos authentication against RapidFederation using JQuery

< script > 

  $.ajax({
        type: 'GET',
        url: '/idp/ws/rest/authn/krb',
        cache: false,
        async: true,
        xhrFields: {
            withCredentials: true
        }
    }).done(function(data) { //data should contain a JSON object }).fail(function() { 
    //kerberos failed, go ahead and call /idp/ws/rest/authn to get the first step 
    }); 
</script>
Password Authentication Method

Here is an example response from the server indicating that password authentication is required as the next step:

HTTP/1.1 200 OK 
Content-Type: application/json
{
  "type": "password",
  "id": "931c4a40-2dc9-11e6-937b-005056c00008"
}

Note that the value of the type property is password.

In addition to sending the standard id and type properties with the next request, the only other thing required is a valid password:

POST /idp/ws/rest/authn HTTP/1.1 
Content-Type: application/json 
Accept: application/json
{
  "type": "password",
  "id": "931c4a40-2dc9-11e6-937b-005056c00008",
  "password": "mysecurepassword"
}

If the password provided is correct, then the next authentication step will be returned by the server. If not a password type will be returned with an error property.

Here is an example of a response from the server if the password sent in the request is incorrect:

HTTP/1.1 200 OK 
Content-Type: application/json
{
  "type": "password",
  "id": "931c4a40-2dc9-11e6-937b-005056c00008",
  "error": {
    "type": "simple",
    "message": "Incorrect Username and/or Password"
  }
}

Notice the type of the error is simple. This indicates that the associated message should be displayed to the user and they should be prompted again for a valid password.

Here is an example of the response from the server if the password was correct but the user is required to update their password before continuing:

HTTP/1.1 200 OK
Content-Type: application/json
{
    "type": "password",
    "id": "931c4a40-2dc9-11e6-937b-005056c00008",
    "error": {
        "type": "password-expired",
        "expiredPasswordUrl": "https://customer.rapididentity.com/",
  }
}

Notice the type of the error is password-expired. This indicates that the user must change their password. If expiredPasswordUrl is not included in the response, it indicates that the Expired Password Flow should be executed against the current server URL. If the property is included in the response, the Expired Password Flow should be executed against the server whose URL is provided.

Expired Password Flow

If RapidIdentity detects that a user's password is expired during a login attempt, here are the new APIs to facilitate a successful password change.

Once the user's password is detected as expired, here is the new update password init request:

POST /expiredPassword/init HTTP/1.1
Content-Type: application/json
{
    "userId": "321g4a40-2dd4-11e6-937b-005056c24006",    
    "currentPassword": "mysecurepassword"
}

If the request is successful, the server will respond with the following response, containing a token and the password policy associated with the user:

HTTP/1.1 200 OK
Content-Type: application/json
{
"token":"wsJjdHkiOiJKV1QiLCJlbmMiOiJBMjU2R0NNIiwiYWxnIjoiUlNBLU9BRVAtMjU2In0.bEkmBEgjf7PivEbXkJjg5PYABZ8DooSUO1jAWTBfY4ZfNWvtxjss1l2k_00WV8Kfuc9XQGVWDgbJe6nYZE5kY95SZ144ioDdS0a7aCeMKS2azFI142iBx5P1vNakYRoVhV7dwCYN7oLHXQBe7fqaYHDbUStCrGzm1rOe4jFTfOHrNIve6x4aLdW3N4M7inTdZK7v3t2_FeCbG9g06A09N75jmJ26uwcQXh7eez9nEnBrzeh7JnGA18UJsYHhpaoqftdMV52NDNIw6os7zM9352R3xEzZErK-mD0Cw42G1zr9zk_dfd0z0RyF5pr9yFVYbY9mga6_vVmBOhTsnFzPIA.4XSwi4xokumtM-w7.3sBpe1XM34pG2CkKl9XUvSLd9y2C7A4I3Nz5PNNw1ZLzGecverVYkh5HKpjH9EI-6Qv4rfovzpqh_rt-JbaBNhqU5jZgA0v4HEQJwJaY8oJ7Q8TI3oiLtqvi-r6kmXKDixSj7BbwQ5kQ2o4S9Wx13O60MtzCH7dvFryRxHYvyblvSUpSXoqKGy5Zljf7nWPLFjq2RYRG6vUHkOE1CfYO2BqoEkTILe7Eqg4sD7BiTilz2u90uGIRafxdC0PUThMfNY6zlGH0LsT9YUDmU4O2pWGz5yzHYNXKRAHRUu-Oz3KQI0FVNXdKEiQl6CWeErOxM8Efin67TKZUVx745ddL-BZGqoyaEmktu71mfRMHXX6sDBQwvQdXeZG3VpHdbqvU9ycavjsEJhnEVFBaTrpu5G-nTiX0yZKRMeIKyIr1PsoGRgqNTfL7W1lGCb68n45UNXIr2sq3eGS8arCIAPzYPszPGDkWzXNy4EF8dMY4py9ml29GLm2QTTW4rEL6d2VU-rebf5JstINVg5s-We-ugyEyBVE-03VjpZRMFkA3jMNbm_kK5UTU0bi7BYb2912wA6Mcc0wCPK_3F1pW2Zljgto1isBOk9--iR5MIuVt91rxfUs7Fzv2-wFrni2aaW1dxgIjmb_rnBlM_mH4USFtC2ueNv-Vz-QQBOm37W0I-KSXBuiDl_qUMRBDE0DKDsgyuAJ2a9dmVF9F5Oqw5wvQEtQttbJfh0RhhB8WX42kK5cNIp96da4kSxvLplPpAh33kv2WGLcjMoxnWGEdjo2e2Riz2IxWg3mMOoAoRM3uCIJUi6Z83SdmmfpCcl2uV_1ztgplmiayLpj6Pa68AxkM7wt7tASH9GcVN92zvFWgKco033RE6jRGWPNXtOhVvgQPaEUI0E4te3_CXhGB2WPmKKPIsBiBWDZFA34cVMQbUSUTfM-PwYBPdAf-.pK1LGDsQ0W12JJZLz_sD3x",
"passwordPolicy": {
    "id": "c61e98ee-204b-405f-a271-d351a8ecf784",        
    "name": "Default Password Policy",
    "description": "[Add a description]",
    "minLength": 3,  
    "maxLength": 255,  
    "charSets": [
        {
            "id": "charset.lower",
            "type": "LOWER",
            "min": 1,
            "max": 0
        },
        {
            "id": "charset.digits", 
            "type": "DIGITS",   
            "min": 1,  
            "max": 0
        },
        {
            "id": "charset.symbols",     
            "type": "SYMBOLS",    
            "min": 1,   
            "max": 0
        },
        {
            "id": "charset.upper",      
            "type": "UPPER",  
            "min": 1,    
            "max": 0
        }
],
    "requiredCharSets": 0,
    "allowRandomPassword": false,
    "matchingAttributesCaseSensitive": false, 
    "matchingAttributesMatchEntire": false,    
    "blackListed": [],  
    "blackListCaseSensitive": false,  
    "blackListMatchEntire": false, 
    "blackListRegexes": [],  
    "defaultForceUserPasswordChange": true
     }
}

The next step will be to test the user's new password against the password policy. An example of that request would be:

POST /expiredPassword/test HTTP/1.1
Content-Type: application/json
{
"token":"wsJjdHkiOiJKV1QiLCJlbmMiOiJBMjU2R0NNIiwiYWxnIjoiUlNBLU9BRVAtMjU2In0.bEkmBEgjf7PivEbXkJjg5PYABZ8DooSUO1jAWTBfY4ZfNWvtxjss1l2k_00WV8Kfuc9XQGVWDgbJe6nYZE5kY95SZ144ioDdS0a7aCeMKS2azFI142iBx5P1vNakYRoVhV7dwCYN7oLHXQBe7fqaYHDbUStCrGzm1rOe4jFTfOHrNIve6x4aLdW3N4M7inTdZK7v3t2_FeCbG9g06A09N75jmJ26uwcQXh7eez9nEnBrzeh7JnGA18UJsYHhpaoqftdMV52NDNIw6os7zM9352R3xEzZErK-mD0Cw42G1zr9zk_dfd0z0RyF5pr9yFVYbY9mga6_vVmBOhTsnFzPIA.4XSwi4xokumtM-w7.3sBpe1XM34pG2CkKl9XUvSLd9y2C7A4I3Nz5PNNw1ZLzGecverVYkh5HKpjH9EI-6Qv4rfovzpqh_rt-JbaBNhqU5jZgA0v4HEQJwJaY8oJ7Q8TI3oiLtqvi-r6kmXKDixSj7BbwQ5kQ2o4S9Wx13O60MtzCH7dvFryRxHYvyblvSUpSXoqKGy5Zljf7nWPLFjq2RYRG6vUHkOE1CfYO2BqoEkTILe7Eqg4sD7BiTilz2u90uGIRafxdC0PUThMfNY6zlGH0LsT9YUDmU4O2pWGz5yzHYNXKRAHRUu-Oz3KQI0FVNXdKEiQl6CWeErOxM8Efin67TKZUVx745ddL-BZGqoyaEmktu71mfRMHXX6sDBQwvQdXeZG3VpHdbqvU9ycavjsEJhnEVFBaTrpu5G-nTiX0yZKRMeIKyIr1PsoGRgqNTfL7W1lGCb68n45UNXIr2sq3eGS8arCIAPzYPszPGDkWzXNy4EF8dMY4py9ml29GLm2QTTW4rEL6d2VU-rebf5JstINVg5s-We-ugyEyBVE-03VjpZRMFkA3jMNbm_kK5UTU0bi7BYb2912wA6Mcc0wCPK_3F1pW2Zljgto1isBOk9--iR5MIuVt91rxfUs7Fzv2-wFrni2aaW1dxgIjmb_rnBlM_mH4USFtC2ueNv-Vz-QQBOm37W0I-KSXBuiDl_qUMRBDE0DKDsgyuAJ2a9dmVF9F5Oqw5wvQEtQttbJfh0RhhB8WX42kK5cNIp96da4kSxvLplPpAh33kv2WGLcjMoxnWGEdjo2e2Riz2IxWg3mMOoAoRM3uCIJUi6Z83SdmmfpCcl2uV_1ztgplmiayLpj6Pa68AxkM7wt7tASH9GcVN92zvFWgKco033RE6jRGWPNXtOhVvgQPaEUI0E4te3_CXhGB2WPmKKPIsBiBWDZFA34cVMQbUSUTfM-PwYBPdAf-.pK1LGDsQ0W12JJZLz_sD3x",
"newPassword": "mynewsecurepassword"
}

If the request is successful, then the server will respond with the following:

HTTP/1.1 200 OK
Content-Type: application/json
{
    "result": true
}

If an error occurs during the request, there will be a similar response with an added message property that looks like this:

HTTP/1.1 400 Bad Request
Content-Type: application/json
{
    "httpStatusCode": 400,
    "message": "Error message details",
}

The final API is the request to update the user's password. The request body is the exact same as the request to test the user's new password; however, the URL is different.

POST /expiredPassword/updatePassword HTTP/1.1
Content-Type: application/json
{
"token":"wsJjdHkiOiJKV1QiLCJlbmMiOiJBMjU2R0NNIiwiYWxnIjoiUlNBLU9BRVAtMjU2In0.bEkmBEgjf7PivEbXkJjg5PYABZ8DooSUO1jAWTBfY4ZfNWvtxjss1l2k_00WV8Kfuc9XQGVWDgbJe6nYZE5kY95SZ144ioDdS0a7aCeMKS2azFI142iBx5P1vNakYRoVhV7dwCYN7oLHXQBe7fqaYHDbUStCrGzm1rOe4jFTfOHrNIve6x4aLdW3N4M7inTdZK7v3t2_FeCbG9g06A09N75jmJ26uwcQXh7eez9nEnBrzeh7JnGA18UJsYHhpaoqftdMV52NDNIw6os7zM9352R3xEzZErK-mD0Cw42G1zr9zk_dfd0z0RyF5pr9yFVYbY9mga6_vVmBOhTsnFzPIA.4XSwi4xokumtM-w7.3sBpe1XM34pG2CkKl9XUvSLd9y2C7A4I3Nz5PNNw1ZLzGecverVYkh5HKpjH9EI-6Qv4rfovzpqh_rt-JbaBNhqU5jZgA0v4HEQJwJaY8oJ7Q8TI3oiLtqvi-r6kmXKDixSj7BbwQ5kQ2o4S9Wx13O60MtzCH7dvFryRxHYvyblvSUpSXoqKGy5Zljf7nWPLFjq2RYRG6vUHkOE1CfYO2BqoEkTILe7Eqg4sD7BiTilz2u90uGIRafxdC0PUThMfNY6zlGH0LsT9YUDmU4O2pWGz5yzHYNXKRAHRUu-Oz3KQI0FVNXdKEiQl6CWeErOxM8Efin67TKZUVx745ddL-BZGqoyaEmktu71mfRMHXX6sDBQwvQdXeZG3VpHdbqvU9ycavjsEJhnEVFBaTrpu5G-nTiX0yZKRMeIKyIr1PsoGRgqNTfL7W1lGCb68n45UNXIr2sq3eGS8arCIAPzYPszPGDkWzXNy4EF8dMY4py9ml29GLm2QTTW4rEL6d2VU-rebf5JstINVg5s-We-ugyEyBVE-03VjpZRMFkA3jMNbm_kK5UTU0bi7BYb2912wA6Mcc0wCPK_3F1pW2Zljgto1isBOk9--iR5MIuVt91rxfUs7Fzv2-wFrni2aaW1dxgIjmb_rnBlM_mH4USFtC2ueNv-Vz-QQBOm37W0I-KSXBuiDl_qUMRBDE0DKDsgyuAJ2a9dmVF9F5Oqw5wvQEtQttbJfh0RhhB8WX42kK5cNIp96da4kSxvLplPpAh33kv2WGLcjMoxnWGEdjo2e2Riz2IxWg3mMOoAoRM3uCIJUi6Z83SdmmfpCcl2uV_1ztgplmiayLpj6Pa68AxkM7wt7tASH9GcVN92zvFWgKco033RE6jRGWPNXtOhVvgQPaEUI0E4te3_CXhGB2WPmKKPIsBiBWDZFA34cVMQbUSUTfM-PwYBPdAf-.pK1LGDsQ0W12JJZLz_sD3x",
"newPassword": "mynewsecurepassword"
}

A successful request can have different responses depending on the result of the request. If an alternate action is not enabled, then the response will look like the following:

 HTTP/1.1 200 OK
Content-Type: application/json
{
    "result": true,
}

If there is an alternate action enabled, there will be a message field populated in the response, such as the following:

HTTP/1.1 200 OK
Content-Type: application/json
{
    "result": true,
    "message": "My alternate action message",
}

If there is an error during the update password request or the alternate action fails, the request will be similar to the following. The message property will be different based on the type of error being thrown on the server.

HTTP/1.1 400 Bad Request
Content-Type: application/json
{
    "httpStatusCode": 400,
    "message": "Error message",
}
Pictograph Authentication Method

Here is an example response from the server indicating that Pictograph authentication is required as the next step:

HTTP/1.1 200 OK 
Content-Type: application/json
{
  "type": "pictograph",
  "id": "e89afb10-2e6e-11e6-b6f0-005056c00008",
  "step": {
    "type": "challenge",
    "numToChoose": 1,
    "images": [
      {
        "id": "_social-016_apple-64.png",
        "url":"https://rapidIdentity.example.com:8443/idp/ws/icons/
            _social-016_apple-64.png"
      },
      {
        "id": "_social-010_html5-64.png",
        "url": "https://rapidIdentity.example.com:8443/idp/ws/icons/
            _social-010_html5-64.png"
      },
      {
        "id": "_social-036_android-64.png",
        "url": "https://rapidIdentity.example.com:8443/idp/ws/icons/
            _social-036_android-64.png"
      },
      {
        "id": "_thin-0037_smiley_happy_like_face-48.png",
        "url": "https://localhost:8443/idp/ws/icons/
            _thin-0037_smiley_happy_like_face-48.png"
      },
      {
        "id": "_thin-0038_smiley_neutral_face-48.png",
        "url": "https://localhost:8443/idp/ws/icons/
            _thin-0038_smiley_neutral_face-48.png"
      }
    ]
  }
}

Note the value of the type property is pictograph and the step object has a type property value of challenge.

The numToChoose property indicates how many of the provided images the user must identify.

The images array contains a randomized subset of the total image set available to the method as defined in the Authentication Policy. It will always contain at least numToChoose images which the user previously selected during their setup step.

To successfully complete the Pictograph authentication step, the user must identify the image(s) they chose during the setup phase. The IDs of those images need to be sent to the server in the subsequent request:

POST /idp/ws/rest/authn HTTP/1.1 
Content-Type: application/json 
Accept: application/json
{
  "type": "pictograph",
  "id": "e89afb10-2e6e-11e6-b6f0-005056c00008",
  "step": {
    "type": "challenge",
    "imageIds": [
      "_social-016_apple-64.png"
    ]
  }
}
Setup

If a user needs to choose their pictures for a future challenge, the server will respond with a setup step. It will look similar to the following:

HTTP/1.1 200 OK 
Content-Type: application/json
{
  "type": "pictograph",
  "id": "e89afb10-2e6e-11e6-b6f0-005056c00008",
  "step": {
    "type": "setup",
    "numToChoose": 1,
    "images": [
      {
        "id": "_social-016_apple-64.png",
        "url": "https://rapidIdentity.example.com:8443/idp/ws/icons/
            _social-016_apple-64.png"
      },
      {
        "id": "_social-010_html5-64.png",
        "url": "https://rapidIdentity.example.com:8443/idp/ws/icons/
            _social-010_html5-64.png"
      },
      {
        "id": "_social-036_android-64.png",
        "url": "https://rapidIdentity.example.com:8443/idp/ws/icons/
            _social-036_android-64.png"
      },
      {
        "id": "_thin-0037_smiley_happy_like_face-48.png",
        "url": "https://rapidIdentity.example.com:8443/idp/ws/icons/
            _thin-0037_smiley_happy_like_face-48.png"
      },
      {
        "id": "_thin-0038_smiley_neutral_face-48.png",
        "url": "https://rapidIdentity.example.com:8443/idp/ws/icons/
            _thin-0038_smiley_neutral_face-48.png"
      }
    ],
    "passwordRequired": true
  }
}

The numToChoose property indicates how many images the user must choose for future challenges.

The images array contains all of the possible images the user may choose. Each image has an id and a url.

The passwordRequired property indicates whether or not a valid password is required to complete the setup process. This will be true if there have been no previous authentication steps which have validated the user is who they claim to be.  In other words requiring a password for setup ensures that someone cannot setup Pictograph authentication for someone else by simply supplying a valid username at the beginning of the process.

To successfully complete the setup step the proper number of images must be chosen and their IDs should be passed to the server.

POST /idp/ws/rest/authn HTTP/1.1 
Content-Type: application/json 
Accept: application/json
{
  "type": "pictograph",
  "id": "e89afb10-2e6e-11e6-b6f0-005056c00008",
  "step": {
    "type": "setup",
    "imageIds": [
      "_social-016_apple-64.png"
    ],
    "password": "idAuto#123"
  }
}
PingMe Authentication

Here is an example response from the server indicating that PingME authentication is required as the next step:

HTTP/1.1 200 OK 
Content-Type: application/json
{
  "type": "pingMe",
  "id": "e89afb10-2e6e-11e6-b6f0-005056c00008",
  "step": {
    "type": "chooseIdentity",
    "identities": [
      {
        "username": "username1",
        "domain": "DOMAIN1"
      },
      {
        "username": "username2",
        "domain": "DOMAIN2"
      }
    ]
  }
}

Note the value of the type property is pingMe and the step object has a type property value of chooseIdentity.

The identities array will contain one or more identities associated with this user which they can choose to use for this authentication step.  An identity object consists of two properties: username and domain. The username property will always be present but the domain property might not.  When displaying the identity choice to the user, if a domain value is present, it should be displayed in standard Windows format: domain\username.

Currently, the first step for PingME authentication will always be chooseIdentity even if the authenticating user can use a single identity. We could go a few different ways with this.

  1. The UI could just immediately begin the authentication process by sending a chooseIdentity request to the server with the single identity without user interaction

  2. The UI could present a button that the user should click when they are ready for RapidFederation to send the authentication request to their device

  3. The server could be changed to skip the initial chooseIdentity step and automatically send the authentication request (perhaps this could be a configurable setting in the policy).

To begin authentication, the user must choose an identity to use and the following request should be issued:

POST /idp/ws/rest/authn HTTP/1.1 
Content-Type: application/json 
Accept: application/json
{
  "type": "pingMe",
  "id": "e89afb10-2e6e-11e6-b6f0-005056c00008",
  "step": {
    "type": "chooseIdentity",
    "identity": {
      "username": "username1",
      "domain": "DOMAIN1"
    }
  }
}

If everything is good so far, the server sends back a response indicating that authentication is underway:

HTTP/1.1 200 OK 
Content-Type: application/json
{
  "type": "pingMe",
  "id": "e89afb10-2e6e-11e6-b6f0-005056c00008",
  "step": {
    "type": "authenticating"
  }
}

At this point, the user should receive the push notification on their device and they can Approve or Deny the request. However, while that's happening, the UI should display a spinner and poll the server in the background every few seconds to find out if the authentication has succeeded or failed.

POST /idp/ws/rest/authn HTTP/1.1 
Content-Type: application/json 
Accept: application/json
{
  "type": "pingMe",
  "id": "e89afb10-2e6e-11e6-b6f0-005056c00008",
  "step": {
    "type": "pollAuthentication"
  }
}

RapidFederation will continue to respond to pollAuthentication requests with authenticating responses until the 2FA ONE server sends back a response or 120 seconds has elapsed.

I have been told that the 2FA ONE server will always return a response within a minute, but we give it up to two minutes

If the user approved the push request on their device and RapidFederation successfully receives that response, then the authentication flow will continue to the next step.

Authentication Failure

If authentication fails because the user denied the push request on their device or the request times out without a response from the user, then authentication has failed.  In this case the response from the server will resemble the following:

HTTP/1.1 200 OK 
Content-Type: application/json
{
  "type": "pingMe",
  "id": "e89afb10-2e6e-11e6-b6f0-005056c00008",
  "error": {
    "type": "simple",
    "message": "2FA ONE PingME Authentication Failed"
  },
  "step": {
    "type": "chooseIdentity",
    "authenticationRetries": 2,
    "identities": [
      {
        "username": "username1",
        "domain": "DOMAIN1"
      },
      {
        "username": "username2",
        "domain": "DOMAIN2"
      }
    ]
  }
}

Please note that the response contains a standard simple type error object with a message with should be displayed to the user.  Additionally, the chooseIdentity step contains a new property authenticationRetries which indicates how many more PingME authentication attempts may be made before authentication fails altogether.

Since this response step type is chooseIdentity, this gives the user the opportunity to use a different identity for the next authentication attempt.

Useful WSDLs for the RapidIdentity MFA server:

https://host/ONEService/ValidateService.asmx

https://host/ONEService/SyncService.asmx

Portal Challenge Authentication Method

If Federation calls out to retrieve the challenge set from Portal and challenge questions are either out of date or not setup, Federation will initiate the Portal challenge authentication setup.

Here is an example setup response from the server indicating that Portal challenge authentication setup is required as the next step:

HTTP/1.1 200 OK 
Content-Type: application/json
{
  "type": "portalChallenge",
  "id": "931c4a40-2dc9-11e6-937b-005056c00008",
  "step": {
    "type": "setup",
    "challengeSetup": {
      "targetId": "",
      "challengePolicy": {
        "id": "",
        "name": "",
        "noChallenge": false,
        "adminQuestions": [
          {
            "required": true,
            "question": "What is your favorite color"
          },
          {
            "required": true,
            "question": "What is your mother's maiden name"
          }
        ],
        "minAdminQuestionPoolSize": 2,
        "allowUserDefinedQuestions": true,
        "minUserQuestionPoolSize": 0,
        "maxUserQuestionPoolSize": 255,
        "minQuestionLength": 3,
        "maxQuestionLength": 255,
        "minAnswerLength": 3,
        "maxAnswerLength": 255,
        "numAdminAnswersForAuth": 2,
        "numUserAnswersForAuth": 0,
        "numHelpdeskQuestions": 0,
        "restrictWordsFromQuestion": false,
        "canSkipSetup": false,
        "enforceUniqueAnswers": true
      },
      "adminQuestions": [
        {
          "required": true,
          "question": "What is your favorite color"
        }
      ],
      "userQuestions": [],
      "helpdeskQuestions": []
    },
    "passwordRequired": false
  }
}

Note that the value of the type property is portalChallenge and the step type is setup.

In addition to sending the standard id, type, and step properties with the next request, answers must be provided for all values in the challengeQuestions array from the server response:

POST /idp/ws/rest/authn HTTP/1.1 
Content-Type: application/json 
Accept: application/json
{
  "type": "portalChallenge",
  "id": "931c4a40-2dc9-11e6-937b-005056c00008",
  "step": {
    "type": "setup",
    "adminQuestions": [
      {
        "question": "What is your favorite color",
        "answer": "cyan"
      },
      {
        "question": "What is your mother's maiden name",
        "answer": "smith"
      }
    ],
    "userQuestions": [],
    "helpdeskQuestions": []
  }
}
Challenge:

If Federation calls out to retrieve the challenge set from Portal and challenge questions valid, Federation will initiate the Portal challenge authentication setup.

Here is an example challenge response from the server indicating that Portal challenge authentication is required as the next step:

HTTP/1.1 200 OK 
Content-Type: application/json
{
  "type": "portalChallenge",
  "id": "931c4a40-2dc9-11e6-937b-005056c00008",
  "step": {
    "type": "challenge",
    "challengeQuestions": [
      "What is your favorite color",
      "What is your mother's maiden name"
    ]
  }
}

Note that the value of the type property is portalChallenge and the step type is challenge.

In addition to sending the standard id, type, and step properties with the next request, a correct answer must be provided for all values in the challengeQuestions array from the server response:

POST /idp/ws/rest/authn HTTP/1.1 
Content-Type: application/json 
Accept: application/json
{
  "type": "portalChallenge",
  "id": "931c4a40-2dc9-11e6-937b-005056c00008",
  "step": {
    "type": "challenge",
    "questionsAndAnswers": [
      {
        "question": "What is your favorite color",
        "answer": "cyan"
      },
      {
        "question": "What is your mother's maiden name",
        "answer": "smith"
      }
    ]
  }
}
Errors

If Federation calls out to retrieve the challenge set from Portal and that request fails, either because Portal could not be contacted or the user's password could not be retrieved from the directory, the authentication process will immediately fail. It will look something like this:

HTTP/1.1 200 OK 
Content-Type: application/json
{
  "type": "fail",
  "id": "931c4a40-2dc9-11e6-937b-005056c00008",
  "error": {
    "type": "simple",
    "message": "Failed to retrieve a Portal challenge"
  }
}
QR Code Authentication Method

The QR Code authentication method is a bit different from the other methods so far because it can be used to initiate the authentication process as well as provide another factor after authentication has been initiated via standard Initialization schemes.

As Initialization

At the API level, you know that a QR code may be used to initialize the authentication process if the response from the initialization request contains the property allowQRCodeScan with a value of true.

Currently, there are to ways for this to happen:

  1. If there is at least one enabled Authentication Policy whose first enabled method is QR Code

  2. If there is at least one enabled Authentication Policy whose insecureQRIdEnabled flag is set to true

HTTP/1.1 200 OK 
Content-Type: application/json
{
  "type": "username+password",
  "id": "35bf1450-2dbe-11e6-8a8b-005056c00008",
  "allowQRCodeScan": true,
  "claimAccountLink": {
    "href": "/arms/claim/",
    "displayName": "Claim My Account"
  },
  "helpLinks": [
    {
      "href": "/arms/forgotmyusername",
      "displayName": "Forgot My Username"
    },
    {
      "href": "/arms/forgotmypassword?redirect_to=/arms",
      "displayName": "Forgot My Password"
    }
  ]
}

To successfully initialize the authentication process with a QR code, the client must send a request containing the value encoded by the QR Code as read by a scanner:

POST /idp/ws/rest/authn HTTP/1.1 
Content-Type: application/json 
Accept: application/json
{
  "type": "qrCode",
  "id": "35bf1450-2dbe-11e6-8a8b-005056c00008",
  "value": "gobbledygookgibbersih"
}
As an Authentication Step

Here is an example response from the server indicating that QR Code authentication is required as the next step:

HTTP/1.1 200 OK 
Content-Type: application/json
{
  "type": "qrCode",
  "id": "e89afb10-2e6e-11e6-b6f0-005056c00008"
}

To successfully complete the QR code authentication step, the client must send a request containing the value encoded by the QR Code as read by a scanner:

POST /idp/ws/rest/authn HTTP/1.1 
Content-Type: application/json 
Accept: application/json
{
  "type": "qrCode",
  "id": "e89afb10-2e6e-11e6-b6f0-005056c00008",
  "value": "gobbledygookgibbersih"
}
SMS Authentication Method

Here is an example response from the server indicating that SMS authentication is required as the next step:

HTTP/1.1 200 OK 
Content-Type: application/json
{
  "type": "sms",
  "id": "beaa50c0-4a9a-11e5-ae5f-0050b6c32ffc"
}

This indicates that RapidFederation was able to successfully call out to the SMS provider to send a One-Time Password (OTP) to the user's mobile device.

In addition to sending the standard id and type properties with the next request, the otpCode should be included with the value the user received on their device.

POST /idp/ws/rest/authn HTTP/1.1 
Content-Type: application/json 
Accept: application/json
{
  "type": "sms",
  "id": "beaa50c0-4a9a-11e5-ae5f-0050b6c32ffc",
  "otpCode": "123456"
}
Re-sending the OTP

Please note that this will negate the original code and in the event that the user receives both codes, the latest one is the only one which will work.

If the user wishes for RapidFederation to re-send the OTP code to their device the following request can be made:

POST /idp/ws/rest/authn HTTP/1.1 
Content-Type: application/json 
Accept: application/json
{
  "type": "sms",
  "id": "beaa50c0-4a9a-11e5-ae5f-0050b6c32ffc",
  "forceNewAuthz": true
}
Social Authentication Method
Setup
Facebook
  1. Log in to https://developers.facebook.com

  2. My Apps -> Add a New App -> Website

  3. Give it a meaningful name like "RapidFederation Test" -> Create New Facebook App ID

  4. Settings -> Advanced -> Valid OAuth redirect URIs

    1. https://<RF_HOST>:<RF_PORT>/idp/socialCallback?n=facebook

  5. Settings -> Advanced -> Require App Secret

    1. Set to "No"

  6. Enter App ID and App Secret in the Social configuration for your Authentication Policy

Google
  1. Log into Log into https://console.developers.google.com

  2. Create a new Project and give it a meaningful name like "RapidFederation Test"

  3. Choose "Use Google APIs"

  4. Search for and enable Identity Toolkit API

  5. Choose the "Credentials" item on the left

  6. Add credentials

    1. OAuth 2.0 client ID

    2. Configure consent screen -> Save

    3. Application Type: Web Application

    4. Authorized redirect URIs

      1. https://<RF_HOST>:<RF_PORT>/idp/socialCallback?n=googleplus

    5. Create

  7. Enter client ID and client secret in the Social configuration for your Authentication Policy

Twitter
  1. Log into https://apps.twitter.com/

  2. Create New App

    1. Give it a meaningful name like "RapidFederation Test"

    2. Fill in the rest of the required fields

    3. Callback URL

      1. https://<RF_HOST>:<RF_PORT>/idp/socialCallback/twitter

      2. If testing with localhost, just put in another hostname. It will be OK

  3. Permissions -> Read only

  4. Enter Consumer Key and Consumer Secret in the Social configuration for your Authentication Policy

LinkedIn
  1. Log into https://www.linkedin.com/secure/developer

  2. Create Application

    1. Give it a meaningful name like "RapidFederation Test"

    2. Fill in the rest of the required fields

  3. Keep Default Application Permission of r_basicprofile

  4. OAuth 2.0 Authorized Redirect URLs

    1. https://<RF_HOST>:<RF_PORT>/idp/socialCallback?n=linkedin

  5. Enter Client ID and Client Secret in the Social configuration for your Authentication Policy

API
Initial Response

Below is an example of an initial response:

{
  "type": "social",
  "id": "c2e109d0-8d7b-11e5-8c0d-0050b6c32ffc",
  "step": {
    "type": "choose",
    "providers": [
      {
        "id": "facebook",
        "iconUrl": "https://rapidIdentity.example.com:8443/idp/assets/img/
            social/facebook.svg",
        "authenticationUrl": "...."
      },
      {
        "id": "googleplus",
        "iconUrl": "https://rapidIdentity.example.com:8443/idp/assets/img/
            social/googleplus.svg",
        "authenticationUrl": "...."
      },
      {
        "id": "linkedin",
        "iconUrl": "https://rapidIdentity.example.com:8443/idp/assets/img/
            social/linkedin.svg",
        "authenticationUrl": "...."
      },
      {
        "id": "twitter",
        "iconUrl": "https://rapidIdentity.example.com:8443/idp/assets/img/
            social/twitter.svg",
        "authenticationUrl": "...."
      }
    ]
  }
}

This is an example of a "type" = "social" response from the server. Notice the "step" object whose type is "choose". This object contains information about all of the choices the user has for social authentication – in other words, which providers (social networks) are allowed for authentication.  Each provider has an "id", an "iconUrl" and an "authenticationUrl".  The choose screen should render each option as a clickable button with the specified iconUrl as the button's image.

When the user clicks on one of them, a new tab should be opened to the associated "authenticationUrl".  This will redirect the user to that social platform for authentication and once authenticated,  back into RapidFederation at the "callback URL" of .../idp/socialCallback?n=<network>.

Auth Step

As soon as the user clicks the button to open the new tab, the RapidFederation page should switch to a view that is ready to submit the "auth" step.

Below is an example auth request:

{
  "type": "social",
  "id": "c2e109d0-8d7b-11e5-8c0d-0050b6c32ffc",
  "step": {
    "type": "auth"
  }
}

kThe "auth" step is intended to be submitted after authentication at the social site has completed. If it is submitted before that takes place, the "choose" step will be returned again.

If the user authenticates to the social platform with an identity which has already been paired, then at this point life is good and RapidFederation will move on to the next step. If the user authenticates with a new identity (i.e. one which they have not previously paired), then we move on to the "pair" step which begins with a "pair" response from the server.

Pair Step

Below is an example pair response:

{
  "type": "social",
  "id": "c2e109d0-8d7b-11e5-8c0d-0050b6c32ffc",
  "step": {
    "type": "pair",
    "provider": {
      "id": "facebook",
      "iconUrl": "https://localhost:8443/idp/assets/img/social/googleplus.svg"
    },
    "profile": {
      "name": "John ",
      "email": "jdoe@example.com",
      "imageUrl": ""
    },
    "pairRequiresPassword": true
  }
}

The "pair" begins with the server responding with some basic information about the social identity used for authentication and should be considered as the server confirming that the user wants to pair that social identity with their RapidFederation identity. Note that there is information about the provider and some basic profile information.

In my testing with our currently supported social networks, I was able to get at least "name" and "imageUrl" to be returned.  Realize that the information we get back from each provider is dependent on what information the user has given to that provider as well as what OAuth permissions the app on that platform has been given.

One more request is required to complete the pair process and that is the confirmation from the user that they want to pair with that social identity:

Pair Request

Below is an example pair request:

{
  "type": "social",
  "id": "c2e109d0-8d7b-11e5-8c0d-0050b6c32ffc",
  "step": {
    "type": "pair",
    "password": "P@$$w0rD"
  }
}

If "pairRequiresPassword" is true in the previous Pair Response, then of course the user will need to provide their password to complete the pair. Otherwise it can be omitted. Once complete RapidFederation moves on to the next authentication step.

TOTP Authentication Method

Here is an example response from the server indicating that TOTP authentication is required as the next step:

HTTP/1.1 200 OK 
Content-Type: application/json
{
  "type": "totp",
  "id": "e230e2e0-25ae-11e5-8dc9-0050b6c32ffc",
  "allowDeferral": true
}

Note that the value of the type property is totp.

When responding to the TOTP challenge a value for the otpCode property is required. This should contain the current value as displayed on the TOTP device.  Additionally, if the response from the server contains a true value for the allowDeferral property, as above, the user may opt to defer being challenged for 30 days.

POST /idp/ws/rest/authn HTTP/1.1 
Content-Type: application/json 
Accept: application/json
{
  "type": "totp",
  "id": "e230e2e0-25ae-11e5-8dc9-0050b6c32ffc",
  "otpCode": "123456",
  "defer": true
}
Deferral

If deferral is allowed and opted-into by the user, if the otpCode was valid then the next response from the server will contain a Set-Coolie header which should be handled automatically by the browser if cookies are enabled. The cookie contains information linking a particular user to a particular deferral.

Since the deferral is managed with a cookie, it is only good for a single browser on a single device.  If a different browser or device is used in the future, the user will be challenged again and may opt-in to deferral for that device/browser combination.

Multiple users may have active deferrals on the same device & browser.

Setup

The first time a user is challenged for TOTP authentication they need to go through a setup phase where they register their TOTP key with a device. In this case, the server will respond with a setup object which will contain all of the information required.

Note

Displayed values have been truncated here for formatting purposes, but the strings listed here should represent actual, usable values when generated in a production environment.

HTTP/1.1 200 OK 
Content-Type: application/json
{
  "type": "totp",
  "id": "e230e2e0-25ae-11e5-8dc9-0050b6c32ffc",
  "setup": {
    "setupInstructions": "You need to set this up now!",
    "base64QrCode": "iVBORw0KGgoAAAANSUhEUgAAASwAAAEsAQAAAABRB[...]",
    "secret": "KDXUAAZNFCYVUEVXPXPT3BHRX4S5KXFO",
    "passwordRequired": false
  },
  "allowDeferral": true
}

The setupInstructions property contains instructions which should be displayed to the user

The base64QrCode property contains a Base64-encoded PNG image of the QR code which should be displayed. Many TOTP devices allow registration by scanning a QR code.

The secret roperty contains the TOTP secret key which can be used to perform manual registration on a device

The passwordRequired property indicates whether or not a valid password is required to complete the setup process. This will be true if there have been no previous authentication steps which have validated the user is who they claim to be.  In other words requiring a password for setup ensures that someone cannot setup TOTP authentication for someone else by simply supplying a valid username at the beginning of the process.

To To successfully complete the setup step a valid otpCode must be provided. This ensures that the user has successfully setup their TOTP device.

POST /idp/ws/rest/authn HTTP/1.1 
Content-Type: application/json 
Accept: application/json
{
  "type": "totp",
  "id": "e230e2e0-25ae-11e5-8dc9-0050b6c32ffc",
  "otpCode": "123456",
  "defer": true,
  "password": "mysupersecretpassword"
}
Swagger API Documentation

For anyone with the API Developer Role, the Swagger-defined APIs can be accessed by following these three steps.

  1. Open a browser tab and type this address: https://<hostname or IP address>/api.

  2. Click the Swagger link, which will be in this format: https://<hostname or IP address>/api/rest/api-docs?url=/api/rest/swagger.json.

    Note

    This URL can be bookmarked for convenience.

  3. The Swagger-defined APIs may take a moment to load. This behavior is normal and expected. Once loaded, the APIs appear as shown. 

    Appliance_Capabilities_3.png

Integrating and Applying RapidIdentity APIs

RapidIdentity APIs enable developers and other information technology profiles to access and employ identity information that is otherwise not available in the user interface.

Depending on the specific use case and its solution implementation, technology professionals can leverage the APIs to help automate self-service actions, provisioning, auditing, and even integrate the underlying RapidIdentity technology into a custom environment independent of the RapidIdentity user interface.

API-derived solutions, whether the APIs are specific to RapidIdentity or integrate service provider APIs (e.g. Google), are representative of a snapshot-in-time since APIs adapt and evolve relative to the software roadmap. As software increases in functionality and obsoletes older technology and features, APIs adapt and evolve accordingly. If an API is not available when required or if additional functionality is necessary beyond the currently available API, a RapidIdentity Connect RESTPoint can bridge this gap.

Moreover, the manner in which RapidIdentity can be leveraged to address a use case and implement a solution is dependent on the RapidIdentity licensing, the organization's environment (e.g. systems, software, necessary regulations), and how the customer chooses to address the use case.

To address this context, the following scenario is intended to provide a conceptual overview to how RapidIdentity's technology and APIs can address key identity and access management scenarios, which can then inspire technology professionals to leverage this technology to develop unique solutions for their own environment.

Self Service with Organization Front-End Environment

RapidIdentity Self-Service Profiles Actions (e.g. Update Challenge Responses, Claim Account) allow users to perform administrative actions on their own accounts without the need of an information technology professional to grant or moderate access and authorization. The advantages of this delegation to users include relieving IT staff of relatively mundane tasks and empowering users to take immediate ownership of their account.

Challenge Questions/Answers Overview

The objective is to provide users with a mechanism to update specific Challenge Question Answers selected by an organization (e.g. one or two question/answers in a challenge set of six questions) in a custom, organization-specific front-end environment without requiring users to use the RapidIdentity Challenge Question dialog. These challenge questions are presented on the front end through a drop-down box for each question and users are forbidden from answering the same question more than once. Users can also input three of their own question and make only one of them required.

This use case is an example of how RapidIdentity technology can operate in the background and is relatively common since many organizations have their own portal-type environment in which users are required to authenticate to gain access to their secure organization network and applications and prefer to use their own, company-branded interface to avoid user confusion as new technology is integrated.

Before launching into the order-of-operations to address this use case conceptually, it is important to consider what is likely to be necessary to address this use case first. The following eight items compose a nonexhaustive list of key issues to consider.

  1. User Authentication Process

  2. RapidIdentity Challenge Response APIs

  3. Organization APIs

  4. Filtering Challenge Set Questions

  5. Data format (JSON or XML)

  6. Authoritative Source Synchronization (e.g. Directory Service, Database)

  7. Audit Logs

  8. Regulatory Concerns

Not all of these eight issues will be addressed in the solution approach because that is beyond the scope of this topic and the intention is to provide a conceptual overview.

  1. Admins trigger Challenge Question Answer updates through RapidIdentity Portal.

  2. Challenge Set Questions are obtained by API, filtered by the organization, and the updated user responses are returned to RapidIdentity in JSON format using API.

  3. Only one Challenge Set Policy Exists.

  4. Updates are sent to the directory service.

  5. Audit logs are updated through RapidIdentity.

  6. Regulatory concerns are not addressed.

With these six assumptions in hand, the simplified order of operations to address this use case is as follows.

  1. Administrator navigates to RapidIdentity Portal | Configuration | Profiles | Extended | Challenge Policy Manager | General and click Set to Now.

    1. Administrators must have the RapidIdentity Portal Profiles Admin role.

  2. User authenticates.

  3. User challenge questions are obtained through API call to RapidIdentity.

    GET /arms/ws/rest/actm/actions/challenge/setup

    RESPONSE 200 OK:

    {
       "targetId":"0dbe1c00-7056-11e6-aa1d-0e37b9aa2711",
       "challengePolicy":{
          "id":"397b0e20-6ee9-11e6-a4b4-0e37b9aa2711",
          "name":"Default Challenge Policy",
          "noChallenge":false,
          "adminQuestions":[
             {
                "required":true,
                "question":"What is your favorite color"
             }
          ],
          "minAdminQuestionPoolSize":1,
          "allowUserDefinedQuestions":true,
          "minUserQuestionPoolSize":0,
          "maxUserQuestionPoolSize":255,
          "minQuestionLength":3,
          "maxQuestionLength":255,
          "minAnswerLength":3,
          "maxAnswerLength":255,
          "numAdminAnswersForAuth":1,
          "numUserAnswersForAuth":0,
          "numHelpdeskQuestions":0,
          "restrictWordsFromQuestion":false,
          "canSkipSetup":false,
          "enforceUniqueAnswers":true
       },
       "adminQuestions":[
          {
             "required":true,
             "question":"What is your favorite color"
          }
       ],
       "userQuestions":[
          {
             "question":"What is my dog's favorite toy"
          },
          {
             "question":"What is my favorite song"
          },
          {
             "question":"Who was my first college roommate"
          }
       ]
    }
  4. Admin parses JSON to extract questions. Admin determines whether user questions are allowed and then pushes all questions to the user interface.

  5. User answers questions and clicks Submit.

  6. Admin creates pre-request JSON and makes POST API call to RapidIdentity.

    POST /arms/ws/rest/actm/actions/challenge/setup

    {
      "targetId": "0dbe1c00-7056-11e6-aa1d-0e37b9aa2711",
      "challengePolicy": {
        "id": "397b0e20-6ee9-11e6-a4b4-0e37b9aa2711",
        "version": 1,
        "name": "Default Challenge Policy",
        "priority": 1,
        "enabled": true,
        "noChallenge": false,
        "default": true,
        "groupAclsEnabled": false,
        "groupAcls": [
          {}
        ],
        "filterAclEnabled": false,
        "filterAcl": "",
        "adminQuestions": [
          {
            "required": true,
            "question": "What is your favorite color"
          }
        ],
        "minAdminQuestionPoolSize": 1,
        "allowUserDefinedQuestions": true,
        "minUserQuestionPoolSize": 1,
        "maxUserQuestionPoolSize": 3,
        "minQuestionLength": 3,
        "maxQuestionLength": 255,
        "minAnswerLength": 3,
        "maxAnswerLength": 255,
        "numAdminAnswersForAuth": 1,
        "numUserAnswersForAuth": 1,
        "numHelpdeskQuestions": 0,
        "restrictWordsFromQuestion": false,
        "canSkipSetup": false,
        "enforceUniqueAnswers": true,
        "oldestAllowedResponseTimestamp": 20170622
      },
      "adminQuestions": [
        {
          "required": true,
          "question": "What is your favorite color",
          "answer": "Orange"
        }
      ],
      "userQuestions": [
        {
          "required": true,
          "question": "What is my dog's favorite toy",
          "answer": "Squirrel"
        },
        {
          "required": false,
          "question": "What is my favorite song",
          "answer": "Cheeseburger in Paradise"
        },
        {
          "required": false,
          "question": "Who was my first college roommate",
          "answer": "Luke"
        }
      ]
    }

    RESPONSE 200 OK:

    {
      "target": "0dbe1c00-7056-11e6-aa1d-0e37b9aa2711",
      "targetName": "Doc Admin",
      "success": true
    }

While this use case focuses on specific challenge questions and their answers in a set, this use case solution approach could easily be adapted to password self-service, account claiming, or any other delegated administration action.

To develop solutions for additional RapidIdentity self-service use cases (e.g. Password, Account Claim) by adopting the above approach, it is necessary to substitute the corresponding APIs specific to your use case and constructing the POST pre-request JSON script to match the API.

OAuth 2.0 User Guide

RapidIdentity currently supports the Authorization Code Grant as defined by the OAuth 2.0 Specification.

Authorization Request

Issue a GET to /idp/profile/oauth2/auth with the following parameters:

response_type:

Type: String

Required: True

Description: The default value is "code."

client_id:

Type: String

Required: True

Description: The Client ID.

redirect_uri:

Type: String

Required: True

The registered callback URL.

scope:

Type: String

Required: False

Space-delimited API scopes to request. The default value is "basic."

state:

Type: String

Required: False

An opaque value used by your application to maintain state between the request and callback.

Note

If the authenticating user does not already have an authenticated Federation session, they will be redirected to the login page.

After successful authentication or validation of the user's current session, the browser will be redirected to the callback URL with a "code" parameter and a "state" parameter (if one was supplied in the initial request).

The "code" must be exchanged for an access token in the next step.

RapidIdentity currently supports a single scope of "basic" which gives read-only access to the authenticated user's profile.

Access Token Refresh

Issue a POST to /idp/profile/oauth2/token with the following parameters:

Table 83. POST Parameters

Parameter

Type

Description

grant_type

String required

"refresh_token"

refresh_token

String required

The refresh token value received in the Access Token Response.

scope

String optional

Space-delimited API scopes, defaults to whatever scope was originally granted.

client_id

String optional

Your Client ID. This is required if HTTP Basic Authentication is not used.

client_secret

String optional

Your Client Secret. This is required if HTTP Basic Authentication is not used.



As shown in the parameter table, HTTP Basic Authentication may be used instead of providing client_id and client_secret as request parameters.

In that case, the Client ID should be used as the username and the Client Secret should be used as the password.

If possible, the use of HTTP Basic Authentication is preferred.

Assuming the request is valid, the Authorization Server generates a new access token and refresh token pair and returns a response in the same format as the Access Token Response.

Access Token Response

Assuming the Access Token Request is valid, the Authorization Server will return a response like this:

Below is an example response:

HTTP/1.1 200 OK 
Content-Type: application/json;charset=UTF-8 
Cache-Control: no-store 
Pragma: no-cache
{
  "access_token": "2YotnFZFEjr1zCsicMWpAA",
  "token_type": "Bearer",
  "expires_in": 7200,
  "refresh_token": "tGzv3JOkF0XG5Qx2TlKWIA",
  "scope": "basic"
}

Note

Once an Authorization Code has been exchanged for an Access Token, that Authorization Code may not be used again in the future.

Access Token Request

Issue a POST to /idp/profile/oauth2/token using the application/x-www-form-urlencoded format with a character encoding of UTF-8 and the following parameters in the request body:

Table 84. POST Parameters

Parameter

Type

Description

grant_type

String required

"authorization_code".

code

string required

The value of the "code" parameter from the previous response.

redirect_uri

string required

Your registered callback URL.

Must match exactly the value used in the previous request

client_id

string optional

Your Client ID. This is required if HTTP Basic Authentication is not used.

client_secret

string optional

Your Client Secret. This is required if HTTP Basic Authentication is not used.



As shown in the parameter table, HTTP Basic Authentication may be used instead of providing client_id and client_secret as request parameters.

In that case, the Client ID should be used as the username and the Client Secret should be used as the password.

If possible, the use of HTTP Basic Authentication is preferred.

My User Profile Request

Required Scopes: basic

When requesting a user profile, the system will return a JSON object containing the information your RapidIdentity Administrator selected to be returned to the OAuth 2.0 Client you are using.

For example, if you submitted this example request:

GET /idp/profile/oauth2/me 
Authorization: Bearer 2YotnFZFEjr1zCsicMWpAA

You should get a response that looks like this:

HTTP/1.1 200 OK 
Content-Type: application/json;charset=UTF-8
{
  "id": "f1ca0d92-f42c-4499-a77a-4a733fc841b2",
  "firstName": "Homer",
  "lastName": "Simpson",
  "email": "homer.j.simpson@simpsons.com"
}

The response you receive may be different, depending on your system's configuration.

WS-Federation Usage Guide

RapidIdentity supports the WS-Federation 1.2 Web Passive Requestor Protocol as defined by Oasis.

At this time, RapidIdentity only supports the generation of security tokens containing a SAML 1.1 assertion. SAML 2.0 assertions may be supported in the future.

An Identity Provider must be created in the RapidIdentity cluster before WS-Federation will work.

Sign-On Request

Issue a GET to /idp/profile/wsfed with the following parameters.

Table 85. GET Parameters

Parameter

Type

 Description

wa

String required

"wsignin1.0".

wtrealm

String required

The "Realm ID" of the Relying Party.

wctx

String optional

A opaque value used by the Relying Party to maintain state between the request and callback.

wfresh

Integer optional

The desired maximum age of authentication in minutes. A value of 0 (zero) indicates that the Identity Provider should force the user to re-authenticate before issuing a token. A value &amp;gt; 0 indicates that the Identity Provider should force the user to re-authenticate if they have not authenticated in that many minutes. If not specified, then the Identity Provider will make its own determination on whether the user needs to be re-authenticated based on the global SSO session timeout.

wreply

String optional

The URL to which the Identity Provider should POST the security token.

By default the Identity Provider will POST the security token response back to the "Realm ID" of the Relying Party if it is a valid URL. However, multiple response URLs can be registered for any Relying Party and if one of those is specified by this parameter, the Identity Provider will POST the token there.

The Identity Provider will never POST to a response URL which has not been pre-registered.



Upon issuing a security token, the Identity Provider generates an HTML form populated with the following values and POSTs the form to the response URL.

Table 86. POST Parameters

Parameter

Type

Description

wa

String

"wsignin1.0".

wctx

String

The wctx value which was passed in to the original Sign-On request (if any).

wresult

String

The security token itself.



Sign-Out Request

RapidIdentity does not currently support "Federated" or "Single Sign-Out". Upon receiving a WS-Federation Sign-Out request, only the SSO session at the Identity Provider is destroyed.

Issue a GET to /idp/profile/wsfed with the following parameters.

Table 87. GET Parameters

Parameter

Type

Description

wa

String required

"wsignout1.0"



Relying Party Management

The REST endpoint for managing WS-Federation Relying Parties is /api/rest/admin/wsfed/relyingParties. The standard GET, POST, PUT and DELETE verbs are supported for CRUD operations.

A Relying Party is required to have a unique realmId and name. The realmId must be a valid URI.

A Relying Party may be configured to allow release of various attributes in the SAML 1.1 assertion included in the security token response.

WS-Federation Metadata

The WS-Federation metadata document is available from the RapidIdentity server at these two locations.

  1. /FederationMetadata/2007-06/FederationMetadata.xml

  2. /idp/wsfed/metadata

By default the metadata is signed with the Identity Provider's signing credential. If this is not desired, include the URL parameter ?sign=false to disable the signature.

RapidIdentity API Reference

RapidIdentity Current LTS Release

RapidIdentity Previous LTS Release

RapidIdentity Rolling & LTS Release Versions
New RapidIdentity Versioning Scheme

Beginning in May 2020, RapidIdentity's versioning scheme is changing to Year.MajorRelease.MinorRelease-BuildID. The first RapidIdentity version for this new versioning scheme is 2020.0.0-<BuildID>.

Release_Version_Image_Example.jpg
  • Year is the year of the release.

  • MajorRelease indicates which major release for the year. Major starts at 0 for each new year.

  • MinorRelease indicates a maintenance release or hotfix for a major release and starts at 0 for each new major.

  • BuildID is provided by the build system.

Examples
  • The first release in 2020 would be 2020.0.0-<BuildID>

  • The second major release in 2020 would be 2020.1.0-<BuildID>

  • A maintenance release or hotfix for the first 2020 release would be 2020.0.1-<BuildID>

Previously, updates to the RapidIdentity product and all of its components occurred through a versioning sequence based on date with a format of YYYY.MM.DD that occurred in two different version classifications: Rolling and Long Term Support (LTS). These and all subsequent versions are detailed further in the RapidIdentity Release Notes.

RapidIdentity Cloud Versioning Scheme

The RapidIdentity Cloud Versioning scheme is different from the LTS versioning scheme, as Cloud tenants are updated automatically by Identity Automation. This consists of the date the build was cut as well as the BuildID.

Cloud_Release_Versioning.png

Previously, updates to the RapidIdentity product and all of its components occurred through a versioning sequence based on date with a format of YYYY.MM.DD that occurred in two different version classifications: Rolling and Long Term Support (LTS). These, Cloud versions, and all subsequent versions are detailed further in the RapidIdentity Release Notes.

Rolling Release Versions

The purpose of the Rolling Release is to make new updates to the RapidIdentity product available to customers and partners faster. These updates can include, but are not limited to, bug fixes, improvements, new features, and security updates.

The Rolling Release frequency intends to be faster than past release versions, which was approximated monthly for bug fixes and quarterly for minor versions to include to new features (e.g. 4.2.4.2.0 to 4.3.4.3.0).

It is possible for Rolling Releases to occur daily, however, daily releases would likely indicate bug fixes, which may not affect the environment based on RapidIdentity licensing.

Rolling Releases are visible in RapidIdentity Appliance and available for upgrade if the current RapidIdentity License matches software included in the Rolling Release.

Note

Rolling Releases have been deprecated and are no longer offered by Identity Automation.

Long Term Support (LTS) Release Versions

A RapidIdentity Long Term Support (LTS) Release is a RapidIdentity Version that is available for support for up to 12 months. LTS Release Versions occur approximately every 6 months.

There are two primary differences between a Rolling Release and an LTS Release: LTS Releases includes bug fixes and security updates only and the versioning date number includes a trailing digit.

The LTS versioning sequence is formatted as YYYY.MM.DD.N, where "N" is an integer. For example, a future LTS version could be designated as 2018.3.15.0, where the trailing-zero indicates the first LTS version.

A subsequent LTS version that includes bug fixes or security updates but no new features since this date would be 2018.3.15.1.

Overall Sequence

The outline below is intended to show how Rolling and LTS Releases are related.

Rolling and LTS Release Example
2017.7.22 # First Version of RapidIdentity in this versioning sequence.

2017.9.02 # Rolling Release, bug fix2017.9.08 # Rolling Release, new feature

2017.9.20 # Rolling Release, enhancement

2017.9.23 # Rolling Release, bug fix.

2017.9.23.0LTS # Includes all Rolling Release versions to this date.

2017.9.30 # Rolling Release, bug fix.

2017.10.04 # Rolling Release, bug fix.

2017.10.09 # Rolling Release, new feature.

2017.10.18 # Rolling Release, new feature.

2017.9.23.1 LTS # Includes bug fixes only (2017.9.30 and 2017.10.04).

2017.10.23 # Rolling Release, bug fix.

2018.3.15 # Rolling Release, new feature.

2018.3.15.0 LTS # Includes all Rolling Releases since 2017.09.23
SSH Management

The RapidIdentity Command Line Interface allows for selected management and configuration of RapidIdentity Appliance settings. Some of these settings overlap with settings found through links on the RapidIdentity Appliance homepage, while other settings are unique to the CLI interface.

The layout with the look and feel of the current CLI menu is different compared to the CLI menu from the RapidIdentity versions 4.3 and earlier. Notably, the interface contains a blue background and there are eight main menu options. There are currently eight Main Menu options.

Updating Configurations

Installing RapidIdentity automatically configures settings that are sensible based on how the RapidIdentity software works. Care should be exercised before attempting to modify any of the settings available through the RapidIdentity CLI Interface.

Main Menu

The Main Menu interface is the top-level of the RapidIdentity Command Line interface and provides access to 9 interfaces:

  1. RapidIdentity

  2. System

  3. Logs

  4. Local Database

  5. Local LDAP Server

  6. Local File Server

  7. Tools

  8. Shutdown/Reboot

  9. About

RapidIdentity

The RapidIdentity Interface provides 7 additional interfaces:

RI_Appliance_Config_Screen.png
Status

The RapidIdentity Status interface provides the option to Stop, Start, or Restart RapidIdentity at the process level. 

Appliance_Status.png

The Restart option can be used after making changes to configuration options in the CLI or through the RapidIdentity Appliance Home page.

The Stop option is helpful when making changes that affect RapidIdentity globally, such as an uninstall-reinstall of the Local Database or LDAP Server.

The Start option is helpful in the event the service was stopped.

Main Database

The Main Database menu item lists the currently configured database. Selecting this option opens a submenu with 7 additional items.

  1. Type

  2. Host

  3. Port

  4. Database/Schema

  5. Username

  6. Password

  7. Advanced

Main_Database_1.png

Selecting options 2-6 opens a prompt for administrators to change the values for each of those fields. The Advanced menu item directs to the rapididentity.properties configuration file.rapididentity.properties

Selecting the Type menu option allows administrators to change the main RapidIdentity Database. The currently supported databases types are MySQL, PostgreSQL, and MSSQL.  

Main_Database_2.png

If the Main Database is changed, it is necessary to Restart RapidIdentity for the change to take effect.

MySQL Driver

The MySQL driver can be installed after the initial RapidIdentity installation.

Audit Database

The Audit Database interface allows administrators to determine whether a specific database should be used for audit. 

Audit_Database_1.png

The default setting is False, which means that the local database is used for audit.

If the Audit Database is changed, it is necessary to Restart RapidIdentity for the change to take effect.

Start-At-Boot

The Start-At-Boot configuration allows RapidIdentity to start when the operating system is started.

For example, if RapidIdentity is hosted on an AWS EC2 Instance and Start-At-Boot is enabled, once the instance has passed its start up checks RapidIdentity will start and subsequently be available to access from a browser after a few minutes; RapidIdentity is available immediately from the command line after the instance passes its start up checks.

The default setting is enabled. To disable this configuration, select and confirm to disable. 

Start_At_Boot.png
Capabilities

The Capabilities menu item allows administrators to define the currently available capabilities. Selecting this option opens a prompt to edit Capabilities, which control the various functionalities that should be exposed by the RapidIdentity server.  

The advantage of this functionality in a unified RapidIdentity is that RapidIdentity back end processes are not dedicated to a component that isn't applicable. Therefore, RapidIdentity can run more efficiently.

Appliance_Capabilities_1.png

The end result is that the rapididentity.propertiescapabilities value is updated.

Appliance_Capabilities_2.png

Capabilities can be configured to inclusive or exclusive by adding prefixes of "+" or "-", respectively.

Each component in the table matches to a RapidIdentity Component, except for "admin" which refers to RapidIdentity Configuration components. The API is critical for any .ui or .jobs components.

Table 88. Components

Component

UI

Jobs

admin

admin.ui

admin.jobs

connect

connect.ui

connect.jobs

federation

federation.ui

federation.jobs

folders

folders.ui

folders.jobs

portal

portal.ui

portal.jobs

studio

Note

Studio is only available in IDaaS environments

studio.ui

studio.jobs



Folders Notes

If the Cluster metadirectory is not pointing to Active Directory, the folders capabilities will continue running even with no tasks since RapidIdentity Folders is specific for Windows-based home or group shared folders.Cluster

Note

Best practice is to exclude or not enable any capabilities that are not licensed.

Wildcard Groups

The wildcard "all" can be used as a prefix in three possible ways with either an inclusion or exclusion.

  1. all: includes or excludes every UI and Job capability

  2. all.ui: includes or excludes every UI capability

  3. all.jobs: includes or excludes every Job capability

Inclusions and Exclusions

Inclusions and exclusions are processed in the order they occur and result in adding or removing from the set of capabilities.

  • If the list is empty, then all capability group is used.

  • If the list starts with an exclusion, then the initial set is the all capability group.

  • If the first item in the list is an inclusion, the initial set starts as empty.

  • Including or excluding a top level capability also includes or excludes all its subordinates (e.g. connect includes connect, connect.ui and connect.jobs).

  • Including a subordinate implies inclusion of its superior (e.g. federation.ui includes Federation).

  • Excluding a subordinate does not imply exclusion of its superior.

  • Including or excluding a group is equivalent to including or excluding each of the individual members of the group.

Table 89. Additional Capability Examples

Capability

Description

capabilities=

Includes all capabilities

capabilities=all

Includes all capabilities

capabilities=admin,connect

Includes admin, admin.ui, admin.jobs, connect, connect.ui, and connect.jobs.

capabilities=-folders

Includes all capabilities except folders.

capabilities=portal,-portal.jobs,federation

Includes portal, portal.ui, federation, federation.ui, and federation.jobs.



Specialty Configurations

Occasionally, you will need capabilities configurations to support customized actions for RapidIdentity. Listed below are a few typical options.

  • Expose Connect RESTPoints without exposing the UI or jobs on that server:

    • capabilities=connect,-connect.jobs,-connect.ui

      Note

      This will allow a cluster member to accept and respond to RESTPoints built in a Connect project, but prevent UI access from that instance and prevent scheduled Connect jobs from running on that instance.

  • Configure a Connect instance to not run background jobs:

    • capabilities=connect,-connect.jobs

  • Configure a Studio instance to not run background jobs:

    Note

    Studio is only available in IDaaS environments

    • capabilities=studio,-studio.jobs

SSL/TLS Profile

The SSL/TLS Profile menu item defines which SSL Profile should be used with RapidIdentity. Selecting this option opens a prompt to edit the profile.Create an SSL Profile

The end result is that the rapididentity.properties tomcat.sslProfile value is updated.

Beginning in RapidIdentity version 2020.1.0, the following changes will apply to the Tomcat properties in rapididentity.properties:

  • tomcat.sslCipherBlacklist has been deprecated.

  • tomcat.sslProtocols can now include TLSv1.2, and TLSv1.1 ONLY.

    • By default, RapidIdentity will use the list TLSv1.2 for version 2020.1.0. In order to use TLSv1.1 with 2020.1, you will need to provide your own cipher suites.

  • tomcat.sslCipherWhitelist has been added. This allows you to specify a list of TLS cipher suites to enable. If this list is provided, it will override the default list.

    Note

    The whitelist will be a comma-separated list, just like the blacklist was. Examples:

    tomcat.sslProtocols=TLSv1.2

    tomcat.sslCipherWhitelist=TLS_AES_256_GCM_SHA384,TLS_CHACHA20_POLY1305_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384

    RapidIdentity will use a secure set of cipher suites by default, including:

    • For TLSv1.2:

      Note

      ONLY included if TLSv1.2 is enabled and there is no whitelist - default behavior

      • TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384

      • TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256

      • TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384

      • TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256

      • TLS_DHE_RSA_WITH_AES_256_GCM_SHA384

      • TLS_DHE_RSA_WITH_AES_128_GCM_SHA256

    • For TLSv1.1:

      Note

      ONLY if TLSv1.1 is enabled and there is no whitelist - default behavior, and ONLY included in later builds of 2019.12.15.x and 2020.x.

      TLSv1.1 is not recommended.

      • TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA

      • TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA

      • TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA

      • TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA

Advanced

The Advanced menu item directs administrators to the rapididentity.properties configuration file.rapididentity.properties

System

The System menu allows administrators to update five configurations.

RI_Appliance_Network_Screen.png
Network

From the RapidIdentity Systems Menu, navigate to the Network menu to adjust network and firewall settings.

Systems_Network.png

The Network submenus allow administrators to configure network parameters in Network Settings, define a proxy URL if necessary, update Firewall Settings, pl;access Network Diagnostics, and choose to restart the Networking or Firewall.  

Network_Settings_1.png
Network Settings

The Network Settings submenu provides four menu items.

  1. IP Address, Gateway and DHCP

  2. Hostname

  3. DNS Servers

  4. Hosts File

HTTP Proxy URL

Selecting the HTTP Proxy URL allow administrators to enter a proxy URL.

Firewall Settings

Firewall Settings opens the configuration file and those settings can be modified and saved. Even if no changes are made to the firewall file, the firewall is restarted every time the file is closed.  

Network_Firewall_Settings.png

Choosing to restart the Network or Firewall results in an automatic restart.

Diagnostics

Network Diagnostics provides seven options to troubleshoot network issues pertaining to RapidIdentity.

  1. Devices

  2. Connections

  3. Routing Table

  4. ARP Table

  5. Ping

  6. TraceRoute

  7. NSLookup

Devices lists networked devices associated to RapidIdentity. If there are no networked devices associated to RapidIdentity then the table will be blank.

Connections opens a table describing Active Internet Connections. 

Network_Settings_3.png

The Routing Table lists the Kernel IP Routing Table.

Network_Settings_4.png

The ARP Table opens a table of existing IPv4 addresses in a given network. If there are no addresses then the table will be blank.

Ping, TraceRoute, and NSLookup all provide an input dialog to enter a Hostname or IP address to perform the action.  

Network_Settings_5.png
Restart Networking or Firewall

These menu items, when chosen, will restart the selected item.

Time

The Time menu displays the current time and allows administrators to configure the timezone.  

Time_1.png

The Timesync menu option opens a configuration describing how time synchronization works within RapidIdentity.

Time_2.png
SNMP

The SNMP provides access to the snmpd configuration file and its manual.

SNMP_1.png

The configuration file can be edited, and once that file is closed the SNMP service is restarted. 

SNMP_2.png

The manual describes the snmpd agent.

SNMP_3.png
Security

The Security menu allows administrators to change the RapidIdentity Appliance user password along with choosing whether to enable SSH multifactor authentication and unlimited strength encryption.

RI_Appliance_Security_1.png

Unlimited Strength Encryption

Choosing whether to enable unlimited strength encryption requires administrators to familiarize themselves with legal restrictions.

It is recommended that administrators consult legal counsel prior to enabling this option to ensure compliance with all relevant laws.

SSH Multi-Factor

SSH Multi-Factor is an option available to Identity Automation administrators only. To enable fully, it is necessary to enter the idauto username and TOTP token from the mobile device.

RI_Appliance_Security_2.png
Updates

The Updates menu allows administrators to check or apply updates pertaining to security only or to the entire system.

Appliance_Updates_1.png

Selecting either of the options to check for updates initiates a script to determine whether security or or system updates are available.

Appliance_Updates_2.png

Selecting either of the options to apply updates initiates a script to determine whether existing packages can be updated. If updates are not available then administrators are prompted to press any key to continue.  

Appliance_Updates_3.png
Logs

The Logs interface allows administrators to view log data from RapidIdentity, the configured Audit Database, the Local Database, and the Local LDAP Server.

Appliance_Logs_1.png

For example, selecting RapidIdentity opens up a view of the RapidIdentity logs and administrators can either scroll down or tail the logs to have feedback on demand.

Appliance_Logs_2.png
Local Database

The Local Database allows administrators to configure either PostgreSQL or MySQL.

Local_Database_1.png

RapidIdentity searches for PostgreSQL by default. Both installed databases have the same menu when selected. 

Local_Database_2.png

Selecting Server Status allows administrators to stop, restart, or uninstall. Since PostgreSQL is not installed in this example, its interface only provides the potion to install.

Local_Database_3.png
Local_Database_4.png

The Start-At-Boot and Daily Backups interfaces allow administrators to disable the corresponding service.

Local_Database_5.png
Local_Database_6.png
Local LDAP Server

The Local LDAP Server menu allows administrators to configure the Server Status, whether to Start-At-Boot, and the Password sync key.

Selecting the Local LDAP Server Main Menu item displays the current Server Status.

Local_LDAP_1.png

Selecting the current Server Status opens a submenu to configure the Server Status, whether to Start-At-Boot, and the Password sync key.

Local_LDAP_2.png

The LDAP Server Status and Start-At-Boot options are identical to the Local Database.

The Password Sync Key is used by OpenLDAP to encrypt captured passwords and its functionality is analogous to the Active Directory Password Filter. Selecting this option enables the installation or update of the public key to encrypt captured passwords.

Local_LDAP_3.png
Local_LDAP_4.png

Password Sync Key Considerations

Depending on the environment and the directory service associated with RapidIdentity, it may be necessary to install or update the Password Sync Key when using OpenLDAP and RapidIdentity. Sometimes the Password Sync may not be installed or running, or the instance may be a standalone component whose sole purpose is to host the OpenLDAP server and the RapidIdentity Server(s) are hosted elsewhere. It is usually helpful to update the Password Sync Key when integrating OpenLDAP with RapidIdentity.

Local File Server

The Local File Server is available with all RapidIdentity Rolling and LTS Release versions beginning with Rolling Release version 2018.5.2.

The Local File Server interface allows administrators to install an SMB file system to serve as a Windows-environment cluster shared file system.

Legacy_Local_File_Server.png

Installing the Local File server is best used for on-premises configurations and test environments , and the Local File Server can be installed in either of 2 places:

  1. A dedicated Windows File Share Server in the organization's environment.

  2. On the RapidIdentity appliance server that contains the RapidIdentity database.

If the dedicated Windows File Share Server is available in the organization's environment, option 1 is best. Otherwise, option 2 is sufficient, however, it is advisable to ensure sufficient disk space exists to allow for both database and RapidIdentity Connect logs to store. If possible, SNMP monitoring of the disk space is also advisable.

Post-installation, RapidIdentity will only ever expose one shared idautocluster and it will only be accessible by 1 user of the same name, and the Local File Server is not visible in the Windows Explorer Network Folder. It is necessary to know the Local File Server UNC path to access it, which is available in the Connection Info menu after installation.

Once the Local File Server is installed and configured in the Command Line Environment, it can be subsequently administered in either of 2 places, depending on UI:

Install the Local File Server

Upon upgrading to a RapidIdentity Release Version that makes the Local File Server configuration available, the default configuration will be Not Installed. If the Local File Server is not necessary for the RapidIdentity implementation, the default configuration can remain as Not Installed.

To install the Local File Server, follow these steps:

  1. Navigate to Main Menu | Option 6 and press Enter.

  2. The Server Status displays not installed. Press Enter or Select to continue and the Enter or Select install the Local File Server.

    Local_File_Server_1.png
    Local_File_Server_2.png
  3. Enter and confirm the Local File Server password. 

    Local_File_Server_3.png
    Local_File_Server_4.png
  4. A successful installation prompts users to click any key to continue and subsequently displays a Server Status value of running.

    Local_File_Server_5.png
    Local_File_Server_6.png
Server Status

The Server Status menu allows administrators to start, restart, or uninstall the Local File Server. 

Server_Status_1.png
Server_Status_2a.png
Change Password

Administrators can change the Local File Server password at any time to match their organization's File Server Password Policy requirements.

To change the Local File Server Password, navigate to Option 2 | Change Local File Server Password and press Enter

Change_Password_1.png

Enter and confirm the new password, and then press any key to continue.

Change_Password_2.png
Change_Password_3.png
Change_Password_4.png
Connection Info

The Connection Info provides the UNC Path and the Username for the Local File Server. 

Connection_Info.png
File_Server_Connection_Info.png

Installing the Local File Server on a RapidIdentity Appliance makes the Local File Server available as a configuration option but does not automatically enable the Local File Server.

To enable the Local File Server, navigate to either of the two UI options described about and configure (i.e. add the UNC File Path, username, and password) the Local File Server as CIFS File Storage.

Tools

The Tools menu contains 7 menu items:

  1. Top

  2. Network

  3. Processed

  4. Disk Space

  5. Large Files

  6. Java Version

  7. Groovy Version

  8. VMWare Open VM Tools

Tools.png
Top

The Top menu item opens a nonexhaustive dynamic process identification table detailing CPU and memory percentages amongst other values. The command for each running process is also listed in each row.  

Top.png

To exit this table and return to the Tools menu, press the Q Key.

Processes

The Processes menu item opens an exhaustive process table similar to that detailed in the Top section described above. 

Processes.png
Disk Space

The Disk Space menu item opens a table detailing the Filesystem size, how much space is available and used, the use percentage, and the location on which the file system is mounted.

Disk_Space.png
Large Files

The Large Files menu item displays a table for file sizes of at least 1 million blocks, which is slightly less than 0.5 GB. If all existing file sizes are under this threshold the screen will be blank.

Large_Files_1.png

Currently, the table only returns files stored in the logs file of the RapidIdentity Connect Main project.  

Large_Files_2.png
Java and Groovy Versions

The Java Version and Groovy Version menu items open an information window detailing the RapidIdentity installed versions of Java and Groovy. 

Java_Groovy_1.png
Java_Groovy_2.png
VMWare Open VM Tools

VMWare Open VM Tools is open source software that can enhance the performance of VMWare products running RapidIdentity. 

VMWare_Open_Tools_1.png
VMWare_Open_Tools_2.png

Once installed, this menu item should only display if RapidIdentity is running on VMWare.

Installing open-vm-tools

open-vm-tools is not included in the RapidIdentity ISO.

If open-vm-tools is desired, it is necessary to contact Identity Automation Support to install open-vm-tools.

Shutdown/Reboot

The Shutdown/Reboot interface allows users to either shutdown or reboot the operating system on which RapidIdentity is installed. 

Shutdown_Reboot_Screen.png
Shutdown

Selecting Shutdown will automatically terminate RapidIdentity resulting in logging out of the CLI interface. If RapidIdentity is installed on a cloud server (e.g. AWS EC2 instance), that instance will be stopped.

Reboot

Selecting Reboot will trigger the operating system to restart. If RapidIdentity is installed on a cloud server (e.g. AWS EC2 instance), that instance will be restarted. Once that process is complete RapidIdentity will need to be restarted.

About

The About interface details the RapidIdentity Release version with information on the build and commit along with a copyright notice.

About_Screen.png
Configure External Authentication Realms

Follow these steps to configure External Authentication Realms:

  1. From the Module Selector, click Configuration. From the Security section, click Identity Providers.

    Identity_providers2.png
  2. Click External Auth Realms from the left menu items.

    ext_realm2.png
  3. Click Create Realm.

    Table 90. Create External Authentication Realm

    Field

    Value

    Description

    Type

    Select LDAP from the drop-down menu

    Required Field: complete to suit organizational needs

    Name

    Enter a name for the realm

    Required Field: complete to suit organizational needs

    Description

    Enter a description for the realm

    Complete to suit organizational needs

    Enabled

    True

    Enables the new realm upon saving

    Default

    True

    Sets the realm as the default

    LDAP Server Set

    Select a server set for the realm

    Select the new LDAP server set that was createdLDAP Server Sets

    Internal User Filter

    Click Fix in LDAP Builder to enter the LDAP Filter

    The copy icon can be used to copy the filter to the clipboard

    Fix in LDAP Builder

    Click to open the LDAP Filter search

    Complete to suit organizational needs

    Remote Search Base DN

    Enter a distinguished name for search

    Complete to suit organizational needs

    Remote Username Attribute

    This value is largely dependent on organizational preference and LDAP structure

    This value is most often the value the end user will type during remote login. Common values include, but not limited to, cn, mail, sAMAccountName, userPrincipalName, and uid.

    Remote User Filter

    Complete to suit organizational needs

    Click Fix in LDAP Builder to enter the LDAP Filter



  4. To add external or internal attributes, under Attribute Map Items, click Add Item.

    add_item.png
  5. Enter the External and Internal Attributes. If two or more realms exist, check the default box to assign a default external authentication realm. Unless the Internal Realm Name is changed, it will display as "Internal."

    Note

    When at least one External Authentication Realm is enabled, users will see a drop-down on the login page that allows them to choose which realm to use for authentication.

    external_attribute.png
  6. When complete, click Save. The new realm now displays in the Current Realms box. At this point, configuring support for multiple LDAP servers is complete.

Trusted IdPs

In the Federation Authentication Method, RapidIdentity Federation acts as a SAML 2.0 Relying Party to a RapidIdentity Identity Provider or a third-party SAML Identity Provider.

When configuring the Federation Authentication Method for an Authentication Policy, you must choose a previously configured Trusted Identity Provider. Therefore, a Trusted Identity Provider contains all of the configuration necessary to facilitate SAML 2.0 SSO between RapidIdentity Federation and a third-party SAML 2.0 Identity Provider.

SAML 2.0 Trusted IdPs are configured similarly to RapidIdentity Trusted IdPs, but instead of having the fields host and port, they require the fields loginUrl and binding.

Note

If the Trusted IdP is in a domain different from RapidIdentity, you may need to add that domain as an Allowed Origin in the RapidIdentity CORS Security Configuration. The Allowed Origin value should take the form https://trusted_idp_domain.

To add a new IdP, click Add Trusted Identity Provider.

Trusted_IdPs.jpg

A pop-out window will open with form fields. On the General tab, enter the information as provided by the identity provider.

Create_Trusted_IDP.jpg

Field

Description

Name

Required field - give the IdP a meaningful name

Description

Optional description if desired

Entity ID

The SAML 2.0 Entity ID of the third-party Identity Provider

Type

The Identity Provider to be used when composing SAML responses. RapidIdentity makes it simple to point to an external RapidIdentity Identity Provider

*Host

The hostname of the remote RapidIdentity Identity Provider

*Port

The port the Identity Provider is to use with requests. This defaults to 443

Signing Certificate

Cut and paste the provider's certificate into this box

At the bottom of this menu is an option to add Configuration Attribute Mappings. This option allows administrators to map attributes from the local Identity Provider to the remote Identity Provider. To match the same user in both systems, both systems must have a uniquely identifying attribute for each user. For example, if email address is the unique identifier, configure the Local field with the attribute name for email (e.g., "mail"), and the Remote field with the same attribute as it is named in the other system (e.g., "emailAddress").

Note

Attribute Mapping supports a special remote attribute value: @NameID. This indicates that the NameID attribute returned from the Remote Identity Provider should be mapped to the specified Local attribute.

Trusted_IdPs_-_Configuration_Attribute_Mappings.png