751 lines
33 KiB
Markdown
751 lines
33 KiB
Markdown
|
|
---
|
|||
|
|
title: 'SSO configuration'
|
|||
|
|
linkTitle: 'SSO configuration'
|
|||
|
|
weight: 3
|
|||
|
|
description: 'SSO for a Self-Hosted solution'
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
{{% alert title="Note" color="primary" %}}
|
|||
|
|
This is a paid feature available only to [Enterprise clients](https://www.cvat.ai/pricing/on-prem).
|
|||
|
|
{{% /alert %}}
|
|||
|
|
|
|||
|
|
CVAT supports Single Sign-On (SSO) using both OpenID Connect (OIDC) and Security Assertion Markup Language (SAML)
|
|||
|
|
protocols.
|
|||
|
|
|
|||
|
|
To configure SSO, complete the following 2 main steps:
|
|||
|
|
1. Configure the Identity Provider (IdP) — set up an application on your IdP platform.
|
|||
|
|
1. Update the CVAT configuration — provide the necessary identity provider settings in the CVAT configuration file.
|
|||
|
|
|
|||
|
|
If the application is already configured, refer to the [Configuring SSO in CVAT](#configuring-sso-in-cvat) section.
|
|||
|
|
Otherwise, you may follow one of the detailed platform-specific guides to set up such an application:
|
|||
|
|
- [Microsoft Azure](#microsoft-azure)
|
|||
|
|
- [Okta](#okta)
|
|||
|
|
- [Auth0](#auth0)
|
|||
|
|
- [keycloak](#keycloak)
|
|||
|
|
|
|||
|
|
## Platform specific IdP configuration
|
|||
|
|
### Microsoft Azure
|
|||
|
|
|
|||
|
|
#### OpenID Connect
|
|||
|
|
Follow these steps to configure an application on the `Microsoft Azure` platform and integrate it with CVAT:
|
|||
|
|
|
|||
|
|
##### **Step 1: Register an OIDC-based application**
|
|||
|
|
|
|||
|
|
To start, log into your [Microsoft Azure Portal](https://portal.azure.com/#home). Once you're in:
|
|||
|
|
1. Navigate to the `Microsoft Entra ID` service -> `App registrations` section in the menu on the left.
|
|||
|
|
1. Click on the `+ New registration` button.
|
|||
|
|
1. Enter application name.
|
|||
|
|
1. Select `Supported account types` based on your needs.
|
|||
|
|
1. Add `Redirect URI`: choose `Web` platform and set `<scheme:cvat_domain>/api/auth/oidc/<idp-id:azure-oidc>/login/callback/`
|
|||
|
|
to the value field.
|
|||
|
|
|
|||
|
|

|
|||
|
|
|
|||
|
|
1. Click on the `Register` button.
|
|||
|
|
|
|||
|
|
{{% alert title="Note" color="primary" %}}
|
|||
|
|
More information on how to configure an OIDC-based application on the Azure platform can be found
|
|||
|
|
[here](https://learn.microsoft.com/en-us/power-pages/security/authentication/openid-settings#create-an-app-registration-in-azure).
|
|||
|
|
{{% /alert %}}
|
|||
|
|
|
|||
|
|
You’ve created an app, now you should configure the credentials for it.
|
|||
|
|
|
|||
|
|
##### **Step 2: Configure credentials**
|
|||
|
|
|
|||
|
|
1. Navigate to the `Overview` tab of your newly created application.
|
|||
|
|

|
|||
|
|
1. In the `Client credentials` section, click the `Add a certificate or secret` link.
|
|||
|
|
This will take you to the `Certificates & secrets` page.
|
|||
|
|
1. Click `+ New client secret`.
|
|||
|
|
1. In the popup form, enter a description and select an expiration period, then click `Add`.
|
|||
|
|

|
|||
|
|
|
|||
|
|
The newly created secret will appear in the list.
|
|||
|
|
Make sure to copy the value now — you won’t be able to see it again later.
|
|||
|
|

|
|||
|
|
|
|||
|
|
##### **Step 3: Configure CVAT**
|
|||
|
|
|
|||
|
|
Utilize the example below as a template for your configuration:
|
|||
|
|
|
|||
|
|
```yaml
|
|||
|
|
sso:
|
|||
|
|
enabled: true
|
|||
|
|
selection_mode: email_address
|
|||
|
|
identity_providers:
|
|||
|
|
- id: <idp-id:azure-oidc>
|
|||
|
|
protocol: OIDC
|
|||
|
|
name: Azure OIDC-based IdP
|
|||
|
|
server_url: https://<Directory (tenant) ID>/v2.0/
|
|||
|
|
client_id: <Secret ID>
|
|||
|
|
client_secret: <Secret Value>
|
|||
|
|
email_domain: <company_email_domain>
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
{{< alert title="Tip" >}}
|
|||
|
|
Actual `Secret ID` and `Secret Value` values may be found on `Certificates & secrets` tab of the application,
|
|||
|
|
while `Directory (tenant) ID` - on the `Overview` tab.
|
|||
|
|
{{< /alert >}}
|
|||
|
|
|
|||
|
|
You can now proceed to [start CVAT](#start-cvat).
|
|||
|
|
For additional CVAT configuration details, refer to [Configuring SSO in CVAT](#configuring-sso-in-cvat).
|
|||
|
|
|
|||
|
|
#### SAML
|
|||
|
|
|
|||
|
|
Follow these steps to configure an application on the `Microsoft Azure` platform and integrate it with CVAT:
|
|||
|
|
|
|||
|
|
##### **Step 1: Register an SAML-based application**
|
|||
|
|
|
|||
|
|
To start, log into your [Microsoft Azure Portal](https://portal.azure.com/#home). Once you're in:
|
|||
|
|
1. Navigate to the `Microsoft Entra ID` service -> `Enterprise applications` section in the menu on the left.
|
|||
|
|
1. Click `+ New application` and enter a name for the application in the popup window, then click `Create`.
|
|||
|
|

|
|||
|
|
|
|||
|
|
You’ve created an app, now you should finalize its configuration and assign users or groups.
|
|||
|
|
|
|||
|
|
##### **Step 2: Configure a created application**
|
|||
|
|
|
|||
|
|
1. Navigate to the `Single sign-on` section in the menu on the left.
|
|||
|
|
1. Choose the SAML protocol as the single sign-on method.
|
|||
|
|

|
|||
|
|
1. Edit `Basic SAML Configuration`:
|
|||
|
|
- `Identifier (Entity ID)`: `<scheme:cvat_domain>/api/auth/saml/<idp-id:azure-saml>/metadata/`
|
|||
|
|
- `Reply URL (Assertion Consumer Service URL)`: `<scheme:cvat_domain>/api/auth/saml/<idp-id:azure-saml>/acs/`
|
|||
|
|

|
|||
|
|
- Save changes
|
|||
|
|
1. Edit `Attributes & Claims` by adding a new `uid` claim:
|
|||
|
|
- Name: `uid`
|
|||
|
|
- Namespace: `http://schemas.xmlsoap.org/ws/2005/05/identity/claims`
|
|||
|
|
- Source: `attribute`
|
|||
|
|
- Source attribute: `user.objectid`
|
|||
|
|

|
|||
|
|
|
|||
|
|
{{% alert title="Note" color="primary" %}}
|
|||
|
|
More information on how to configure an application on Azure platform can be
|
|||
|
|
found [here](https://learn.microsoft.com/en-us/entra/identity/enterprise-apps/add-application-portal-setup-sso).
|
|||
|
|
{{% /alert %}}
|
|||
|
|
|
|||
|
|
##### **Step 3: Assign users and groups**
|
|||
|
|
|
|||
|
|
At this point, no users or groups have been assigned to the application.
|
|||
|
|
To grant access:
|
|||
|
|
1. Navigate to the `Users and groups` section of the application.
|
|||
|
|
1. Click the `+ Add user/group` button.
|
|||
|
|
1. Select the users or groups you want to assign.
|
|||
|
|
1. Confirm selection.
|
|||
|
|
|
|||
|
|
The selected users or groups will now appear in the assignment list.
|
|||
|
|
|
|||
|
|
That's it, now we can move on to the configuration in CVAT.
|
|||
|
|
|
|||
|
|
##### **Step 4: Configure CVAT**
|
|||
|
|
|
|||
|
|
Utilize the example below as a template for your configuration:
|
|||
|
|
|
|||
|
|
```yaml
|
|||
|
|
sso:
|
|||
|
|
enabled: true
|
|||
|
|
selection_mode: email_address
|
|||
|
|
identity_providers:
|
|||
|
|
- id: <idp-id:azure-saml>
|
|||
|
|
protocol: SAML
|
|||
|
|
name: Azure SAML-based IdP
|
|||
|
|
entity_id: <Microsoft Entra Identifier> (https://sts.windows.net/<tenantId>/)
|
|||
|
|
metadata_url: <App Federation Metadata Url>
|
|||
|
|
|
|||
|
|
attribute_mapping:
|
|||
|
|
uid: http://schemas.xmlsoap.org/ws/2005/05/identity/claims/uid
|
|||
|
|
username: http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier
|
|||
|
|
email: http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress
|
|||
|
|
first_name: http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname
|
|||
|
|
last_name: http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname
|
|||
|
|
# email_verified: it is not possible to configure SAML-based application to send this claim to the SP
|
|||
|
|
|
|||
|
|
email_domain: <company_email_domain>
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
{{< alert title="Tip" >}}
|
|||
|
|
Actual `Microsoft Entra Identifier` and `App Federation Metadata Url` values may be found
|
|||
|
|
on the `Single sign-on` tab of the created application
|
|||
|
|
|
|||
|
|

|
|||
|
|
{{< /alert >}}
|
|||
|
|
|
|||
|
|
You can now proceed to [start CVAT](#start-cvat).
|
|||
|
|
For additional CVAT configuration details, refer to [Configuring SSO in CVAT](#configuring-sso-in-cvat).
|
|||
|
|
|
|||
|
|
### Okta
|
|||
|
|
#### OpenID Connect
|
|||
|
|
Follow these steps to configure an application on the `Okta` platform and integrate it with CVAT:
|
|||
|
|
|
|||
|
|
##### **Step 1: Register an OIDC-based application**
|
|||
|
|
|
|||
|
|
To start, log into your [Okta admin dashboard](https://login.okta.com/). Once you're in:
|
|||
|
|
1. Navigate to the `Applications` section in the menu on the left.
|
|||
|
|
1. Click on the `Create App integration` button.
|
|||
|
|
1. Select `OIDC - OpenID Connect` as a sign-in method and `Web Application` type.
|
|||
|
|

|
|||
|
|
1. Fill the form with the following content:
|
|||
|
|
- `App integration name`: enter a name for the application
|
|||
|
|
- `Sign-in redirect URIs`: `<scheme:cvat_domain>/api/auth/oidc/<idp-id:okta-oidc>/login/callback/`
|
|||
|
|
- Select option in the `Controlled access` to match your requirements. In this example, we'll use `Skip group assignment for now`.
|
|||
|
|
|
|||
|
|

|
|||
|
|
|
|||
|
|
{{% alert title="Note" color="primary" %}}
|
|||
|
|
More information on how to configure an OIDC-based application on the Okta platform can be
|
|||
|
|
found [here](https://help.okta.com/en-us/content/topics/apps/apps_app_integration_wizard_oidc.htm).
|
|||
|
|
{{% /alert %}}
|
|||
|
|
|
|||
|
|
You’ve created and configured the app, now you should assign users or groups to the application.
|
|||
|
|
|
|||
|
|
##### **Step 2: Assign users or groups**
|
|||
|
|
|
|||
|
|
At this point, no users or groups have been assigned to the application.
|
|||
|
|
To grant access:
|
|||
|
|
1. Navigate to the `Assignments` tab of the application.
|
|||
|
|
1. Click the `Assign` button and select `Assign to People` or `Assign to Groups` based on your needs.
|
|||
|
|
1. Identify the users or groups you want to assign, then click `assign`.
|
|||
|
|
|
|||
|
|
The selected users or groups will now appear in the assignment list.
|
|||
|
|

|
|||
|
|
|
|||
|
|
##### **Step 3: Configure CVAT**
|
|||
|
|
|
|||
|
|
Utilize the example below as a template for your configuration:
|
|||
|
|
|
|||
|
|
```yaml
|
|||
|
|
sso:
|
|||
|
|
enabled: true
|
|||
|
|
selection_mode: email_address
|
|||
|
|
identity_providers:
|
|||
|
|
- id: <idp-id:okta-oidc>
|
|||
|
|
protocol: OIDC
|
|||
|
|
name: Okta OIDC-based IdP
|
|||
|
|
server_url: https://<okta_domain>/
|
|||
|
|
client_id: <client_id>
|
|||
|
|
client_secret: <client_secret>
|
|||
|
|
email_domain: <company_email_domain>
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
{{< alert title="Tip" >}}
|
|||
|
|
Actual `Client ID` and `Client secret` key values may be found on the `General` tab of the created application
|
|||
|
|

|
|||
|
|
{{< /alert >}}
|
|||
|
|
|
|||
|
|
You can now proceed to [start CVAT](#start-cvat).
|
|||
|
|
For additional CVAT configuration details, refer to [Configuring SSO in CVAT](#configuring-sso-in-cvat).
|
|||
|
|
|
|||
|
|
#### SAML
|
|||
|
|
Follow these steps to configure an application on the `Okta` platform and integrate it with CVAT:
|
|||
|
|
|
|||
|
|
##### **Step 1: Register an SAML-based application**
|
|||
|
|
|
|||
|
|
To start, log into your [Okta admin dashboard](https://login.okta.com/). Once you're in:
|
|||
|
|
1. Navigate to the `Applications` section in the menu on the left.
|
|||
|
|
1. Click on the `Create App integration` button.
|
|||
|
|
1. Select `SAML 2.0` as a sign-in method, then click `Next`.
|
|||
|
|

|
|||
|
|
1. Fill the form with the general settings and go to the next configuration step.
|
|||
|
|
1. On the `Configure SAML` form set the following fields:
|
|||
|
|
- `Single sign-on URL`:` <scheme:cvat_domain>/api/auth/saml/<idp-id:okta-saml>/acs/`
|
|||
|
|
- `Audience URI (SP Entity ID`: `<scheme:cvat_domain>/api/auth/saml/<idp-id:okta-saml>/metadata/`
|
|||
|
|

|
|||
|
|
1. Define attribute statements that will be shared with CVAT.
|
|||
|
|
In our example we will use the `Basic` attribute name format and set the mapping as shown below:
|
|||
|
|
- `firstName`: `user.firstName`
|
|||
|
|
- `lastName`: `user.lastName`
|
|||
|
|
- `username`: `user.login`
|
|||
|
|
- `email`: `user.email`
|
|||
|
|
- `uid`: `user.getInternalProperty("id")`
|
|||
|
|
|
|||
|
|

|
|||
|
|
{{% alert title="Tip" %}}
|
|||
|
|
If attribute mapping needs to be adapted, follow the official
|
|||
|
|
[documentation](https://help.okta.com/oie/en-us/content/topics/apps/define-attribute-statements.htm)
|
|||
|
|
on how to configure `Attribute Statements`
|
|||
|
|
{{% /alert %}}
|
|||
|
|
1. Navigate to the next configuration step and fill the `Feedback` form.
|
|||
|
|
|
|||
|
|
You’ve created and configured the app. You can now either complete an optional step to simplify the login process
|
|||
|
|
in CVAT or proceed directly to the [CVAT configuration step](#step-3-configure-cvat-2).
|
|||
|
|
|
|||
|
|
##### **Step 2: Simplify login process**
|
|||
|
|
|
|||
|
|
If CVAT is configured to require
|
|||
|
|
{{< ilink "/docs/administration/basics/installation#email-verification" "email verification" >}},
|
|||
|
|
it expects the Identity Provider to include the `email_verified` claim. However, Okta does not send this claim
|
|||
|
|
by default. As a result, users will receive a confirmation email with a verification link.
|
|||
|
|
|
|||
|
|
There is an option to include email verification claim on the sign-in step:
|
|||
|
|
1. Add one more mapping `emailVerified` -> `user.emailVerified` on SAML-based application configuration step:
|
|||
|
|
1. Navigate to the `SAML Settings` on the `General` tab and click `Edit`.
|
|||
|
|
1. Add one more attribute mapping as it was described in the app configuration step.
|
|||
|
|
1. Add custom user attribute `emailVerified`:
|
|||
|
|
- Navigate to the `Directory` section in the menu on the left -> `Profile Editor` item
|
|||
|
|
- Select the default user profile from the list (`User (default)`)
|
|||
|
|
- Click `+ Add Attribute`
|
|||
|
|
- Fill out the form with your desired values, making sure to select the `boolean` data type
|
|||
|
|

|
|||
|
|
- Click `Save`
|
|||
|
|
1. Update user profiles:
|
|||
|
|
- Navigate to the `People` section in the menu on the left
|
|||
|
|
- Set the value for the recently created attribute for each person
|
|||
|
|
|
|||
|
|
##### **Step 3: Configure CVAT**
|
|||
|
|
|
|||
|
|
Utilize the example below as a template for your configuration:
|
|||
|
|
|
|||
|
|
```yaml
|
|||
|
|
sso:
|
|||
|
|
enabled: true
|
|||
|
|
selection_mode: email_address
|
|||
|
|
identity_providers:
|
|||
|
|
- id: <idp-id:okta-saml>
|
|||
|
|
protocol: SAML
|
|||
|
|
name: Okta SAML-based Identity Provider
|
|||
|
|
entity_id: <Issuer>
|
|||
|
|
metadata_url: <Metadata URL>
|
|||
|
|
|
|||
|
|
attribute_mapping:
|
|||
|
|
uid: uid
|
|||
|
|
username: username
|
|||
|
|
email: email
|
|||
|
|
first_name: firstName
|
|||
|
|
last_name: lastName
|
|||
|
|
email_verified: emailVerified # if configured
|
|||
|
|
|
|||
|
|
email_domain: <company_email_domain>
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
{{< alert title="Tip" >}}
|
|||
|
|
`Metadata URL` and `Issuer` values may be found on the `Sign On` tab of the application setting
|
|||
|
|

|
|||
|
|
{{< /alert >}}
|
|||
|
|
|
|||
|
|
You can now proceed to [start CVAT](#start-cvat).
|
|||
|
|
For additional CVAT configuration details, refer to [Configuring SSO in CVAT](#configuring-sso-in-cvat).
|
|||
|
|
|
|||
|
|
### Auth0
|
|||
|
|
#### OpenID Connect
|
|||
|
|
|
|||
|
|
Follow these steps to configure an application in the `Auth0` platform and integrate it with CVAT:
|
|||
|
|
|
|||
|
|
##### **Step 1: Register an OIDC-based application**
|
|||
|
|
|
|||
|
|
To start, log into your [Auth0 dashboard](https://manage.auth0.com/dashboard). Once you're in:
|
|||
|
|
|
|||
|
|
1. Navigate to the `Applications` section in the menu on the left, click `+ Create Application`.
|
|||
|
|
1. Enter a name for the application and choose the `Regular Web Applications` type, then click `Create`.
|
|||
|
|
|
|||
|
|

|
|||
|
|
|
|||
|
|
You’ve created an app, now you should finalize its configuration.
|
|||
|
|
|
|||
|
|
##### **Step 2: Configure a created application**
|
|||
|
|
|
|||
|
|
1. In the `Settings` tab of your new application, scroll down to the `Application URIs` section.
|
|||
|
|
1. Add `<scheme:cvat_domain>/api/auth/oidc/<idp-id:auth0-oidc>/login/callback/` to the `Allowed Callback URLs`.
|
|||
|
|
1. Save changes.
|
|||
|
|
|
|||
|
|

|
|||
|
|
|
|||
|
|
That's it, now we can move on to the configuration in CVAT.
|
|||
|
|
|
|||
|
|
##### **Step 3: Configure CVAT**
|
|||
|
|
|
|||
|
|
Utilize the example below as a template for your configuration:
|
|||
|
|
|
|||
|
|
```yaml
|
|||
|
|
sso:
|
|||
|
|
enabled: true
|
|||
|
|
selection_mode: email_address
|
|||
|
|
identity_providers:
|
|||
|
|
- id: <idp-id:auth0-oidc>
|
|||
|
|
protocol: OIDC
|
|||
|
|
name: Auth0 OIDC-based IdP
|
|||
|
|
server_url: https://<auth0_domain>/
|
|||
|
|
client_id: <client_id>
|
|||
|
|
client_secret: <client_secret>
|
|||
|
|
email_domain: <company_email_domain>
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
|
|||
|
|
{{< alert title="Tip" >}}
|
|||
|
|
`Client ID`, `Client Secret` and `Domain` can be found in the `Basic Information` section of application settings
|
|||
|
|

|
|||
|
|
{{< /alert >}}
|
|||
|
|
|
|||
|
|
You can now proceed to [start CVAT](#start-cvat).
|
|||
|
|
For additional CVAT configuration details, refer to [Configuring SSO in CVAT](#configuring-sso-in-cvat).
|
|||
|
|
|
|||
|
|
#### SAML
|
|||
|
|
|
|||
|
|
Follow these steps to configure an application in the `Auth0` platform and integrate it with CVAT:
|
|||
|
|
|
|||
|
|
##### **Step 1: Register an SAML-based application**
|
|||
|
|
|
|||
|
|
To start, log into your [Auth0 dashboard](https://manage.auth0.com/dashboard). Once you're in:
|
|||
|
|
|
|||
|
|
1. Navigate to the `Applications` section in the menu on the left, click `+ Create Application`.
|
|||
|
|
1. Enter a name for the application and choose the `Regular Web Applications` type, then click `Create`.
|
|||
|
|
|
|||
|
|

|
|||
|
|
|
|||
|
|
You’ve created an app, now you should finalize its configuration.
|
|||
|
|
|
|||
|
|
##### **Step 2: Configure a created application**
|
|||
|
|
|
|||
|
|
1. Navigate to the `Addons` tab of the created application and click on the `SAML2 WEB APP` button.
|
|||
|
|

|
|||
|
|
1. Open the `Settings` tab in the popup window and set the following configuration:
|
|||
|
|

|
|||
|
|
|
|||
|
|
- `Application Callback URL`: `<scheme:cvat_domain>/api/auth/saml/<idp-id:auth0-saml>/acs/`
|
|||
|
|
- `Settings`: enter a JSON object like the following:
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"audience": "<scheme:cvat_domain>/api/auth/saml/<idp-id:auth0-saml>/metadata/",
|
|||
|
|
"recipient": "<scheme:cvat_domain>/api/auth/saml/<idp-id:auth0-saml>/acs/",
|
|||
|
|
"destination": "<scheme:cvat_domain>/api/auth/saml/<idp-id:auth0-saml>/acs/",
|
|||
|
|
"mappings": {
|
|||
|
|
"user_id": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier",
|
|||
|
|
"email": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress",
|
|||
|
|
"nickname": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/username",
|
|||
|
|
"given_name": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname",
|
|||
|
|
"family_name": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname",
|
|||
|
|
"email_verified": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailverified"
|
|||
|
|
},
|
|||
|
|
"createUpnClaim": false,
|
|||
|
|
"passthroughClaimsWithNoMapping": false,
|
|||
|
|
"mapIdentities": false
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
1. Scroll down and click `Enable`.
|
|||
|
|
|
|||
|
|
{{% alert title="Note" color="primary" %}}
|
|||
|
|
More information on how to configure an application on Auth0 platform can be
|
|||
|
|
found [here](https://auth0.com/docs/authenticate/single-sign-on/outbound-single-sign-on/configure-auth0-saml-identity-provider#configure-saml-sso-in-auth0).
|
|||
|
|
{{% /alert %}}
|
|||
|
|
|
|||
|
|
That's it, now we can move on to the configuration in CVAT.
|
|||
|
|
|
|||
|
|
##### **Step 3: Configure CVAT**
|
|||
|
|
|
|||
|
|
Utilize the example below as a template for your configuration:
|
|||
|
|
|
|||
|
|
```yaml
|
|||
|
|
sso:
|
|||
|
|
enabled: true
|
|||
|
|
selection_mode: email_address
|
|||
|
|
identity_providers:
|
|||
|
|
- id: <idp-id:auth0-saml>
|
|||
|
|
protocol: SAML
|
|||
|
|
name: Auth0 SAML-based IdP
|
|||
|
|
entity_id: <Issuer>
|
|||
|
|
metadata_url: <Metadata URL>
|
|||
|
|
|
|||
|
|
attribute_mapping:
|
|||
|
|
uid: http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier
|
|||
|
|
username: http://schemas.xmlsoap.org/ws/2005/05/identity/claims/username
|
|||
|
|
email: http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress
|
|||
|
|
first_name: http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname
|
|||
|
|
last_name: http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname
|
|||
|
|
email_verified: http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailverified
|
|||
|
|
|
|||
|
|
email_domain: <company_email_domain>
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
{{< alert title="Tip" >}}
|
|||
|
|
Actual `Metadata URL` and `Issuer` values may be found on the `Usage` tab of the `SAML2 Web App` plugin
|
|||
|
|

|
|||
|
|
{{< /alert >}}
|
|||
|
|
|
|||
|
|
You can now proceed to [start CVAT](#start-cvat).
|
|||
|
|
For additional CVAT configuration details, refer to [Configuring SSO in CVAT](#configuring-sso-in-cvat).
|
|||
|
|
|
|||
|
|
### Keycloak
|
|||
|
|
|
|||
|
|
To configure SSO in terms of Keycloak we need to create a `client`.
|
|||
|
|
|
|||
|
|
#### OpenID Connect
|
|||
|
|
Follow these steps to do that:
|
|||
|
|
|
|||
|
|
##### **Step 1: Register an OIDC-based client**
|
|||
|
|
|
|||
|
|
To start, go to the Keycloak service (by default it is listening for HTTP and HTTPS requests
|
|||
|
|
using the ports 8080 and 8443, respectively) and log into your admin account. Once you're in:
|
|||
|
|
|
|||
|
|
1. Under the desired `realm` navigate to the `Clients` section and click `create client`.
|
|||
|
|
1. Fill out the general client settings:
|
|||
|
|

|
|||
|
|
- `Client type`: OpenID Connect
|
|||
|
|
- `Client ID`: enter client identifier
|
|||
|
|
- Enter a name for the client, e.g. OIDC-based client
|
|||
|
|
1. In the next step, enable the `Client authentication` toggle.
|
|||
|
|

|
|||
|
|
1. In the `Login settings` section, provide the following values:
|
|||
|
|

|
|||
|
|
- `Home URL`: `<scheme:cvat_domain>`
|
|||
|
|
- `Valid redirect URIs`: `<scheme:cvat_domain>/api/auth/oidc/<idp-id:keycloak-oidc>/login/callback/`
|
|||
|
|
- `Web origins`: `<scheme:cvat_domain>`
|
|||
|
|
|
|||
|
|
That's it, now we can move on to the configuration in CVAT.
|
|||
|
|
|
|||
|
|
##### **Step 2: Configure CVAT**
|
|||
|
|
|
|||
|
|
Utilize the example below as a template for your configuration:
|
|||
|
|
|
|||
|
|
```yaml
|
|||
|
|
sso:
|
|||
|
|
enabled: true
|
|||
|
|
selection_mode: email_address
|
|||
|
|
identity_providers:
|
|||
|
|
- id: <idp-id:keycloak-oidc>
|
|||
|
|
protocol: OIDC
|
|||
|
|
name: Keycloak OIDC-based Identity Provider
|
|||
|
|
server_url: <scheme:keycloak_domain>/realms/<custom_realm>/.well-known/openid-configuration
|
|||
|
|
client_id: <Client ID>
|
|||
|
|
client_secret: <Client Secret>
|
|||
|
|
email_domain: <company_email_domain>
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
{{< alert title="Tip" >}}
|
|||
|
|
Actual `Client Secret` value can be found on the `Credentials` tab of the created OIDC client
|
|||
|
|

|
|||
|
|
{{< /alert >}}
|
|||
|
|
|
|||
|
|
You can now proceed to [start CVAT](#start-cvat).
|
|||
|
|
For additional CVAT configuration details, refer to [Configuring SSO in CVAT](#configuring-sso-in-cvat).
|
|||
|
|
|
|||
|
|
#### SAML
|
|||
|
|
|
|||
|
|
Follow these steps to configure a client:
|
|||
|
|
|
|||
|
|
##### **Step 1: Register a SAML-based client**
|
|||
|
|
|
|||
|
|
To start, go to the Keycloak service (by default it is listening for HTTP and HTTPS requests
|
|||
|
|
using the ports 8080 and 8443, respectively) and log into your admin account. Once you're in:
|
|||
|
|
|
|||
|
|
1. Under the desired `realm` navigate to the `Clients` section and click `create client`.
|
|||
|
|
1. Fill out the general client settings:
|
|||
|
|

|
|||
|
|
- `Client type`: SAML
|
|||
|
|
- Set the `Clint ID` the URL: `<scheme:cvat_domain>/api/auth/saml/<idp-id:keycloak-saml>/metadata/`
|
|||
|
|
- Enter a name for the client, e.g. SAML client
|
|||
|
|
1. In the `Login settings` section, provide the following values:
|
|||
|
|

|
|||
|
|
- `Home URL`: `<scheme:cvat_domain>`
|
|||
|
|
- `Valid redirect URIs`: `<scheme:cvat_domain>/api/auth/saml/<idp-id:keycloak-saml>/acs/`
|
|||
|
|
|
|||
|
|
You’ve created a client, now you should finalize its configuration.
|
|||
|
|
|
|||
|
|
##### **Step 2: Configure a created client**
|
|||
|
|
|
|||
|
|
1. Navigate to the general settings of the created client, scroll down to the `SAML capabilities` section.
|
|||
|
|
1. Update the following parameters:
|
|||
|
|
- `Name ID format`: email
|
|||
|
|
- `Force name ID format`: `On`
|
|||
|
|
1. Navigate to the `Keys` tab and enable the `Client signature required` toggle.
|
|||
|
|
1. Configure attributes & claims:
|
|||
|
|
1. Navigate to the `Client scopes` tab on the created client -> dedicated scopes for the client.
|
|||
|
|
You will see that there is no configured mappers.
|
|||
|
|

|
|||
|
|
1. Set up mappers for the following attributes:
|
|||
|
|
- uid
|
|||
|
|
- first_name
|
|||
|
|
- last_name
|
|||
|
|
- username
|
|||
|
|
- email
|
|||
|
|
|
|||
|
|
For attributes like `email`, `first name`, and `last name`, you can either
|
|||
|
|
- Use the predefined mappers
|
|||
|
|

|
|||
|
|
- Or follow the manual configuration steps to create them yourself.
|
|||
|
|
|
|||
|
|
To configure other mappers click `Configure a new mapper` if it is a first mapper or `Add mapper`
|
|||
|
|
-> `By configuration` and then select `User Property`.
|
|||
|
|
|
|||
|
|
For instance, to configure a mapper for the `username` attribute, fill in the form as it is done below:
|
|||
|
|

|
|||
|
|
|
|||
|
|
- `Name`: username
|
|||
|
|
- `Property`: username
|
|||
|
|
- `SAML Attribute Name`: usernameAttribute
|
|||
|
|
|
|||
|
|
That's it, now we can move on to the configuration in CVAT.
|
|||
|
|
|
|||
|
|
##### **Step 3: Configure CVAT**
|
|||
|
|
|
|||
|
|
Utilize the example below as a template for your configuration:
|
|||
|
|
|
|||
|
|
```yaml
|
|||
|
|
sso:
|
|||
|
|
enabled: true
|
|||
|
|
selection_mode: email_address
|
|||
|
|
identity_providers:
|
|||
|
|
- id: <idp-id:keycloak-saml>
|
|||
|
|
protocol: SAML
|
|||
|
|
name: Keycloak SAML-based Identity Provider
|
|||
|
|
entity_id: <scheme:keycloak_domain>/realms/<custom_realm>
|
|||
|
|
metadata_url: <scheme:keycloak_domain>/realms/<custom_realm>/protocol/saml/descriptor
|
|||
|
|
|
|||
|
|
attribute_mapping:
|
|||
|
|
uid: uidAttribute
|
|||
|
|
email_verified: emailVerifiedAttribute
|
|||
|
|
email: emailAttribute
|
|||
|
|
last_name: lastNameAttribute
|
|||
|
|
first_name: firstNameAttribute
|
|||
|
|
username: usernameAttribute
|
|||
|
|
|
|||
|
|
email_domain: <company_email_domain>
|
|||
|
|
```
|
|||
|
|
{{< alert title="Tip" >}}
|
|||
|
|
Actual `Metadata URL` may be found in the `Realm settings` on the `General` tab
|
|||
|
|

|
|||
|
|
{{< /alert >}}
|
|||
|
|
|
|||
|
|
You can now proceed to [start CVAT](#start-cvat).
|
|||
|
|
For additional CVAT configuration details, refer to [Configuring SSO in CVAT](#configuring-sso-in-cvat).
|
|||
|
|
|
|||
|
|
## Configuring SSO in CVAT
|
|||
|
|
|
|||
|
|
CVAT provides a dedicated configuration file to customize the login and registration flow.
|
|||
|
|
The [`sso`](#sso-settings) section of this file specifies which external Identity Provider (IdP)
|
|||
|
|
integrations are enabled. To set up SSO, you typically create a custom YAML configuration file
|
|||
|
|
(e.g., `auth_config.yml`) and supply its path when [starting](#start-cvat) CVAT.
|
|||
|
|
|
|||
|
|
### SSO settings
|
|||
|
|
|
|||
|
|
| Setting | Description |
|
|||
|
|
| ---------------- | ----------- |
|
|||
|
|
| `enabled` | Enables or disables Single Sign-On (SSO) functionality. |
|
|||
|
|
| `selection_mode` | Defines how the Identity Provider (IdP) is selected for authenticating a given user.<br>Available modes:<br><ul><li>`email_address` (default): Selects the IdP based on the domain of the user’s email address.</li><li>`lowest_weight`: Selects the IdP with the lowest configured weight.</li></ul> |
|
|||
|
|
| `enable_pkce` | Controls whether `Proof Key for Code Exchange` (PKCE) is enabled for the authentication flow (disabled by default). <br>This setting applies to all configured OIDC-based Identity Providers |
|
|||
|
|
|
|||
|
|
```yaml
|
|||
|
|
---
|
|||
|
|
sso:
|
|||
|
|
enabled: true|false
|
|||
|
|
selection_mode: email_address|lowest_weight
|
|||
|
|
enable_pkce: true|false
|
|||
|
|
...
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### IdP Configuration Structure
|
|||
|
|
|
|||
|
|
To integrate an Identity Provider, you must define its configuration block under the `identity_providers` section
|
|||
|
|
in the CVAT config file. Each provider's configuration includes both general and protocol-specific settings.
|
|||
|
|
|
|||
|
|
| Setting | Required | Description |
|
|||
|
|
| -------------- | ---------- | ----------- |
|
|||
|
|
| `id` | _required_ | A unique, URL-safe identifier for the IdP. Used in callback URLs. |
|
|||
|
|
| `name` | _required_ | A human-readable name for the IdP. |
|
|||
|
|
| `protocol` | _required_ | Authentication protocol (`OIDC`/`SAML`). |
|
|||
|
|
| `email_domain` | _optional_ | Company email domain (used with `email_address` selection mode). |
|
|||
|
|
| `weight` | _optional_ | Determines priority (used with `lowest_weight` selection mode). The default is 10. |
|
|||
|
|
|
|||
|
|
Additionally, each IdP configuration must include several protocol-specific parameters:
|
|||
|
|
{{< tabpane text=true >}}
|
|||
|
|
{{% tab header="OpenID Connect" %}}
|
|||
|
|
- `client_id` and `client_secret` (_required_): These values can be obtained
|
|||
|
|
from the configuration page of the specific provider.
|
|||
|
|
- `server_url` (_required_): URL is used to obtain IdP OpenID Configuration Metadata.
|
|||
|
|
|
|||
|
|
**NOTE**: How to check `server_url` correctness: server_url + `/.well-known/openid-configuration` API should exist
|
|||
|
|
and return [OpenID Provider Metadata](https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata).
|
|||
|
|
Generally, each authentication platform provides a list of all endpoints. You need to find the corresponding endpoint
|
|||
|
|
and select the part in front of `/.well-known/openid-configuration`. For example, in the case of integrating
|
|||
|
|
an OIDC Microsoft Entry ID application, don't forget to specify the second version of API
|
|||
|
|
(`https://login.microsoftonline.com/<tenant_id>/v2.0`).
|
|||
|
|
- `token_auth_method` (_optional_): Token endpoint authentication method which can be one of
|
|||
|
|
`client_secret_basic`, `client_secret_post`. If this field is omitted, a method from
|
|||
|
|
the server's token auth methods list will be used.
|
|||
|
|
{{% /tab %}}
|
|||
|
|
{{% tab header="SAML" %}}
|
|||
|
|
- `entity_id` (_required_): IdP entity ID, should be equal to the corresponding setting in the IdP configuration.
|
|||
|
|
- `metadata_url` (_optional_): SAML metadata URL. This can typically be found on the IdP configuration page.
|
|||
|
|
- `x509_cert` (_optional_): The SAML X.509 certificate. Also could be found in the IdP’s configuration.
|
|||
|
|
If the `metadata_url` is not specified, this parameter becomes **required**.
|
|||
|
|
- `sso_url` (_optional_): SAML endpoint for the Single Sign-On service. Also could be found in the IdP’s configuration.
|
|||
|
|
If the `metadata_url` is not specified, this parameter becomes **required**.
|
|||
|
|
- `attribute_mapping` (_required_): A mapping between user account attributes and attributes sent by
|
|||
|
|
the Identity Provider.
|
|||
|
|
{{% /tab %}}
|
|||
|
|
{{< /tabpane >}}
|
|||
|
|
|
|||
|
|
Below are examples of SSO configuration file for both protocols:
|
|||
|
|
{{< tabpane text=true >}}
|
|||
|
|
{{% tab header="Integrate OIDC-based IdP" %}}
|
|||
|
|
```yaml
|
|||
|
|
---
|
|||
|
|
sso:
|
|||
|
|
enabled: true
|
|||
|
|
selection_mode: email_address
|
|||
|
|
identity_providers:
|
|||
|
|
- id: oidc-idp
|
|||
|
|
protocol: OIDC
|
|||
|
|
name: OIDC-based IdP
|
|||
|
|
server_url: https://example.com
|
|||
|
|
client_id: xxx
|
|||
|
|
client_secret: xxx
|
|||
|
|
email_domain: example.com
|
|||
|
|
```
|
|||
|
|
{{% /tab %}}
|
|||
|
|
{{% tab header="Integrate SAML-based IdP" %}}
|
|||
|
|
```yaml
|
|||
|
|
---
|
|||
|
|
sso:
|
|||
|
|
enabled: true
|
|||
|
|
selection_mode: lowest_weight
|
|||
|
|
identity_providers:
|
|||
|
|
- id: saml-idp
|
|||
|
|
protocol: SAML
|
|||
|
|
name: SAML-based IdP
|
|||
|
|
entity_id: <idp-entity-id>
|
|||
|
|
weight: 1
|
|||
|
|
# specify only metadata_url or sso_url and x509_cert
|
|||
|
|
metadata_url: http://example.com/path/to/saml/metadata/
|
|||
|
|
sso_url: <Login URL>
|
|||
|
|
x509_cert: |
|
|||
|
|
-----BEGIN CERTIFICATE-----
|
|||
|
|
certificate content
|
|||
|
|
-----END CERTIFICATE-----
|
|||
|
|
|
|||
|
|
attribute_mapping:
|
|||
|
|
uid: uidAttribute
|
|||
|
|
email_verified: emailVerifiedAttribute
|
|||
|
|
email: emailAttribute
|
|||
|
|
last_name: lastNameAttribute
|
|||
|
|
first_name: firstNameAttribute
|
|||
|
|
username: usernameAttribute
|
|||
|
|
```
|
|||
|
|
{{% /tab %}}
|
|||
|
|
{{< /tabpane >}}
|
|||
|
|
|
|||
|
|
More information about OIDC-based and SAML-based IdP configuration expected by Django Allauth
|
|||
|
|
can be found [here](https://docs.allauth.org/en/latest/socialaccount/providers/openid_connect.html)
|
|||
|
|
and [here](https://docs.allauth.org/en/latest/socialaccount/providers/saml.html) respectively.
|
|||
|
|
|
|||
|
|
### Start CVAT
|
|||
|
|
|
|||
|
|
{{< alert title="Restart required" color="warning" >}}
|
|||
|
|
If CVAT is already running, don’t forget to restart the containers to apply the SSO configuration
|
|||
|
|
{{< /alert >}}
|
|||
|
|
|
|||
|
|
Once the configuration file is created, several environment variables must be exported before running CVAT:
|
|||
|
|
```bash
|
|||
|
|
export AUTH_CONFIG_PATH="<path_to_auth_config>"
|
|||
|
|
export CVAT_HOST="<cvat_host>"
|
|||
|
|
# cvat_port is optional
|
|||
|
|
export CVAT_BASE_URL="<http|https>://${CVAT_HOST}:<cvat_port>"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Start the CVAT Enterprise instance as usual.
|
|||
|
|
|
|||
|
|
That's it! The CVAT login page now should have the `Continue with SSO` option,
|
|||
|
|
allowing users to authenticate using the configured Identity Provider.
|
|||
|
|
|
|||
|
|

|