Вам нужно будет использовать вехую версию Spring Boot 2.1, чтобы это работало.M3 или выше должны сделать свое дело.Добавьте необходимые зависимости для поддержки OIDC Spring Security 5.1:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-oauth2-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-oauth2-jose</artifactId>
</dependency>
Затем создайте приложение Okta OIDC "Web" и скопируйте свои настройки в src/main/resources/application.yml
.
spring:
security:
oauth2:
client:
provider:
okta:
issuer-uri: https://dev-737523.oktapreview.com/oauth2/default
registration:
login:
okta:
client-id: {clientId}
client-secret: {clientSecret}
scope: openid email profile
Перезапустите приложение, перейдите на http://localhost:8080,, и вы будете перенаправлены на Okta для входа. Введите действительные учетные данные, и вы будете перенаправлены обратно в приложение после успешного входа в систему.в.
Чтобы ограничить доступ на основе ролей, вам необходимо создать группы для своих пользователей.
Создать группы ROLE_ADMIN и ROLE_USER ( Users > Группы > Добавить группу ) и добавить в них пользователей.Вы можете использовать учетную запись, с которой вы зарегистрировались, или создать нового пользователя ( Users > Add Person ).Перейдите на API > Серверы авторизации , перейдите на вкладку Серверы авторизации и отредактируйте вкладку по умолчанию.Откройте вкладку Претензии и Добавить претензию .Назовите его «группы» или «роли» и включите его в идентификационный токен.Установите тип значения «Группы» и установите для фильтра регулярное выражение «. *» (Чтобы включить их все).
Тогда вы сможете использовать что-то вроде:
@Bean
public SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http) {
return http
.authorizeExchange()
.pathMatchers("/*").permitAll()
.pathMatchers("/admin").hasAuthority("ROLE_ADMIN");
}
Вы также можете использовать @PreAuthorize
, как указано в этом сообщении в блоге .