Add the power of the Box AI API to your custom apps at Content Cloud Summit on May 15

Learn more and register!

Find app user for SSO identity

Guides SSO & App users Find app user for SSO identity
Edit this page

Find app user for SSO identity

When a user logs into a Box custom application with their SSO provider, the first step that should be taken is to see if that user already exists from a previous login attempt where a Box user record was already created.

If a Box user is found you should create a user access token, or make as user calls, to access Box APIs as that user.

If a Box user is not found you should create a new user with an association to the SSO user record.

To search for existing users the List Enterprise Users endpoint may be used. Depending on whether you're using the external_app_user_id or login method your query will look slightly different.

Find user by external_app_user_id

To search for enterprise users by the stored external_app_user_id value you will need one piece of information from the SSO provider:

  • UID (required): The unique identifier from the SSO user record.

Once available, make a request to the list enterprise users endpoint, supplying the external_app_user_id definition in the parameters.

You can retrieve app users for a specific application only if such app users were created by this application. If you use one application to search for users created by a different one, no data will be returned.

Node
const ssoUID = 'SSO User Unique ID';

// Check enterprise users for matching external_app_user_id against SSO UID
client.enterprise.getUsers({ "external_app_user_id": ssoUID })
.then((users) => {
  if (users.total_count > 0) {
    // User found, fetch user ID
    const userId = users.entries[0].id;
  } else {
    // User not found - create new user record
  }
});
Java
String ssoUID = "SSO User Unique ID";

// Check enterprise users for matching external_app_user_id against SSO UID
URL url = new URL("https://api.box.com/2.0/users?external_app_user_id=" + ssoUID);
BoxAPIRequest request = new BoxAPIRequest(client, url, "GET");
BoxJSONResponse jsonResponse = (BoxJSONResponse) request.send();
JsonObject jsonObj = jsonResponse.getJsonObject();
JsonValue totalCount = jsonObj.get("total_count");

if (totalCount.asInt() > 0) {
  // User found, fetch 
  // Fetch user ID
  JsonArray entries = (JsonArray) jsonObj.get("entries");
  JsonObject userRecord = (JsonObject) entries.get(0);
  JsonValue userId = userRecord.get("id");
} else {
  // User not found - create new user record
}
Python
sso_uid = 'SSO User Unique ID'

# Validate is user exists
url = f'https://api.box.com/2.0/users?external_app_user_id={sso_uid}'
headers = {'Authorization': 'Bearer ' + access_token}
response = requests.get(url, headers=headers)
user_info = response.json()

if (user_info['total_count'] == 0):
  # User not found - create new user record
else:
  # User found, fetch user ID
  user = user_info['entries'][0]
  user_id = user['id']

Find user by email address

To search for enterprise users by their login email you will need one piece of information from the SSO provider:

  • Email (required): The unique email from the SSO user record.

Once available, make a request to the list enterprise users endpoint, supplying the email address as the filter_term, which is made available to search by email or name.

Node
const ssoEmail = 'ssouser@email.com';

client.enterprise.getUsers({filter_term: ssoEmail})
.then(users => {
  if (users.total_count > 0) {
    // User found, fetch user ID
    const userId = users.entries[0].id;
  } else {
    // User not found - create new user record
  }
});
Java
String ssoEmail = "ssouser@email.com";

Iterable<BoxUser.Info> users = BoxUser.getAllEnterpriseUsers(client, ssoEmail);
Python
sso_email = 'ssouser@email.com'

users = client.users(user_type='all', filter_term=ssoEmail)
if (users['total_count'] == 0):
  # User not found - create new user record
else:
  # User found, fetch user ID
  user = users['entries'][0]
  user_id = user['id']