Статьи

Защитите свое веб-приложение Spring Boot с помощью единого входа в Okta

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

С помощью SpringBoot и Okta вы можете раскрутить REST-сервер корпоративного качества с полным управлением идентификацией и авторизацией пользователей менее чем за 20 минут. Spring Boot и его начальные пакеты поставляют готовый к работе сервер Tomcat, а Okta защищает ваши API с помощью OAuth.

Этот учебник проведет вас через весь процесс. Как только вы подключите Okta к сети, легко добавить полнофункциональную клиентскую аутентификацию и администрирование пользователей с помощью всего лишь нескольких строк кода и конфигурации! Также в этом руководстве я покажу вам, как ваш защищенный сервер Spring Boot сможет обслуживать веб-контент или функционировать в качестве внутреннего API, но только для пользователей, которые зарегистрировались у вас. Готовы? Поехали!

Начни с Spring Boot и Okta

Переход с нуля на защищенный веб-сервер не происходит мгновенно. Для завершения этого проекта вы:

  • Загрузите новый стартовый проект Spring Boot, используя Spring Initializr
  • Создайте новую учетную запись Okta и получите доступ к панели администратора.
  • Добавьте несколько строк кода и конфигурации
  • Смотрите Единый вход в действии на вашем новом сервере!

Почему весна?

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

Spring Boot — это подпроект Spring, который нацелен на то, чтобы сделать его очень быстрым и простым для загрузки нового приложения Spring. Одна из его основных привлекательных сторон заключается в том, что он не требует дурачиться с грязными файлами конфигурации (распространенная жалоба на экосистему ранней весны). Как мы скоро увидим, использование нескольких простых аннотаций и зависимостей Maven перенесет нас с нуля на защищенный веб-сервер за считанные минуты.

Загрузите и инициализируйте новый проект Spring Boot

Spring предлагает инструмент Spring Initializr, который позволяет одним щелчком мыши создать и загрузить ZIP-файл, содержащий новый проект Spring Boot. Отправляйтесь туда и создайте новый проект, который включает в себя веб-сайты и безопасность . Я оставил артефакт по умолчанию и группу нетронутыми и разархивировал файл demo.zip в моем домашнем каталоге. Это распаковало следующие файлы:

Те из вас, кто знаком с Maven , распознают файл pom.xml . Всего четыре маленьких зависимости извлекают огромное количество функциональности из Spring:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-test</artifactId>
    <scope>test</scope>
</dependency>

Прежде чем перейти к интересным вещам, убедитесь, что все кошерно, запустив сервер через:

./mvnw spring-boot:run

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

Tomcat started on port(s): 8080 (http)


Поскольку при создании проекта вы запрашивали пакет Spring Security Starter, сервер по умолчанию защищен с помощью обычной аутентификации . Это можно проверить, открыв браузер и посетив:

http://localhost:8080

Должно появиться диалоговое окно браузера с запросом вашего имени пользователя и пароля (которые вы еще не установили):

Вместо того, чтобы задавать жестко заданные имя пользователя и пароль на новом сервере, не лучше ли внезапно получить доступ к полноценному управлению сеансами OAuth, администрированию пользователей, статистике сайта и многому другому? Мы можем сделать это всего за несколько минут с Okta!

Добавьте OAuth-аутентификацию на ваш сервер с помощью Okta

Теперь пришло время усовершенствовать ваш сервер с помощью управления пользователями, хранения и ротации ключей и учетных данных, обслуживания сервера OAuth, обработки забытых паролей и удобного административного интерфейса. Это звучит как большая работа! К счастью, это сделано для вас с помощью сервисов управления и авторизации Okta. Вы просто подключаете зависимости Okta к своему проекту Spring Boot, настраиваете несколько параметров безопасности, и вы получаете все это и пакет фишек всего за несколько простых шагов. Вот как.

Получите свои учетные данные Okta

Если вы новичок в Okta, вы можете зарегистрироваться здесь и получить бесплатный аккаунт разработчика. Вы получите приглашение по электронной почте с вашим именем пользователя (вашим адресом электронной почты) и временным паролем. Перейдите по ссылке, указанной в электронном письме, войдите в систему с использованием этих учетных данных и создайте свою учетную запись администратора впервые. Вам будет предложено создать новый пароль, и после завершения этой страницы вы найдете консоль разработчика Okta. Здесь есть что исследовать, поэтому, если вы хотите, не стесняйтесь сделать перерыв и осмотреться!

Когда вы будете готовы продолжить, перейдите на вкладку Приложения на панели инструментов Okta. Это должно выглядеть примерно так:

Нажмите зеленую кнопку « Добавить приложение» , и, поскольку вы создаете веб-сервер, выберите « Веб» (.NET, Java и т. Д.) В качестве типа приложения и нажмите « Далее» :

На следующей странице настроек есть одно значение по умолчанию для изменения. В поле URI переадресации входа в систему замените значение по умолчанию на:

