Статьи

Защитите мобильное приложение с помощью OIDC и Ionic для JHipster

«Я люблю писать код аутентификации и авторизации». Нет Java-разработчика. Надоело строить одни и те же экраны входа снова и снова? Попробуйте API Okta для размещенной аутентификации, авторизации и многофакторной аутентификации.

Мы создали тонну новых проектов с Ionic и JHipster здесь, в Okta, и сегодня я рад показать вам, как защитить эти проекты с помощью OIDC. Давайте начнем с некоторых основ: Ionic — это платформа для создания собственных мобильных приложений с использованием веб-технологий. Технически это «гибридное» приложение, потому что оно не использует нативные SDK. Гибридные мобильные приложения распространяются точно так же, как и нативные: их можно установить на мобильные устройства и они перечислены в магазинах приложений. Вероятность того, что ваши конечные пользователи никогда не смогут увидеть разницу между гибридным и нативным мобильным приложением, велика.

JHipster — генератор приложений для современных веб-приложений. Он генерирует бэкэнд Spring Boot с угловым интерфейсом. Он даже поддерживает прогрессивные веб-приложения! Помимо возможности создания автономных приложений, он также может создавать архитектуру микросервисов на основе Spring Boot и Spring Cloud. Приложения, которые он генерирует, имеют встроенную аутентификацию, мониторинг и управление. Вы также можете использовать его генератор сущностей для быстрого и простого создания приложений CRUD.

В этой статье вы познакомитесь с Ionic for JHipster , модулем JHipster , который вы можете использовать для создания гибридного мобильного приложения, которое работает на вашем телефоне. Он начинается с создания проекта с ionic start и использования Ionic JHipster Starter для своих файлов. Он поддерживает аутентификацию JWT по умолчанию. Если у вас в качестве механизма аутентификации используется OAuth 2.0 / OIDC, он устанавливает поддержку OIDC. Он даже работает с архитектурой микросервисов, созданной JHipster!

Как проект, целью JHipster является создание приложения, которое объединяет:

  • Высокопроизводительный и надежный стек Java на стороне сервера с Spring Boot
  • Гладкий, современный, передний, мобильный, с Angular и Bootstrap
  • Надежная микросервисная архитектура с JHipster Register, Netflix OSS, Elastic Stack и Docker
  • Мощный рабочий процесс для создания приложений с помощью Yeoman, Webpack / Gulp и Maven / Gradle

Мы очень любим JHipster; недавно мы стали золотым спонсором Open Collective ! ?

С тех пор, как я написал первую версию (в 2015 году) мини-книги JHipster , я всегда хотел добавить поддержку создания ионного клиента. Я рад сообщить, что мои мечты наконец сбылись!

Представляем Ионный Модуль для JHipster! ?

Ionic — это фреймворк, позволяющий создавать мобильные приложения с использованием известных и любимых вами веб-технологий. В настоящее время у него есть поддержка Angular, но его команда разработчиков также работает над добавлением поддержки React и Vue. Они делают это через свой трафаретный проект. Трафарет позволяет создавать веб-компоненты, а не компоненты, специфичные для фреймворка. Поскольку веб-компоненты соответствуют стандартам, их можно использовать в стандартном JavaScript-приложении или во многих популярных готовых фреймворках.

Apache Cordova обеспечивает мобильную поддержку Ionic. Cordova — это базовая технология, которая позволяет создавать и запускать мобильные приложения, созданные с использованием HTML, CSS и JavaScript. Он позволяет вам ориентироваться на несколько платформ (например, Android, iOS, Windows, Blackberry и Ubuntu) с одной кодовой базой. Довольно гладко, а?

Команда Ionic также недавно выпустила Ionic PWA Toolkit . PWA Toolkit — это бета-проект, в котором есть все необходимое для создания высокопроизводительного PWA (например, Ionic, маршрутизация, трафарет, push-уведомления, отложенная загрузка, разбиение кода, отложенная загрузка изображений и т. Д.). Все проекты Ionic за пределами гибридной разработки, кажется, демонстрируют, что Ionic добился успеха вне телефона с приложениями PWA в Интернете.

