«1. Обзор

Okta предоставляет такие функции, как аутентификация, авторизация и вход через социальные сети для веб-сервисов, мобильных сервисов или API-сервисов. Кроме того, он имеет надежную поддержку Spring Framework, что делает интеграцию довольно простой.

Теперь, когда Stormpath объединил свои усилия с Okta, чтобы предоставить разработчикам улучшенные Identity API, теперь это популярный способ включить аутентификацию в веб-приложении.

В этом руководстве мы рассмотрим Spring Security с Okta вместе с минималистичной настройкой учетной записи разработчика Okta.

2. Настройка Окты

2.1. Регистрация учетной записи разработчика

Во-первых, мы зарегистрируем бесплатную учетную запись разработчика Okta, которая предоставляет доступ до 1000 активных пользователей в месяц. Однако мы можем пропустить этот раздел, если он у нас уже есть:

2.2. Панель инструментов

После входа в учетную запись разработчика Okta мы попадаем на экран панели инструментов, который информирует нас о количестве пользователей, аутентификациях и неудачных попытках входа.

Кроме того, он также показывает подробные записи журнала системы:

Кроме того, мы отметим URL-адрес организации в правом верхнем углу панели инструментов, необходимый для установки Okta в нашем приложении Spring Boot, которое мы создадим позже.

2.3. Создайте новое приложение

Затем давайте создадим новое приложение с помощью меню «Приложения», чтобы создать приложение OpenID Connect (OIDC) для Spring Boot.

Далее мы выберем веб-платформу из доступных вариантов, таких как «Нативное», «Одностраничное приложение» и «Сервис»:

2.4. Настройки приложения

Далее давайте настроим несколько параметров приложения, таких как базовые URI и URI перенаправления входа, указывающие на наше приложение:

Также не забудьте отметить Код авторизации для разрешенного типа гранта, необходимого для включения аутентификации OAuth2 для Интернета. применение.

2.5. Учетные данные клиента

Затем мы получим значения для идентификатора клиента и секрета клиента, связанные с нашим приложением:

Держите эти учетные данные под рукой, поскольку они необходимы для установки Okta.

3. Настройка приложения Spring Boot

Теперь, когда наша учетная запись разработчика Okta готова с необходимыми конфигурациями, мы готовы интегрировать поддержку безопасности Okta в приложение Spring Boot.

3.1. Maven

Во-первых, давайте добавим последнюю зависимость Maven okta-spring-boot-starter в наш pom.xml:

3.2. Gradle

<dependency>
    <groupId>com.okta.spring</groupId>
    <artifactId>okta-spring-boot-starter</artifactId>
    <version>1.4.0</version>
</dependency>

Точно так же при использовании Gradle мы можем добавить зависимость okta-spring-boot-starter в build.gradle:

3.3. application.properties

compile 'com.okta.spring:okta-spring-boot-starter:1.4.0'

Затем мы настроим свойства Okta oauth2 в application.properties:

Здесь мы можем использовать сервер авторизации по умолчанию (если он недоступен) для URL-адреса эмитента, который указывает на { orgURL}/oauth2/по умолчанию.

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

Кроме того, мы можем создать новый сервер авторизации в учетной записи разработчика Okta, используя меню API:

Затем мы добавим идентификатор клиента и секрет клиента нашего приложения Okta, созданного в предыдущем разделе.

Наконец, мы настроили тот же URI-адрес перенаправления, который задается в настройках приложения.

4. HomeController

После этого давайте создадим класс HomeController:

Здесь мы добавили домашний метод с сопоставлением Base Uri (/), настроенным в настройках приложения.

@RestController
public class HomeController {
    @GetMapping("/")
    public String home(@AuthenticationPrincipal OidcUser user) {
        return "Welcome, "+ user.getFullName() + "!";
    }
}

Кроме того, аргумент домашнего метода является экземпляром класса OidcUser, предоставляемого Spring Security для доступа к информации о пользователе.

Вот оно! Наше приложение Spring Boot готово с поддержкой безопасности Okta. Давайте запустим наше приложение с помощью команды Maven:

