Кастомизация виджета аутентификации
Общая информация
Виджет аутентификации — это лёгкий JavaScript-компонент для аутентификации пользователей в сервисе Trusted.ID. Он работает по стандартам OIDC/OAuth2, PKCE и может быть встроен в любые веб-сайты или интерфейсы — от простого HTML до SPA на React или Vue.
Виджет представляет собой меню с информацией о пользователе и основными действиями — например, переходом в интерфейс Trusted ID или выходом из системы. Он появляется при клике на аватар пользователя, который расположен в правом верхнем углу экрана.

Конфигурация
1. Параметры конфигурации
Обязательные параметры
Параметр | Тип | Описание | Пример |
appId | string | Уникальный идентификатор приложения в Trusted | "MTnOOTdx85FgNbOFy2nUsH" |
backendUrl | string | URL вашего backend API | "http://localhost:3001" |
redirectUrl | string | URL для перенаправления после авторизации | "http://localhost:3000/login" |
Необязательные параметры
Параметр | Тип | Описание | Значение по умолчанию |
issuer | string | URL Trusted SSO сервера | "https://id.kloud.one" |
withOutHomePage | boolean | Автоматический редирект на авторизацию | false |
getTokenEndPoint | string | Endpoint для получения токена | "/api/oidc/token" |
getUserInfoEndPoint | string | Endpoint для получения данных пользователя | "/api/oidc/me" |
scopes | string[] | OAuth2 разрешения | ["openid", "lk", "profile"] |
profile | IProfileConfig | Настройки профиля пользователя | См. раздел ниже |
loginButton | ICustomMenuButton | Настройки кнопки входа | См. раздел ниже |
menuButtons | ICustomMenuButton[] | Массив дополнительных кнопок | См. раздел ниже |
customStyles | ICustomStyles | Глобальные стили виджета | См. раздел ниже |
Пример
import { TrustedWidget, TrustedWidgetConfig } from "trusted-widget";
const newConfig: TrustedWidgetConfig = {
appId: "MTnOOTdx85FgNbOFy2nUsH",
backendUrl: "http://localhost:3001",
redirectUrl: "http://localhost:3000/login",
issuer: "https://id.kloud.one",
withOutHomePage: false,
getTokenEndPoint: "/api/oidc/token",
getUserInfoEndPoint: "/api/oidc/me",
};
// Использование компонента
<TrustedWidget config={newConfig} />;
2. Настройки профиля пользователя (profile)
Параметры конфигурации профиля
Параметр | Тип | Описание | Значение по умолчанию |
isHideText | boolean | Скрыть отображение имени пользователя | false |
wrapper | IComponentStyles | Стили контейнера профиля (только цвета) | См. раздел стилей |
button | IComponentStyles | Стили кнопки-аватара пользователя (только цвета) | См. раздел стилей |
⚠️ Важно: Для настроек профиля (profile.wrapper
и profile.button
) можно изменять только цвета (color.text
, color.background
, color.hover
) и скрывать имя пользователя (isHideText
). Другие параметры стилизации (такие как borderRadius
, padding
, position
) не применяются к профилю.
Пример настройки профиля
const config: TrustedWidgetConfig = {
appId: "MTnOOTdx85FgNbOFy2nUsH",
backendUrl: "http://localhost:3001",
redirectUrl: "http://localhost:3000/login",
// Только аватар без текста
profile: {
isHideText: true, // Скрыть имя пользователя
},
};
Параметры кнопки входа
Параметр | Тип | Описание | Значение по умолчанию |
text | string | Текст кнопки входа | "Войти" |
type | string | Тип кнопки | "login" |
icon | string \| React.ReactElement | Ссылка на изображение или React элемент | null |
customStyles | IComponentStyles | Индивидуальные стили для кнопки | См. раздел стилей |
Пример настройки кнопки входа
const config: TrustedWidgetConfig = {
appId: "MTnOOTdx85FgNbOFy2nUsH",
backendUrl: "http://localhost:3001",
redirectUrl: "http://localhost:3000/login",
// Настройки кнопки для неавторизованных пользователей
loginButton: {
text: "Войти через Trusted",
type: "login",
icon: "https://id.kloud.one/favicon.ico", // Пользовательская иконка
},
};
Пример кнопки входа без иконки
const config: TrustedWidgetConfig = {
appId: "MTnOOTdx85FgNbOFy2nUsH",
backendUrl: "http://localhost:3001",
redirectUrl: "http://localhost:3000/login",
// Простая кнопка только с текстом
loginButton: {
text: "Войти",
type: "login",
customStyles: {
isHideIcon: true, // Скрыть иконку
},
},
};
Параметр | Тип | Описание | Пример |
text | string | Отображаемое название кнопки | "TestService" |
link | string | Ссылка на страницу для перехода | "https://test.com" |
Параметр | Тип | Описание | Значение по умолчанию |
icon | string \| React.ReactElement | Ссылка на изображение или React элемент | null |
customStyles | IComponentStyles | Индивидуальные стили для кнопки | См. раздел стилей |
Пример конфигурации
import { TrustedWidget, TrustedWidgetConfig } from "trusted-widget";
const newConfig: TrustedWidgetConfig = {
appId: "MTnOOTdx85FgNbOFy2nUsH",
backendUrl: "http://localhost:3001",
redirectUrl: "http://localhost:3000/login",
menuButtons: [
{
text: "TestService",
link: "https://test.com",
icon: "https://image.png", // | <Icon />
},
],
};
Система стилизации виджета
В объекте TrustedWidgetConfig
можно задать внешний вид всех элементов виджета через свойство customStyles
. Это позволяет гибко управлять цветами, скруглением и выравниванием контента без необходимости менять код компонентов.
1. Настройка внешнего вида
Параметр | Тип | Описание |
customStyles | ICustomStyles | Объект стилизации всего виджета |
2. Параметры кастомных стилей (customStyles)
Глобальные стили
Параметр | Тип | Описание | Пример |
global.borderRadius | string | Скругление углов для всех элементов | "12px" |
global.color | IComponentStyles | Глобальные цвета | См. ниже |
Стили компонентов
Параметр | Тип | Описание | Назначение |
components.primaryButton | IComponentStyles | Стиль основной кнопки | Кнопка "Войти", "Профиль" |
components.secondaryButton | IComponentStyles | Стиль второстепенной кнопки | Кнопка "Выход" |
components.accountButton | IComponentStyles | Стиль кнопок меню аккаунта | Кнопки в выпадающем меню |
Параметры IComponentStyles
Параметр | Тип | Описание | Пример |
color.text | string | Цвет текста и иконки (HEX) | "#ffffff" |
color.background | string | Цвет фона (HEX) | "#1976d2" |
color.hover | string | Цвет фона при наведении (HEX) | "#1565c0" |
borderRadius | string | Скругление углов элемента | "8px" |
padding | string | Внутренние отступы | "8px 16px" |
position | "left" \| "center" | Выравнивание контента в кнопке | "center" |
isHideIcon | boolean | Скрыть иконку в кнопке | false |
Виджет имеет умную систему наследования стилей для кнопки secondaryButton
:
- Если заданы стили только для
primaryButton
, то они автоматически применяются и к secondaryButton
, но с большей прозрачностью (через уменьшение opacity). - Если заданы отдельные стили для
secondaryButton
, то прозрачность применяться не будет — используются только явно указанные параметры.
Пример конфигурации стилей
Пример настройки глобальных стилей
const config: TrustedWidgetConfig = {
appId: "MTnOOTdx85FgNbOFy2nUsH",
backendUrl: "http://localhost:3001",
redirectUrl: "http://localhost:3000/login",
// Дефолтные значения для глобальных стилей
customStyles: {
global: {
color: {
text: "#666666",
background: "#ffffff",
},
borderRadius: "8px",
},
components: {
accountButton: {
color: {
text: "#fff",
background: "#efefef",
hover: undefined, // если не задан применяется filter: brightness(90%)
},
position: "left",
isHideIcon: false,
},
primaryButton: {
color: {
text: "#ffffff",
background: "#b5262f",
hover: undefined, // если не задан применяется filter: brightness(90%)
},
position: "left",
isHideIcon: false,
},
// secondaryButton не задан — будет использоваться стиль primaryButton с прозрачностью (opacity:0.5)
},
},
};
Полная конфигурация с профилем
const config: TrustedWidgetConfig = {
appId: "MTnOOTdx85FgNbOFy2nUsH",
backendUrl: "http://localhost:3001",
redirectUrl: "http://localhost:3000/login",
// Настройки профиля
profile: {
isHideText: false,
wrapper: {
color: {
text: "#333333",
background: "#f8f9fa",
},
},
button: {
color: {
text: "#333333",
background: "transparent",
hover: "rgba(0, 0, 0, 0.08)",
},
},
},
};
Полная конфигурация с кнопкой входа
const config: TrustedWidgetConfig = {
appId: "MTnOOTdx85FgNbOFy2nUsH",
backendUrl: "http://localhost:3001",
redirectUrl: "http://localhost:3000/login",
// Кнопка входа с иконкой
loginButton: {
text: "Войти",
type: "login",
icon: "https://id.kloud.one/favicon.ico",
customStyles: {
color: {
text: "#ffffff",
background: "#4CAF50",
hover: "#45a049",
},
borderRadius: "8px",
padding: "10px 20px",
},
},
};
Полная конфигурация с глобальными стилями и меню
const config: TrustedWidgetConfig = {
appId: "MTnOOTdx85FgNbOFy2nUsH",
backendUrl: "http://localhost:3001",
redirectUrl: "http://localhost:3000/login",
// Глобальные стили
customStyles: {
global: {
borderRadius: "8px",
},
components: {
primaryButton: {
color: {
text: "#ffffff",
background: "#4CAF50",
hover: "#45a049",
},
position: "center",
isHideIcon: false,
},
secondaryButton: {
color: {
text: "#4CAF50",
background: "transparent",
hover: "#f1f8e9",
},
position: "center",
isHideIcon: false,
},
accountButton: {
color: {
text: "#333333",
background: "#ffffff",
hover: "#f5f5f5",
},
position: "left",
isHideIcon: false,
},
},
},
};
Индивидуальная стилизация кнопок меню
Для каждой кнопки в menuButtons
можно задать индивидуальные стили через свойство customStyles
типа IComponentStyles
.
Пример с индивидуальными стилями для кнопок
const config: TrustedWidgetConfig = {
appId: "MTnOOTdx85FgNbOFy2nUsH",
backendUrl: "http://localhost:3001",
redirectUrl: "http://localhost:3000/login",
menuButtons: [
{
text: "Личный кабинет",
link: "https://my-account.com",
icon: "https://icons.com/profile.png",
customStyles: {
color: {
text: "#ffffff",
background: "#4CAF50", // Зеленый фон
hover: "#45a049", // Темно-зеленый при наведении
},
borderRadius: "8px",
padding: "8px 16px",
position: "center",
},
},
{
text: "Настройки",
link: "https://settings.com",
icon: "https://icons.com/settings.png",
customStyles: {
color: {
text: "#333333",
background: "#f5f5f5", // Светло-серый фон
hover: "#e0e0e0", // Серый при наведении
},
borderRadius: "6px",
padding: "6px 12px",
position: "left",
},
},
{
text: "Поддержка",
link: "https://support.com",
customStyles: {
color: {
text: "#ffffff",
background: "#FF5722", // Оранжевый фон
hover: "#E64A19", // Темно-оранжевый при наведении
},
borderRadius: "4px",
padding: "10px 20px",
position: "center",
isHideIcon: true, // Скрыть иконку для этой кнопки
},
},
],
};
Приоритет применения стилей
- Индивидуальные стили кнопки (
customStyles
в объекте кнопки) — высший приоритет - Стили accountButton (
customStyles.components.accountButton
) — если не заданы индивидуальные - Дефолтные стили — если не заданы предыдущие
const config: TrustedWidgetConfig = {
appId: "MTnOOTdx85FgNbOFy2nUsH",
backendUrl: "http://localhost:3001",
redirectUrl: "http://localhost:3000/login",
// Если у кнопки НЕТ customStyles, то для menuButtons применяются стили accountButton
customStyles: {
components: {
// дефолтные стили accountButton
accountButton: {
color: {
text: "#666666",
background: "#efefef",
hover: undefined, // если не задан применяется filter: brightness(90%)
},
position: "left",
},
},
},
};
Итоговое поведение системы стилизации
- Централизованное управление — все стили задаются через
customStyles
, profile
и loginButton
- Гибкая настройка профиля — через
profile.wrapper
и profile.button
можно настроить внешний вид авторизованного пользователя - Настройка кнопки входа — через
loginButton.customStyles
можно настроить стили кнопки для неавторизованных пользователей - Глобальное скругление —
borderRadius
применяется ко всем элементам виджета (модальное окно, кнопки) - Управление отображением — флаги
isHideText
и isHideIcon
позволяют скрывать текст и иконки - Умное наследование — если не заданы стили
secondaryButton
, используются стили primaryButton
с прозрачностью. Если не задан цвет hover
используется стиль filter: brightness(90%)
- Индивидуальная кастомизация — для каждой кнопки меню можно задать индивидуальные стили через
customStyles
- Fallback система — если индивидуальные стили не заданы для
menuButtons
, применяются стили accountButton
- Гибкое выравнивание — контент в кнопках настраивается через свойство
position
("left"
| "center"
) - Структура цветов — все цвета теперь организованы в объекте
color
с подсвойствами text
, background
, hover