Начни с Ionic для JHipster

JHipster требует, чтобы у вас были установлены Node.js и Java 8 . Вы можете установить его через Homebrew ( brew install jhipster ), Chocolatey ( choco install jhipster ) или с помощью npm.

npm i -g generator-jhipster

Разработка блогового приложения с аутентификацией OIDC

Чтобы разработать приложение для блога с помощью JHipster, откройте окно терминала, создайте каталог и запустите jhipster .

mkdir blog && cd blog && jhipster

JHipster задает много вопросов о типе приложения, которое вы хотите создать, и о том, какие функции вы хотели бы включить. В таблице ниже показаны варианты, которые я сделал для создания блогового приложения с Angular, OAuth 2.0 / OIDC-аутентификацией и Gradle.

Вопрос Ответ
Тип заявления? Monolith
Название? blog
Имя пакета Java? com.okta.developer
Использовать реестр JHipster? No
Тип аутентификации? OAuth 2.0 / OIDC
Производственная база данных? PostgreSQL
Разработка базы данных? H2 with disk-based persistence
Использовать Spring кеш? Yes, with Ehcache
Использовать Hibernate 2-го уровня кеша? Yes
Мавен или Градл? Gradle
Другие технологии? <blank>
Клиентская структура? Angular 5
Включить поддержку SASS? No
Включить i18n? Yes
Родной язык приложения? English
Дополнительные языки? <blank>
Дополнительные рамки тестирования? <blank>
Установить другие генераторы? No

Процесс генерации проекта займет несколько минут, в зависимости от скорости вашего интернет-соединения. Когда он закончится, вы должны увидеть результат, подобный следующему.

Server application generated successfully.
 
Run your Spring Boot application:
 ./gradlew
 
Client application generated successfully.
 
Start your Webpack development server with:
 yarn start
 
Congratulations, JHipster execution is complete!
Application successfully committed to Git.

OIDC с брелоком и октой

JHipster поддерживает OAuth 2.0 и OIDC для аутентификации. Keycloak — это Identity Provider по умолчанию, настроенный с помощью JHipster. Настройка Keycloak по умолчанию это хорошо, потому что вы можете использовать его без подключения к интернету.

Чтобы войти в свое приложение, вам понадобится Keycloak и работает. Команда JHipster создала для вас контейнер Docker, который имеет пользователей и роли по умолчанию. Запустите Keycloak с помощью следующей команды.

docker-compose -f src/main/docker/keycloak.yml up

Запустите ваше приложение с помощью ./gradlew (или ./mvnw если вы выбрали Maven), и вы сможете войти в систему, используя «admin / admin» для своих учетных данных.

Чтобы переключиться на Okta по умолчанию, сначала необходимо создать приложение OIDC. Если у вас нет учетной записи Okta Developer, получите ее сегодня !

Войдите в свою учетную запись Okta Developer и выберите « Приложения» > « Добавить приложение» . Нажмите Web и нажмите кнопку Next . Присвойте приложению имя, которое вы запомните, укажите http://localhost:8080 в качестве базового URI и следующие в качестве URI перенаправления входа в систему и URI перенаправления выхода из системы .

Нажмите « Готово», и вы увидите идентификатор клиента и секрет клиента на следующем экране. Отредактируйте Общие настройки своего приложения и включите тип гранта «Неявный (Гибридный)» и отметьте два поля под ним. Неявный поток должен быть разрешен для вашей Ionic для аутентификации.

Скопируйте идентификатор клиента и секретный ключ в src/main/resources/config/application.yml , заменив значения по умолчанию security.oauth2.* .

