User provisioning

User provisioning is the process of ensuring user accounts are created, given proper permissions, and maintained across IT infrastructure and Atlassian applications.

Authentication via SSO (whether it’s SAML, OIDC, or Kerberos) does not remove the need for user accounts to exist in the Atlassian application. Roles or direct user assignment to global permissions, projects or spaces is still how you control any given user’s level of access to the Atlassian application, irrespective of how they actually authenticate.

All Atlassian products ship with a number of robust provisioning options built-in:

  • Internal Directory: User accounts are managed inside the product and stored in the product database.

  • LDAP: Sync users and groups from on-prem or remote LDAP servers, ActiveDirectory being the most common.

  • Crowd: Manage users via on-premise Atlassian Crowd.

All of the above can work with SSO (though Crowd is usually redundant as it becomes a central user directory), but they’re also mainly on-premise. Kantega SSO Enterprise provides extended user provisioning capabilities, enabling user provisioning from cloud-based identity providers like Azure AD, Google GSuite, Okta, and OneLogin:

  • Just-in-time provisioning: Create and update user accounts when users log in.

  • API Connectors: Sync users via IDP-specific REST APIs.

  • SCIM: Standard provisioning protocol supported by most major providers.

The table gives an overview of the pros and cons for each.

 

PROS

CONS

 

PROS

CONS

Manual administration

No setup.

Does not scale well in terms of administrator work load.

Can be error-prone.

Duplicate admin work (user accounts must be manually maintained both at the identity provider and within the Atlassian application)

Active directory or LDAP sync

Built into Atlassian product.

Easy integration with any LDAP capable directory.

Usually best option in on-prem environments.

Limited or no support for cloud environments. While some vendors do provide LDAP adapters, they can be cumbersome to use.

Just-in-time

Works with any IDP.

Technically simple: Users are created and updated from data passed through the browser, meaning no additional network dependencies.

Scales to “infinite” directory sizes.

 

Does not remove inactive users.

Group provisioning/claims can be difficult to configure on some IDPs.

Users are able to set their own local passwords in the Atlassian application.

API Connector

Ability to create, update and delete users automatically

Can be combined with local groups

Express filters and transformations within the Atlassian applications.

Synchronization/snapshot based, so does not scale to very large directory sizes/companies (at a certain point, sync passes simply become too slow).

Has to be specifically implemented for each IDP. Currently only supported for Azure AD, Google GSuite, Keycloak and Okta.

API Connectors supports nested groups for Google Workspace and Azure AD.

SCIM

In principle; works with any SCIMv2 compliant IDP.

Scales to any directory size.

SCIM also supports nested groups.

Requires inbound access to the Atlassian application. This has security implications/considerations. It also means more parts of the organization may need to be involved (networking/firewall etc).

Works best in the presence of failover, i.e. Atlassian Datacenter.

Some IDPs don’t provide SCIM at the basic subscription tiers. For example, a Platinum subscription is required for Azure AD.

 

A note regarding admin users and websudo (Secure Administrator sessions in Jira and Confluence)

Generally speaking, websudo by using passwords is not possible with users provisioned by JIT, API Connectors, or SCIM. This is because Kantega SSO cannot synchronize or obtain the passwords from the identity provider for such users. Authentication for such users is only possible via SSO, by redirecting to the identity provider. Users then authenticate in the IDP and are redirected back with a proof of identity, i.e. a SAML Response or an ID Token. In version 5.1.0 of Kantega SSO re-login via a SAML or OIDC based Identity Provider has been added to perform websudo (see below image).

 

Please be aware that re-authentication requires your IdentityProvider to support the forceAuthn=true flag (for SAML), and prompt=login or max_age=0 flags for OIDC. Please verify that re-authentication works by clicking the Re-authenticate with SSO button and see that you are required to log in again (and not just bounce directly back to the admin pages). If you have a problem with re-login for your IdP, please contact us and we will see if there are any ways of enabling the support for this.

Notes:

For JIT user accounts specifically, an admin can simply set a password manually, or the user can use the “forgot password” link. Note however that this password is not synced with the identity provider password in any way. It also allows these users to bypass SSO and just authenticate directly with their password, unless you disable traditional login in KSSO.

In any case, we always recommend keeping at least one superadmin user in the Internal Directory using a strong password, so that you can easily get back in case your SSO integration fails (certificate expiry, URL, and tenant changes, and so on).

A note about cloud user provisioning and passwords

When you set up user provisioning from cloud user databases as described above (either via SCIM or API Connectors) users will not have their passwords synced. This means that these users are not able to use their passwords locally in Jira, Confluence, Bitbucket and Bamboo, which is no problem when you set up login using SAML, OIDC or Kerberos, but it will naturally not work to use username/password login locally in the Atlassian products.

Git operations for users created via cloud user provisioned

As described in the above section users created via cloud user provisioning will not have a local password. Therefore, such users that want to do git operations against Bitbucket will not be able to authenticate with username and password. The way to authenticate from git is therefore by using SSH keys as is built in support for in Bitbucket. A guide from Atlassian on how each user can create his SSH key is found here:

SSH user keys for personal use | Bitbucket Data Center 9.3 | Atlassian Documentation

Also using the API tokens feature in Kantega SSO for git authentication is supported. Then you must enable the /scm endpoint in the API token access section (see below):

And each user that wants to use API tokens must create his own token and use git URLs like this:
git clone https://<username>:<128-chars-API-token>@bitbucket-test.example.com/scm/test/test.git