Автор оригинала: Anshul Bansal.
1. Обзор
Okta предоставляет такие функции, как аутентификация, авторизация и социальный логин для веб -, мобильных или API-сервисов. Кроме того, он имеет надежную поддержку Spring Framework , чтобы сделать интеграцию довольно простой.
Теперь , когда Stormpath объединил усилия с Okta, чтобы обеспечить лучшие API идентификации для разработчиков , это теперь популярный способ включить аутентификацию в веб-приложении.
В этом уроке мы рассмотрим Spring Security с помощью Okta, а также минималистичную настройку учетной записи разработчика Okta.
2. Настройка Okta
2.1. Регистрация Учетной Записи Разработчика
Во-первых, мы подпишемся на бесплатную учетную запись разработчика Okta , которая предоставляет доступ до 1 тыс. активных пользователей в месяц . Однако мы можем пропустить этот раздел, если он у нас уже есть:
2.2. Приборная панель
После входа в учетную запись разработчика Okta мы попадем на экран панели мониторинга, который информирует нас о количестве пользователей, аутентификациях и неудачных входах в систему.
Кроме того, он также показывает подробные записи журнала системы:
Далее мы отметим URL-адрес Org в правом верхнем углу панели мониторинга, необходимый для настройки Okta в нашем приложении Spring Boot , которое мы создадим позже.
2.3. Создание нового приложения
Затем давайте создадим новое приложение, используя меню Приложения, чтобы создать приложение OpenID Connect (OIDC) для Spring Boot .
Далее мы выберем Web платформу из доступных вариантов, таких как Native , Single-Page App и Service :
2.4. Настройки приложения
Далее давайте настроим несколько параметров приложения, таких как Базовые URL-адреса и URI перенаправления входа , указывающие на наше приложение:
Кроме того, не забудьте отметить Код авторизации для типа гранта разрешено , требуется включить Аутентификация OAuth2 для веб-приложения.
2.5. Учетные данные Клиента
Затем мы получим значения Client ID и Client secret , связанные с нашим приложением:
Пожалуйста, держите эти учетные данные под рукой, потому что они необходимы для настройки Okta.
3. Настройка приложения Spring Boot
Теперь, когда наша учетная запись разработчика Okta готова с необходимыми конфигурациями, мы готовы интегрировать поддержку безопасности Okta в приложение Spring Boot.
3.1. Maven
Во-первых, давайте добавим последнюю okta-spring-boot-starter Maven зависимость к вашему pom.xml :
com.okta.spring okta-spring-boot-starter 1.4.0
3.2. Gradle
Аналогично, при использовании Gradle мы можем добавить зависимость okta-spring-boot-starter в build.gradle :
compile 'com.okta.spring:okta-spring-boot-starter:1.4.0'
3.3. применение.свойства
Затем мы настроим свойства Okta oauth2 в файле application.properties :
okta.oauth2.issuer=https://dev-example123.okta.com/oauth2/default okta.oauth2.client-id=1230oaa4yncmaxaQ90ccJwl4x6 okta.oauth2.client-secret=hjiyblEzgT0ItY91Ywcdzwa78oNhtrYqNklQ5vLzvruT123 okta.oauth2.redirect-uri=/authorization-code/callback
Здесь мы можем использовать default authorization server (если он недоступен) для issuer URL , который указывает на {org URL}/oauth2/default .
Кроме того, мы можем создать новый сервер авторизации в учетной записи разработчика Okta с помощью меню API :
Затем мы добавим ClientID и Client secret нашего приложения Okta, которое было сгенерировано в предыдущем разделе.
Наконец, мы настроили тот же самый redirect-uri , который задается в настройках приложения.
4. Домашний контролер
После этого давайте создадим класс HomeController :
@RestController public class HomeController { @GetMapping("/") public String home(@AuthenticationPrincipal OidcUser user) { return "Welcome, "+ user.getFullName() + "!"; } }
Здесь мы добавили метод home с отображением Base Uri (/), настроенным в настройках приложения.
Кроме того, аргумент метода home является экземпляром класса OidcUser , предоставляемого Spring Security для доступа к пользовательской информации .
Вот оно! Наше приложение Spring Boot готово с поддержкой безопасности Okta. Давайте запустим наше приложение с помощью команды Maven:
mvn spring-boot:run
При доступе к приложению по адресу localhost:8080 , мы увидим страницу входа по умолчанию, предоставленную Okta:
После входа в систему с использованием учетных данных зарегистрированного пользователя будет показано приветственное сообщение с полным именем пользователя:
Кроме того, мы найдем ссылку “Зарегистрироваться” в нижней части экрана входа по умолчанию для самостоятельной регистрации.
5. Зарегистрируйтесь
5.1. Самостоятельная регистрация
Впервые мы можем создать учетную запись Okta, используя ссылку “Зарегистрироваться”, а затем предоставить такую информацию, как адрес электронной почты, имя и фамилия:
5.2. Создание Пользователя
Или мы можем создать нового пользователя из меню Users в учетной записи разработчика Okta:
5.3. Настройки регистрации Самообслуживания
Кроме того, параметры регистрации и регистрации можно настроить в меню Users учетной записи разработчика Okta:
6. Okta Spring SDK
Теперь, когда мы увидели интеграцию безопасности Okta в приложении Spring Boot, давайте взаимодействовать с API управления Okta в том же приложении.
Во-первых, мы должны создать Токен с помощью меню API в учетной записи разработчика Okta:
Обязательно запишите Токен , так как он отображается только один раз после генерации . Затем он будет сохранен как хэш для нашей защиты.
6.1. Настройка
Затем давайте добавим последнюю okta-spring-sdk Maven зависимость к вашему pom.xml :
com.okta.spring okta-spring-sdk 1.4.0
6.2. применение.свойства
Далее мы добавим несколько основных свойств клиента Okta:
okta.client.orgUrl=https://dev-example123.okta.com okta.client.token=00TVXDNx1e2FgvxP4jLlONbPMzrBDLwESSf9hZSvMI123
Здесь мы добавили маркер, отмеченный в предыдущем разделе.
6.3. АдминКонтроллер
Наконец, давайте создадим Admin Controller , введенный вместе с экземпляром Client :
@RestController public class AdminController { @Autowired public Client client; }
Вот оно! Мы готовы вызывать методы на экземпляре Client для выполнения запросов к API Okta.
6.4. Список Пользователей
Давайте создадим метод getUsers для получения списка всех пользователей в нашей организации, используя метод ListUsers , который возвращает объект UserList :
public class AdminController { // ... @GetMapping("/users") public UserList getUsers() { return client.listUsers(); } }
После этого мы можем получить доступ к localhost:8080/users , чтобы получить ответ JSON, содержащий всех пользователей:
{ "dirty":false, "propertyDescriptors":{ "items":{ "name":"items", "type":"com.okta.sdk.resource.user.User" } }, "resourceHref":"/api/v1/users", "currentPage":{ "items":[ { "id":"00uanxiv7naevaEL14x6", "profile":{ "firstName":"Anshul", "lastName":"Bansal", "email":"[email protected]", // ... }, // ... }, { "id":"00uag6vugXMeBmXky4x6", "profile":{ "firstName":"Ansh", "lastName":"Bans", "email":"[email protected]", // ... }, // ... } ] }, "empty":false, // ... }
6.5. Поиск Пользователя
Аналогично, мы можем фильтровать пользователей, используя имя , фамилию или адрес электронной почты в качестве параметров запроса :
@GetMapping("/user") public UserList searchUserByEmail(@RequestParam String query) { return client.listUsers(query, null, null, null, null); }
Давайте искать пользователя по email using localhost:8080/|/[email protected] :
{ "dirty":false, "propertyDescriptors":{ "items":{ "name":"items", "type":"com.okta.sdk.resource.user.User" } }, "resourceHref":"/api/v1/users?q=ansh%40bans.com", "currentPage":{ "items":[ { "id":"00uag6vugXMeBmXky4x6", "profile":{ "firstName":"Ansh", "lastName":"Bans", "email":"[email protected]", // ... }, // ... } ] }, // ... }
6.6. Создание Пользователя
Кроме того, мы можем создать нового пользователя с помощью метода instance интерфейса User Builder :
@GetMapping("/createUser") public User createUser() { char[] tempPassword = {'P','a','$','$','w','0','r','d'}; User user = UserBuilder.instance() .setEmail("[email protected]") .setFirstName("Norman") .setLastName("Lewis") .setPassword(tempPassword) .setActive(true) .buildAndCreate(client); return user; }
Итак, давайте зайдем в localhost:8080/create User и проверим данные нового пользователя:
{ "id": "00uauveccPIYxQKUf4x6", "profile": { "firstName": "Norman", "lastName": "Lewis", "email": "[email protected]" }, "credentials": { "password": {}, "emails": [ { "value": "[email protected]", "status": "VERIFIED", "type": "PRIMARY" } ], // ... }, "_links": { "resetPassword": { "href": "https://dev-example123.okta.com/api/v1/users/00uauveccPIYxQKUf4x6/lifecycle/reset_password", "method": "POST" }, // ... } }
Аналогично, мы можем выполнить ряд операций, таких как перечисление всех приложений, создание приложения, перечисление всех групп и создание группы .
7. Заключение
В этом кратком уроке мы изучили безопасность Spring с помощью Okta.
Во-первых, мы создали учетную запись разработчика Okta с необходимыми конфигурациями. Затем мы создали приложение Spring Boot и настроили application.properties для интеграции Spring Security с Okta.
Затем мы интегрировали Okta Spring SDK для управления Okta API. Наконец, мы рассмотрели такие функции, как перечисление всех пользователей, поиск пользователя и создание пользователя.
Как обычно, все реализации кода доступны на GitHub .