security:
    basic:
        enabled: false
    oauth2:
        client:
            access-token-uri: https://{yourOktaDomain}.com/oauth2/default/v1/token
            user-authorization-uri: https://{yourOktaDomain}.com/oauth2/default/v1/authorize
            client-id: {yourClientId}
            client-secret: {yourClientSecret}
            client-authentication-scheme: form
            scope: openid profile email
        resource:
            filter-order: 3
            user-info-uri: https://{yourOktaDomain}.com/oauth2/default/v1/userinfo
            token-info-uri: https://{yourOktaDomain}.com/oauth2/default/v1/introspect
            prefer-token-info: false

На Okta перейдите в Пользователи > Группы . Создайте группы ROLE_ADMIN и ROLE_USER и добавьте в них свой аккаунт.

СОВЕТ: Если вы установили e2e-тесты с Protractor, вам нужно будет изменить их для использования учетной записи Okta при выполнении интеграционных тестов. Измените учетные данные по умолчанию в src/test/javascript/e2e/account/account.spec.ts и src/test/javascript/e2e/admin/administration.spec.ts . Более того, установите свои учетные данные в качестве переменных среды и прочитайте их в своих тестах Protractor.

Перейдите к API > Серверы авторизации , перейдите на вкладку Серверы авторизации и отредактируйте страницу по умолчанию. Перейдите на вкладку « Претензии » и « Добавить претензию» Назовите его «группы» или «роли» и включите его в идентификационный токен. Установите тип значения «Группы» и установите для фильтра регулярное выражение .* .

Перезапустите приложение, и вы будете перенаправлены в Okta при попытке войти.

Введите учетные данные, которые вы использовали для регистрации в своей учетной записи, и вы будете перенаправлены обратно в ваше приложение JHipster.

Генерация сущностей

Чтобы создать сущности для вашего blog.jh приложения, создайте файл blog.jh В нем используйте JHipster’s JHipster Domain Language (JDL) для определения вашей модели данных.

entity Blog {
    name String required minlength(3),
    handle String required minlength(2)
}
 
entity Entry {
    title String required,
    content TextBlob required,
    date ZonedDateTime required
}
 
entity Tag {
    name String required minlength(2)
}
 
relationship ManyToOne {
    Blog{user(login)} to User,
    Entry{blog(name)} to Blog
}
 
relationship ManyToMany {
    Entry{tag(name)} to Tag{entry}
}
 
paginate Entry, Tag with infinite-scroll

Запустите jhipster import-jdl blog.jh чтобы создать весь код, необходимый для управления данными вашего блога. Запустите запуск yarn start и убедитесь, что все ваши сущности существуют (и работают) в меню сущностей .

Разработайте мобильное приложение с Ionic

Начало работы с Ionic для JHipster похоже на JHipster. Вы можете установить Ionic CLI, Yeoman, сам модуль, запустить команду, а затем получить прибыль!

npm i -g generator-jhipster-ionic ionic yo
yo jhipster-ionic

Если у вас есть приложение blog в ~/blog , вы должны запустить эту команду из вашего домашнего каталога ( ~ ). Ionic for JHipster предложит вам указать местоположение вашего внутреннего приложения. Используйте имя по умолчанию, ionic4j для имени вашего приложения и выберите «Да», когда вас попросят интегрироваться с Cordova.

После завершения процесса установки вам нужно будет перезапустить приложение блога для изменений кода Java, внесенных Ionic для JHipster. Он добавляет конечную точку /api/auth-info для получения информации OIDC с сервера и устанавливает класс ResourceServerConfiguration для Spring Security.

Запустите следующие команды, чтобы запустить приложение Ionic.

cd ionic4j
ionic serve

Вы увидите экран с кнопкой входа в систему. Нажмите на него, и вы будете перенаправлены в Okta для аутентификации.

Теперь, когда вы знаете, что аутентификация работает, вы можете использовать генератор сущностей для генерации ионных страниц для вашей модели данных. Выполните следующие команды (в каталоге ~/ionic4j ), чтобы создать экраны для ваших сущностей.

yo jhipster-ionic:entity blog
yo jhipster-ionic:entity entry
yo jhipster-ionic:entity tag