При доступе к приложению на локальном хосте: 8080 мы увидим страницу входа по умолчанию, предоставленную Okta:

mvn spring-boot:run

После входа в систему с использованием учетных данных зарегистрированного пользователя, появится приветственное сообщение с полным именем пользователя:

Кроме того, мы найдем ссылку «Зарегистрироваться» в нижней части экрана входа по умолчанию для самостоятельной регистрации.

5. Регистрация

5.1. Самостоятельная регистрация

Впервые мы можем создать учетную запись Okta, используя ссылку «Зарегистрироваться», а затем предоставив такую ​​информацию, как адрес электронной почты, имя и фамилия:

5.2. Создайте пользователя

Или мы можем создать нового пользователя из меню «Пользователи» в учетной записи разработчика Okta:

«5.3. Настройки самостоятельной регистрации

Кроме того, параметры регистрации и регистрации можно настроить в меню «Пользователи» в учетной записи разработчика Okta:

6. Okta Spring SDK

Теперь, когда мы увидели интеграцию безопасности Okta в приложение Spring Boot, давайте взаимодействовать с API управления Okta в том же приложении.

Во-первых, мы должны создать токен, используя меню API в учетной записи разработчика Okta:

Обязательно запишите токен, так как он отображается только один раз после создания. Затем он будет сохранен как хэш для нашей защиты.

6.1. Настройка

Затем давайте добавим последнюю зависимость okta-spring-sdk Maven в наш pom.xml:

6.2. application.properties

<dependency>
    <groupId>com.okta.spring</groupId>
    <artifactId>okta-spring-sdk</artifactId>
    <version>1.4.0</version>
</dependency>

Далее мы добавим несколько основных свойств клиента Okta:

Здесь мы добавили токен, указанный в предыдущем разделе.

okta.client.orgUrl=https://dev-example123.okta.com
okta.client.token=00TVXDNx1e2FgvxP4jLlONbPMzrBDLwESSf9hZSvMI123

6.3. AdminController

Наконец, давайте создадим AdminController, внедренный вместе с экземпляром Client:

Вот и все! Мы готовы вызывать методы экземпляра Client для выполнения запросов к API Okta.

@RestController
public class AdminController {
    @Autowired
    public Client client;
}

6.4. Список пользователей

Давайте создадим метод getUsers для получения списка всех пользователей в нашей организации, используя метод listUsers, который возвращает объект UserList:

После этого мы можем получить доступ к localhost:8080/users для получения ответ JSON, содержащий всех пользователей:

public class AdminController {
    // ...

    @GetMapping("/users") 
    public UserList getUsers() { 
        return client.listUsers(); 
    }
}

6.5. Поиск пользователя

{
    "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,
    // ...
}

Точно так же мы можем фильтровать пользователей, используя имя, фамилию или адрес электронной почты в качестве параметров запроса:

Давайте найдем пользователя по электронной почте, используя localhost:8080/[email protected]:

@GetMapping("/user")
public UserList searchUserByEmail(@RequestParam String query) {
    return client.listUsers(query, null, null, null, null);
}

~ ~~ 6.6. Создать пользователя

{
    "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]",
                    // ...
                },
                // ...
            }
        ]
    },
    // ...
}

Кроме того, мы можем создать нового пользователя, используя метод экземпляра интерфейса UserBuilder:

Итак, давайте получим доступ к localhost:8080/createUser и проверим данные нового пользователя:

@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;
}

Точно так же мы можем выполнять ряд операций, таких как вывод списка всех приложений, создание приложения, вывод списка всех групп и создание группы.

{
    "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 Security с Okta.

Во-первых, мы настроили учетную запись разработчика Okta с необходимыми конфигурациями. Затем мы создали приложение Spring Boot и настроили application.properties для интеграции Spring Security с Okta.

Затем мы интегрировали Okta Spring SDK для управления Okta API. Наконец, мы рассмотрели такие функции, как список всех пользователей, поиск пользователя и создание пользователя.

Как обычно, все реализации кода доступны на GitHub.

«