Примеры конфигурации для OIDC в DataLens On-premises

Keycloak

Пример конфигурации для Keycloak

const keycloakConfig = {
    slug: 'keycloak',
    title: 'Keycloak',
    type: 'oidc',
    defaultRole: 'datalens.visitor',
    config: {
        issuer: 'https://keycloak.example.org/realms/datalens-enterprise/.well-known/openid-configuration',
        clientId: 'datalens',
        clientSecret: 'password',
        codeChallengeMethod: 'S256',
        scope: ['openid', 'profile', 'email', 'roles', 'groups'],
        
        roles: {
            path: 'resource_access.datalens.roles',
            targetType: 'array-of-strings',
            mapping: {
                'datalens.admin': 'client.datalens.admin',
                'datalens.creator': 'client.datalens.creator',
            },
        },
        syncUserRoles: true,
        
        groups: {
            path: 'groups',
            targetType: 'array-of-strings', // Рекомендуем настроить Script Mapper и использовать array-of-objects для указания идентификатора и названия группы
        },
        syncUserGroups: true,
    },
};

Настройка клиента Keycloak

Для примера задайте конфигурацию клиента Keycloak:

  1. Укажите настройки клиента, для этого нажмите Clients → ваш клиент (datalens) → Settings:

    • Valid redirect URIs: {UI_APP_ENDPOINT}/auth/callback/oidc. Замените UI_APP_ENDPOINT на URL вашего приложения, например http://example.com:8080/auth/callback/oidc.
    • Client authenticationon.
    • Authentication flowStandard flow.
  2. Чтобы создать роли, нажмите Clients → ваш клиент (datalens) → Roles:

    • client.datalens.admin
    • client.datalens.creator
  3. Чтобы создать группу, нажмите GroupsCreate group.

  4. Чтобы назначить группу и роли пользователю, нажмите Usersпользователь:

    • Назначьте роли на вкладке Role mapping.
    • Назначьте группу на вкладке Groups.
  5. Чтобы настроить scope клиента, нажмите Client scopesCreate client scope:

    • Создайте scope groups и mapper type Group Membership. Включите Add to userinfo в настройках Keycloak.
    • Создайте scope roles или predefined mapper client roles. Включите Add to userinfo в настройках Keycloak.

Пример userinfo для Keycloak

{
  "sub": "4d2b6d80-49cf-44fb-94c6-946393dea8c7",
  "resource_access": {
    "datalens": {
      "roles": [
        "client.datalens.creator"
      ]
    },
  },
  "email_verified": true,
  "name": "Bob Smith",
  "groups": [
    "datalens-admin"
  ],
  "preferred_username": "bob",
  "given_name": "Bob",
  "family_name": "Smith",
  "email": "bob@example.org"
}

Пример настройки через переменную окружения AUTH_PROVIDERS_CONFIG

Для настройки провайдеров аутентификации в приложении используется переменная окружения AUTH_PROVIDERS_CONFIG. Эта переменная содержит JSON-строку с массивом конфигураций всех провайдеров аутентификации.

Пример значения переменной окружения AUTH_PROVIDERS_CONFIG:

[
  {
    "slug": "keycloak",
    "title": "Keycloak",
    "type": "oidc",
    "defaultRole": "datalens.visitor",
    "config": {
      "issuer": "https://keycloak.example.org/realms/datalens-enterprise/.well-known/openid-configuration",
      "clientId": "datalens",
      "clientSecret": "password",
      "codeChallengeMethod": "S256",
      "scope": ["openid", "profile", "email", "roles", "groups"],
      "roles": {
        "path": "resource_access.datalens.roles",
        "targetType": "array-of-strings",
        "mapping": {
          "datalens.admin": "client.datalens.admin",
          "datalens.creator": "client.datalens.creator"
        }
      },
      "syncUserRoles": true,
      "groups": {
        "path": "groups",
        "targetType": "array-of-strings"
      },
      "syncUserGroups": true
    }
  }
]