http://localhost:8080/login

Затем нажмите Готово . Это приведет вас к домашней базе для вашего нового приложения. Здесь также есть множество функций, но сейчас вы захотите принять к сведению несколько фрагментов информации на дополнительной вкладке « Общие » главной вкладки приложения в панели управления. Первые два — это идентификатор клиента и секрет клиента, расположенные в нижней части страницы:

Держите их под рукой и держите их в безопасности! Вы будете использовать их на своем сервере Spring Boot для аутентификации в Okta.

Затем перейдите на вкладку API в верхней части панели инструментов и на этом экране запишите URI эмитента . Если вы этого не видите, убедитесь, что вы находитесь на вкладке Серверы авторизации . Это сервер авторизации OAuth Okta, с которым будет взаимодействовать ваш сервер.

Теперь, когда ваш идентификатор клиента, секрет клиента и URI эмитента где-то надежно спрятаны; пришло время подключить Okta к вашему серверу. Добавьте зависимости Okta и Spring OAuth вместе с другими в файле pom.xml :

<dependency>
    <groupId>com.okta.spring</groupId>
    <artifactId>okta-spring-boot-starter</artifactId>
    <version>0.2.0</version>
</dependency>
<dependency>
    <groupId>org.springframework.security.oauth</groupId>
    <artifactId>spring-security-oauth2</artifactId>
    <version>2.2.0.RELEASE</version>
</dependency>

Далее вы добавите три значения в: src/main/resources/application.properties

okta.oauth2.issuer=(your **Issuer URI**)
okta.oauth2.clientId=(your **Client ID**)
okta.oauth2.clientSecret=(your **Client Secret**)

Вот так:

okta.oauth2.issuer=https://dev-279161.oktapreview.com/oauth2/default
okta.oauth2.clientId=0oacqif7do3e0hD0h7
okta.oauth2.clientSecret=(your **Client Secret**)

Последнее, что нужно сделать перед тем, как пожинать все, что может предложить Okta, — используйте его на своем сервере! В этом сообщении цель состоит в том, чтобы добавить аутентификацию единого входа, чтобы только пользователи, которые зарегистрировались у вас, могли войти на ваш сервер и взаимодействовать с ним. Основной класс приложения должен сообщить клиентской библиотеке Okta о включении единого входа, и это делается путем добавления следующей аннотации к основному классу приложения по адресу: src/main/java/com/example/demo/DemoApplication.java

@EnableOAuth2Sso

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

@RestController

Okta предоставляет идентификатор пользователя вызывающей стороны через интерфейс java.security.Principal . По умолчанию это адрес электронной почты пользователя. Вы можете добавить обработчик запроса, который повторяет адрес электронной почты пользователя, например так:

@GetMapping("/")
public String echoTheUsersEmailAddress(Principal principal) {
   return "Hey there! Your email address is: " + principal.getName();
}

С новым импортом, аннотациями и обработчиком запросов основной DemoApplication.java должен выглядеть следующим образом:

package com.example.demo;
 
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.security.oauth2.client.EnableOAuth2Sso;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.security.Principal;
 
@RestController
@EnableOAuth2Sso
@SpringBootApplication
public class DemoApplication {
 
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
 
    @GetMapping("/")
    public String echoTheUsersEmailAddress(Principal principal) {
        return "Hey there! Your email address is: " + principal.getName();
    }
}

Когда вы перезапустите сервер с помощью ./mvnw spring-boot:run и зайдите в браузер на http://localhost:8080 , вы попадете на свой личный поддомен Okta для входа в систему:

Вы можете войти в систему, используя адрес электронной почты и пароль, которые вы указали при создании учетной записи Okta, поскольку вы были добавлены по умолчанию в качестве пользователя в приложении Okta «My Web App». Если вы не создали нового пользователя на панели администратора, это единственный пользователь, которому было предоставлено разрешение на доступ к вашему сайту.

После того, как вы вошли в систему, вы будете перенаправлены обратно на ваш сайт в качестве аутентифицированного пользователя, и вы увидите, что ваш адрес электронной почты возвращается вам!

Что дальше?

Теперь начинается настоящее веселье, когда вы создаете или подключаете новых пользователей к своему приложению! Потратьте некоторое время на эксперименты с различными уровнями разрешений. Изучите журналы аудита, чтобы увидеть, чем занимались ваши пользователи. Добавляйте пользователей в группы, настраивайте и управляйте сообщениями электронной почты и текстовых сообщений.

Хотите узнать больше? Проверьте эти другие ресурсы Java:

И если у вас есть вопросы по поводу этого или любого другого нашего контента (или просто хотите пообщаться!), Напишите нам на Twitter @OktaDev . Мы хотели бы услышать от вас!

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

Добавление единого входа в веб-приложение Spring Boot за 15 минут было впервые опубликовано в блоге разработчиков Okta 20 ноября 2017 года.