Введите ../blog как путь к существующему приложению. Когда будет предложено восстановить сущности и перезаписать файлы, введите «Y».

Эмулятор iOS работает на порте 8080, поэтому при запуске в эмуляторе вам нужно будет изменить свой бэкэнд на другой порт. Измените порт 8080 на 8888 в следующих файлах:

  • backend/src/main/resources/config/application-dev.yml
  • ionic4j/src/providers/api/api.ts

ПРИМЕЧАНИЕ. Вам также необходимо добавить http://localhost:8888/login в качестве действительного URI перенаправления в консоли разработчика Okta.

Перезапустите приложение блога, затем запустите приложение Ionic с помощью ionic cordova emulate ios . Вы сможете войти в свое приложение Ionic, нажать « Сущности» и просмотреть список блогов.

Добавьте блог в приложение JHipster по адресу http: // localhost: 8888 .

Чтобы увидеть эту новую запись в вашем приложении Ionic, потяните мышкой вниз, чтобы имитировать жест «подтянуть-обновить» на телефоне. Посмотри — все работает!

Вы можете попробовать добавить вторую запись, нажав на знак + в правом верхнем углу. Если при нажатии на поле клавиатура не отображается, перейдите к « Оборудование» > « Клавиатура» > « Переключить программную клавиатуру» .

Почему ионный вместо PWA?

Я надеюсь, вам понравился этот тур Ionic для JHipster. Поскольку JHipster поддерживает прогрессивные веб-приложения (PWA), вы можете спросить себя, почему Ionic вместо PWA?

Первая версия 21-Points Health, которую я написал с JHipster 2.x, была болезненной для использования на мобильном устройстве, в основном из-за того, что она не помнила мою поддержку. 4-х точечная версия 21-Points Health лучше, но все же не очень хороша. Если бы поддержка PWA была лучше на iPhone (и это будет в ближайшее время !), Я мог бы думать иначе. В то же время мне нравится, что Ionic предоставляет пользовательский интерфейс, похожий на нативное приложение, и его анимации и такие вещи, как pull-to-refresh, трудно превзойти.

Я хочу разработать лучший пользовательский опыт . Нативные приложения трудно распространять, но они все еще работают лучше, чем PWA (на iOS). Прелесть того, как Ionic интегрируется с JHipster, в том, что вы можете иметь и то, и другое! Вы можете превратить ваше приложение JHipster в PWA (инструкции есть в README вашего приложения) и распространять мобильное приложение в магазине приложений. Если вы наберете немного аналитики, вы сможете увидеть, какая из них получает больше пользы, и определить для себя лучшего клиента.

Узнайте больше о Ionic и JHipster

Я написал кое-что о JHipster и Ionic в этом блоге. Если вы хотите узнать, как развернуть приложение Ionic на мобильном устройстве, я рекомендую прочитать раздел Учебное пособие по развертыванию на мобильном устройстве : разработка мобильного приложения с использованием Ionic и Spring Boot . Я показал, как добавить аутентификацию OIDC в ​​приложение Ionic, в разделе Построение приложения Ionic с аутентификацией пользователя .

Вы можете найти исходный код приложения, разработанного в этом посте, по адресу https://github.com/oktadeveloper/okta-ionic-jhipster-example .

См. Следующие посты для получения информации о создании микросервисов с помощью JHipster и для получения дополнительной информации о его поддержке OIDC.

Дайте @oktadev подписку в Твиттере, если вам понравился этот урок. Если у вас есть какие-либо вопросы, пожалуйста, оставьте комментарий или оставьте свой вопрос в Stack Overflow с тегом jhipster .

«Я люблю писать код аутентификации и авторизации». Нет Java-разработчика. Надоело строить одни и те же экраны входа снова и снова? Попробуйте API Okta для размещенной аутентификации, авторизации и многофакторной аутентификации.

Использование Ionic for JHipster для создания мобильных приложений с аутентификацией OIDC было первоначально опубликовано в блоге разработчиков Okta 30 января 2018 года.