Tracker I-9 SSO Integration Guide 05-2026
Introduction
About This Document
This document describes the Single Sign-On (SSO) protocols and workflows available to integrate with I-9 Complete as well as detailing the technical aspects of the integration.
About SSO
Single Sign-On (SSO) is an industry-standard authentication mechanism that enables users to access multiple systems and applications with a single set of credentials. Once authenticated, users can seamlessly interact with all authorized resources without needing to re-enter passwords for each system. The term "Single Sign-On" reflects the end-user perception of this streamlined access experience.
Claims-Based Identification is one method to achieve SSO. It provides a common way for applications to acquire the identity information they need from users inside their organization, in other organizations, and on the Internet. Along with making the lives of developers significantly simpler, a claims-based approach can also lower the cost of building and managing applications.
Benefits
Benefits of single sign-on and claims-based identity systems include:
- Reduction in the time taken by users in sign-on operations to individual domains, including reducing the possibility of such sign-on operations failing.
- Improved security by minimizing the need for users to manage and remember multiple sets of authentication credentials.
- Faster and more efficient user management for system administrators when adding, removing, or modifying user access rights.
- Improved security through the enhanced ability of system administrators to maintain the integrity of user account configuration, including the ability to inhibit or remove an individual user’s access to all system resources in a coordinated and consistent manner.
Claims-Based Identification
Claims-based identity is a straightforward concept, based on a small number of elements: claims, tokens, identity providers, and a few others.
What is an identity? A digital identity is a set of information about someone or something. This set of identity information is commonly referred to as a security token, or simply a token. A token contains one or more claims, each of which carries a piece of information about the user it identifies.
Who issues tokens and who uses them?
- Tokens are created by software known as a Security Token Service (STS).
- Applications that offer an STS are referred to as Identity Providers (IDPs).
- Applications that rely on an STS are referred to as a Relying Party (RP).
Open Standards
-
SSO is available for I-9 Complete using an industry-standard format:
Protocol SAML-P v2.0
Token SAML 2.0
- SSO uses signing certificates to package comprehensive employee data. This is a standard industry practice for all web-based applications.
- SSO communicates over the Web using the Hypertext Transfer Protocol (HTTP), secured with a minimum of 128-bit Secure Sockets Layer (SSL) encryption, the same mechanism used by all secure websites.
IDP Initiated SSO
In an IDP-initiated use case, the identity provider is configured with specialized links that refer to the desired relying parties. These links actually refer to the local IDP's Single Sign-On Service and pass parameters to the service identifying the remote relying party. So instead of visiting the RP directly, the user accesses the IDP site and clicks on one of the links to gain access to the remote RP. This triggers the creation of an SSO assertion that is sent to the RP.
Tracker does not support SP-initiated SSO.
IDP Use Case
- A Web browser or other client acting on behalf of a user gets a token for a particular application from a Security Token Service (STS) owned by some identity provider (IDP).
- Once it has this token, the browser or client sends it to the application.
- The application attempts to verify the token's authenticity.
- If this verification succeeds, the application knows which STS, and thus which IDP, issued the token.
- If the application trusts this IDP, it accepts the claims in the token as correct and uses them to decide what the user is allowed to do.
How to Implement SSO With I-9 Complete
Overview
SSO is used to grant application access only to users with User Accounts. These users may be designated as HR Managers, I-9 Managers, Section 2 Signatories, Recruiters, or Hiring Managers. New Hires accessing I-9 Complete to complete and sign Section 1 cannot use SSO to access the application.
Before you Start
There are a couple of things needed before you can start:
- Get your I-9 Complete Client ID from your Implementation Project Manager for both your Development and Production environments.
- Provide your signing certificates to Tracker application.
The following sections of this document detail the steps for implementing SSO between your system and I-9 Complete:
- Choose an Account Management Type.
- Gather the information needed for the appropriate claims.
- Sign the SSO assertion.
- Post the SSO assertion and payload to I-9 Complete via HTTPS.
Choose an Account Management Type
You have three account management types to choose between when implementing SSO.
Dynamic User Management
In this scenario, you send a complete list of claims needed to create the user.
- If the provided username does not exist in the system, a new user is created.
- If the user already exists, their account is updated based on the information in the assertion. If you can send a complete set of user claims, no additional integrations or manual intervention are needed to manage user accounts.
Authorization Only
In this scenario, you send only one piece of information (username, email, or external id) to identify a user.
- If the user exists in the system, they are authenticated and granted access.
- If the user does not exist, access is denied. This approach is recommended only if you create and manage users via Tracker’s API.
Hybrid
In this scenario, you send a complete list of claims needed to create a user.
- If the username does not exist, a new user is created.
- If the user already exists, they are granted access, but their account is not updated. This approach is recommended if you have enough information to create a user, but plan to update the account manually. With Hybrid SSO, once you manually update a user’s account, the SSO integration will not overwrite those changes during future logins.
Claims
We refer to the claims in this document by their Description. Be aware that in the actual SSO assertion you must use the Assertion Claim Name to refer to the claim.
Claim Descriptions
|
Description |
Assertion Claim Name |
Notes |
|---|---|---|
|
Account Management Type |
accountmanagementtype |
See Choose an Account Management Type section. Default is “0” = Auth Only |
|
First Name |
givenname |
First Name of the User (aka HR Manager, Section 2 Signatory, etc). |
|
Last Name |
surname |
Last Name of the User (aka HR Manager, Section 2 Signatory, etc). |
|
Job Title |
title |
The User’s job title to be displayed on the Form I-9 when signing Section 2. |
|
I-9 Complete User Role |
role |
See Appx B. The role assigned to the User in our application which governs what functionality they can access. |
|
Time Zone ID |
timezoneid |
See Appx A. The timezone of the User which is used in the application to know when to send scheduled email alerts. |
|
Username |
name |
This is the username for User Account. It must be unique across all clients within our system. Our suggestion is that you concatenate your Client ID with your system’s unique usernames so that you do not encounter conflicts with existing clients’ users. |
|
Email Address |
emailaddress |
The User’s email address. It is used to send email alerts. |
|
Phone Number |
phone |
The User’s phone number. Must be 10 digits. |
|
Extension |
ext |
The User’s phone number extension. Must be between 1-8 digits. |
|
External ID |
externalid |
An ID that originates in the client’s system used to uniquely identify a User. |
|
All Client Access |
allclientaccess |
True/False flag that grants a user access to all I-9s within an employer |
|
Employer ID* |
employerid |
I-9 Complete’s internal ID for an Employer. It grants the user access to all I-9s within the scope of one or more Employers. |
|
External Employer ID* |
externalemployerid |
A partner’s ID or client’s ID for an Employer. It grants the user access to all I-9s within the scope of one or more Employers. |
|
Security Group ID* |
securitygroupid |
I-9 Complete’s internal ID for a Security Group (which is a group of other security groups and or worksites - see attached Hierarchy Guide for details). It grants the user access to all I-9s within the scope of one or more Security Groups. |
|
External Security Group ID* |
externalsecuritygroupid |
A partner’s ID or client’s ID for a Security Group (which is a group of other security groups and or worksites - see attached Hierarchy Guide for details). It grants the user access to all I-9s within the scope of one or more Security Groups. |
|
Worksite ID* |
worksiteid |
I-9 Complete’s internal ID for a Worksite. It grants the user access to all I-9s within the scope of a Worksite. |
|
External Worksite ID* |
externalworkstieid |
A partner’s or client’s ID for a Worksite. It grants the user access to all I-9s within the scope of a Worksite. |
* Multiple claims can be sent to assign more than one value for this claim to the user. See the Claim Example – Sending Multiple Values section of the document for details.
Claims by Account Management Type
I-9 Manager Claims
The full claim set for the I-9 Manager role is detailed below. I-9 Managers leverage the most claims in order to manage the role’s permission and security access privileges.
|
Description |
Dynamic User Management |
Hybrid |
Authorization Only |
|---|---|---|---|
|
Account Management Type |
required (“1”) |
required (“2”) |
do not send |
|
First Name |
required |
required |
do not send |
|
Last Name |
required |
required |
do not send |
|
Job Title |
required |
required |
do not send |
|
I-9 Complete User Role |
required |
required |
do not send |
|
Time Zone ID |
Required |
required |
do not send |
|
Phone Number |
Optional |
optional |
do not send |
|
Extension |
Optional |
optional |
do not send |
|
Username |
required* |
required* |
One (and only one) of these three claims is required to identify the User. |
|
Email Address |
Required |
Required |
|
|
External ID |
Optional |
Optional |
|
|
All Worksite Access |
One or more (as appropriate) of these hierarchy access claims is required.** |
One or more (as appropriate) of these hierarchy access claims is required.** |
do not send |
|
External Employer ID |
do not send |
||
|
Security Group ID |
do not send |
||
|
External Security Group ID |
do not send |
||
|
Worksite ID |
do not send |
||
|
External Worksite ID |
do not send |
||
|
Employer ID |
do not send |
* Used as the identifier to determine if the user exists already or not.
** Please note: For the user you create to have access to any Employee or Form I-9 records, you must specify access permissions for the user:
-
If you send “All Client Access” then you would not send (and we would ignore) any Employer, Security Group, or Worksite values, since they overlap.
-
If you send one or more Employer values, we would ignore any Security Group or Worksite values within that Employer, since they overlap.
-
You may send a combination of Security Group and Worksite values, though we will ignore any worksite values that exist within the sent Security Groups, since they overlap.
Client Administrator Claims
The full claim set for the Client Administrator role is described below. Client Administrators leverage fewer claims.
|
Description |
Dynamic User Management |
Hybrid |
Authorization Only |
|---|---|---|---|
|
Account Management Type |
required (“1”) |
required (“2”) |
do not send |
|
First Name |
required |
required |
do not send |
|
Last Name |
required |
required |
do not send |
|
Job Title |
required |
required |
do not send |
|
I-9 Complete User Role |
required |
required |
do not send |
|
Username |
required* |
required* |
One (and only one) of these three claims is required to identify the User. |
|
Email Address |
required |
required |
|
|
External ID |
optional |
optional |
* Used as the identifier to determine if the user exists already or not.
Claim Details
Account Management Type
http://schemas.trackercorp.com/ws/20...managementtype
http://www.w3.org/2001/XMLSchema#integer
First Name
http://schemas.xmlsoap.org/ws/2005/0...aims/givenname
http://www.w3.org/2001/XMLSchema#string
Last Name
http://schemas.xmlsoap.org/ws/2005/0...claims/surname
http://www.w3.org/2001/XMLSchema#string
Title
http://schemas.trackercorp.com/ws/20...y/claims/title
http://www.w3.org/2001/XMLSchema#string
Role
http://schemas.microsoft.com/ws/2008...ty/claims/role
http://www.w3.org/2001/XMLSchema#string
Time Zone
http://schemas.trackercorp.com/ws/20...ims/timezoneid
http://www.w3.org/2001/XMLSchema#integer
Phone Number
http://schemas.trackercorp.com/ws/20...ms/phonenumber
http://www.w3.org/2001/XMLSchema#string
Extension
http://schemas.trackercorp.com/ws/20...phoneextension
http://www.w3.org/2001/XMLSchema#string
Username
http://schemas.xmlsoap.org/ws/2005/0...ty/claims/name
http://www.w3.org/2001/XMLSchema#string
Email Address
http://schemas.xmlsoap.org/ws/2005/0...s/emailaddress
http://www.w3.org/2001/XMLSchema#string
External ID
http://schemas.trackercorp.com/ws/20...ims/externalid
http://www.w3.org/2001/XMLSchema#string
All Client Access
http://schemas.trackercorp.com/ws/20...llclientaccess
http://www.w3.org/2001/XMLSchema#boolean
Employer ID
http://schemas.trackercorp.com/ws/20...ims/employerid
http://www.w3.org/2001/XMLSchema#integer
External Employer ID
http://schemas.trackercorp.com/ws/20...rnalemployerid
http://www.w3.org/2001/XMLSchema#string
Security Group ID
http://schemas.trackercorp.com/ws/20...ecuritygroupid
http://www.w3.org/2001/XMLSchema#integer
External Security Group ID
http://schemas.trackercorp.com/ws/20...ecuritygroupid
http://www.w3.org/2001/XMLSchema#string
Worksite ID
http://schemas.trackercorp.com/ws/20...ims/worksiteid
http://www.w3.org/2001/XMLSchema#integer
External Worksite ID
Claim Example – Sending Multiple Values
This is an example of how you would send multiple Worksite IDs
<saml:Attribute Name="http://schemas.trackercorp.com/ws/2010/08/identity/claims/externalworksiteid" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified">
<saml:AttributeValue>1</saml:AttributeValue>
</saml:Attribute>
<saml:Attribute Name="http://schemas.trackercorp.com/ws/2010/08/identity/claims/externalworksiteid" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified">
<saml:AttributeValue>2</saml:AttributeValue>
</saml:Attribute>
<saml:Attribute Name="http://schemas.trackercorp.com/ws/2010/08/identity/claims/externalworksiteid" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified">
<saml:AttributeValue>3</saml:AttributeValue>
</saml:Attribute>
Handling Special Characters in SAML Claims
Special characters used within SAML claim values must be properly encoded to ensure that the SAML assertion remains valid XML and can be processed successfully by I-9 Complete.
Certain characters have reserved meanings in XML and may cause authentication or parsing failures if they are included directly in SAML attribute values such as User Name, Email Address, First Name, Last Name, or other claims.
The following XML entity references should be used when special characters are present in SAML claim values:
|
Character |
Description |
Entity Reference |
|---|---|---|
|
& |
ampersand |
& |
|
< |
less-than |
< |
|
> |
greater-than |
> |
|
" |
double quote |
" |
|
' |
single quote |
' |
Examples
Ampersand (&) - Username: Johnson & Johnson
<saml:Attribute Name="http://schemas.xmlsoap.org/ws/2005/0...ty/claims/name">
<saml:AttributeValue>Johnson & Johnson</saml:AttributeValue>
</saml:Attribute>
Apostrophe (') - Username: O'Brien
<saml:AttributeValue>O'Brien</saml:AttributeValue>
Less-than and Greater-than (<, >) - Display name: Admin <Team>
<saml:AttributeValue>Admin <Team></saml:AttributeValue>
Double quote (") - Email: john"doe@company.com
<saml:AttributeValue>john"doe@company.com</saml:AttributeValue>
Combined - Username: O'Brien & Sons "Ltd" <Team>
<saml:AttributeValue>O'Brien & Sons "Ltd" <Team></saml:AttributeValue>
Certificates Needed by the IDP for Browser-Based Applications
Certificate for TLS/SSL (Issuer, Browser Scenario)
The Transport Layer Security (TLS) protocol, Secure Sockets Layer (SSL) protocol uses a certificate to protect communication with the issuer—for example, for the credentials transmitted to it. The purpose is to avoid man-in-the-middle attacks, eavesdropping, and replay attacks.
Requirements: The subject name in the certificate must match the Domain Name System (DNS) name of the host that provides the certificate. Browsers will generally check that the certificate has a chain of trust to one of the root authorities trusted by the browser.
Recommended certificate store: LocalMachine\My
Example: CN=login.your-company.com
Certificate for Token Signing (Issuer, Browser Scenario)
The issuer’s certificate for token signing is used to generate an XML digital signature to ensure token integrity and source verification.
Requirements: The worker process account that runs the issuer needs access to the private key of the certificate. It must be 2048 bits in key length and use a SHA-256 signature algorithm.
Recommended certificate store: LocalMachine\My and if ADFS 2.0 is the issuer, the ADFS 2.0 database will keep a copy.
Example: CN= your-company -tokensign.com
Note: The subject name on the certificate does not need to match a DNS name. It’s a recommended practice to name the certificate in a way that describes its purpose.
Signing the XML
I-9 Complete only supports signed assertions. We do not support encrypted assertions.
For SAML-P protocol, there are two types of digital signatures available for you to generate: the response signature and the assertion signature. We require that the assertion be signed.
When signing the assertion, use the SHA-256 hash algorithm.
Form Details
The STSURL is the action of the form POST.
-
development environment: https://integrationdevsts.i9complete.com/{clientId}
-
production environment: https://sts.i9complete.com/{clientId}
The RelayState is the page on which you’d like the user to land after they are authorized and enter our application. This can be used to have a User go directly to a specific I-9 Form record.
Code snippet – STSURL and RelayState
string stsUrl = "https://sts.i9complete.com/{clientId}";
string i9Url = "https://i9complete.com/path/to/i9";
XmlElement assertion = assertionService.GetSaml2();
var encoding = Encoding.GetEncoding("iso-8859-1");
var samlResponse = Convert.ToBase64String(encoding.GetBytes(assertion.OuterXml));
var html = new StringBuilder();
html.Append("<html>");
html.Append("<body onload=\"document.forms.samlpost.submit()\">");
html.AppendFormat("<form id=\"samlpost\" method=\"post\" action=\"{0}\">", stsUrl);
html.AppendFormat("<input type=\"hidden\" name=\"SAMLResponse\" value=\"{0}\">", HttpUtility.HtmlEncode(samlResponse));
html.AppendFormat("<input type=\"hidden\" name=\"RelayState\" value=\"{0}\">", i9Url);
html.Append("</form>");
html.Append("</body>");
html.Append("</html>");
var response = Response.AsText(html.ToString());
response.ContentType = "text/html";
return response;
Testing Notes
If you are conducting rapid testing using multiple different user accounts from a single browser or computer, you may experience a Cryptographic Exception stating, “Key not valid for use in specified state.” If this occurs, clear your cookies, close your browser, and then resume your testing.
On integrationdev.i9complete.com, custom errors are turned off, which means you will see descriptive error messages, if errors occur. There are data validation checks and required claim checks in place. Errors will be returned if the claims provided do not pass validation.
Appendices
Appendix A: User’s Time Zones (TimeZoneId)
notes
|
1 |
(GMT-04:00) Atlantic Time |
Puerto Rico and the U.S. Virgin Islands |
|
2 |
(GMT-05:00) Eastern Time |
|
|
4 |
(GMT-06:00) Central Time |
|
|
5 |
(GMT-07:00) Mountain Time |
|
|
6 |
(GMT-07:00) Arizona |
Does not observe Daylight Savings Time |
|
7 |
(GMT-08:00) Pacific Time |
|
|
8 |
(GMT-09:00) Alaska |
|
|
9 |
(GMT-10:00) Hawaii |
|
Appendix B: User’s Role (Role)
notes
|
CLIENT_ADMIN |
cannot access I-9s |
|
ADVANCED_USER |
can access I-9s |
|
ADVANCED_USER_EVERIFY |
can access I-9s |
|
INTERMEDIATE_USER |
can access I-9s |
|
INTERMEDIATE_USER_EVERIFY |
can access I-9s |
|
BASIC_USER |
can access I-9s |
|
BASIC_USER_EVERIFY |
can access I-9s |

