# Аутентификация на основе JWT Вы можете подключить GlarusBI к своему поставщику удостоверений, используя веб-токены JSON (JWT) для аутентификации людей. ## Потоки аутентификации GlarusBI поддерживает два потока аутентификации, которые могут быть использованы с JWT: - Поток кода авторизации - Поток кода авторизации с PKCE PKCE расшифровывается как Proof-Key for Code Exchange, и это способ расширить поток кода авторизации для включения случайных ключей, сгенерированных по запросу. Для получения дополнительной информации об этих потоках см. [статью Википедии об OAuth](https://en.wikipedia.org/wiki/OAuth). В настоящее время GlarusBI поддерживает только алгоритм [HS256](https://en.wikipedia.org/wiki/JSON_Web_Token) ([HMAC](https://en.wikipedia.org/wiki/HMAC) + [SHA-256 ](https://en.wikipedia.org/wiki/SHA-2)). ## Типичный поток для взаимодействия единого входа на основе JWT с GlarusBI Предполагая, что ваш сайт является локальным хостом, обслуживающим порт 3000: 1. Человек пытается просмотреть вопрос, например, `http://localhost:3000/question/1-superb-question`. 2. Если человек не вошел в систему, GlarusBI перенаправляет его на `http://localhost:3000/auth/sso`. 3. Сохраняя исходный URI `/question/1-superb-question`, GlarusBI перенаправляет человека к поставщику SSO (приложению аутентификации). 4. Пользователь входит в систему, используя основную форму. 5. В случае успешного входа ваше приложение аутентификации должно отправить запрос GET к вашей конечной точке GlarusBI с токеном и URI «возврата»: `http://localhost:3000/auth/sso?jwt= TOKEN_GOES_HERE&return_to=/question/1-превосходный-вопрос`. 6. GlarusBI проверяет веб-токен JSON, регистрирует пользователя, а затем перенаправляет его к исходному пункту назначения, `/question/1-superb-question`. ## Типичный поток для взаимодействия единого входа на основе JWT с GlarusBI Предполагая, что ваш сайт является локальным хостом, обслуживающим порт 3000: 1. Человек пытается просмотреть вопрос, например, `http://localhost:3000/question/1-superb-question`. 2. Если человек не вошел в систему, GlarusBI перенаправляет его на `http://localhost:3000/auth/sso`. 3. Сохраняя исходный URI `/question/1-superb-question`, GlarusBI перенаправляет человека к поставщику SSO (приложению аутентификации). 4. Пользователь входит в систему, используя основную форму. 5. В случае успешного входа ваше приложение аутентификации должно отправить запрос GET к вашей конечной точке GlarusBI с токеном и URI «возврата»: `http://localhost:3000/auth/sso?jwt= TOKEN_GOES_HERE&return_to=/question/1-превосходный-вопрос`. 6. GlarusBI проверяет веб-токен JSON, регистрирует пользователя, а затем перенаправляет его к исходному пункту назначения, `/question/1-superb-question`. ## Включение аутентификации JWT Перейдите в раздел **Администрирование** > **Настройки** области администрирования, затем нажмите на вкладку **Аутентификация**. Нажмите кнопку **Настроить** в разделе JWT на этой странице, и вы увидите эту форму: ![Форма SAML](images/JWT-auth-form.png) Щелкните переключатель в верхней части формы, чтобы включить аутентификацию на основе JWT. **Обязательно установите переключатель в положение «Включено»**, иначе аутентификация JWT не будет работать, даже если все остальные параметры указаны правильно. Вот разбивка каждой из настроек: **Поставщик удостоверений URI JWT:** здесь GlarusBI будет перенаправлять запросы на вход. То есть это то место, где ваши пользователи входят в систему через вашего поставщика удостоверений. **Строка, используемая ключом подписи JWT:** Строка, используемая для заполнения закрытого ключа, используемого для проверки сообщений JWT. И GlarusBI, и приложение аутентификации должны иметь один и тот же ключ подписи JWT. ## Конфигурация атрибута пользователя (необязательно) Это дополнительные настройки, которые вы можете заполнить для передачи пользовательских атрибутов в GlarusBI. - **Атрибут электронной почты:** ключ для получения адреса электронной почты каждого пользователя JWT. - **Атрибут First Name:** ключ для получения имени каждого пользователя JWT. - **Атрибут Last Name:** если вы догадались, что это ключ для получения фамилии каждого пользователя JWT, значит, вы обратили на это внимание. Вы можете отправить дополнительные пользовательские атрибуты в GlarusBI, добавив атрибуты в виде пар ключ/значение в свой JWT. Эти атрибуты будут синхронизироваться при каждом входе в систему. ## Схема группы Вы можете использовать JWT для назначения пользователей GlarusBI в настраиваемые группы, выполнив следующие действия: 1. Добавьте это в свой JWT: `groups: ["group_name"]` 2. В панели администратора в GlarusBI перейдите на вкладку «Аутентификация» раздела «Настройки» и нажмите кнопку «Настроить» на JWT. На этом экране включите переключатель в разделе «СИНХРОНИЗИРОВАТЬ ЧЛЕНСТВО В ГРУППЕ». 3. Затем нажмите «Редактировать сопоставления». В этом модальном окне введите имя одной из ваших групп, как определено в JWT, затем нажмите «Добавить». В появившейся строке щелкните раскрывающийся список, чтобы выбрать группу GlarusBI, с которой она должна сопоставляться. Повторите это для каждой из групп, которые вы хотите отобразить. ## Отключение входа по паролю > **Избегайте блокировки в GlarusBI!** Эта настройка будет применяться ко всем учетным записям GlarusBI, _включая вашу учетную запись администратора GlarusBI_. Мы рекомендуем включить аутентификацию по паролю. Это защитит вас от блокировки GlarusBI в случае каких-либо проблем с SSO. Чтобы потребовать от людей входа с помощью SSO, отключите аутентификацию по паролю в разделе **Администрирование** > **Аутентификация**. ![Отключение пароля](images/password-disable.png) ## Примечание об Azure Если вы используете Azure, вам может понадобиться Azure AD B2C. Ознакомьтесь с их [обзором токенов](https://docs.microsoft.com/en-us/azure/active-directory-b2c/tokens-overview). ## Пример кода с использованием аутентификации на основе JWT Пример кода, использующего JWT-аутентификацию, можно найти в [репозитории примеров SSO](https://github.com/metabase/sso-examples). - [Пример JWT в приложении Clojure](https://github.com/metabase/sso-examples/tree/master/clj-jwt-example) - [Пример JWT в приложении JavaScript (Node)](https://github.com/metabase/sso-examples/tree/master/nodejs-jwt-example)