Аутентификация с помощью OAuth2 в Webflux Spring - PullRequest
0 голосов
/ 13 октября 2018

Я занимаюсь разработкой приложения, в котором я хочу иметь контроль доступа на основе ролей, к сожалению, я не нашел хорошего примера использования Spring WebFlux.Мой oauth2.client.provider - Okta.

Вот мой SecurityWebFilterChain:

    @Bean
    public SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http) {
        return http
                .authorizeExchange()
                .pathMatchers("/*").permitAll()
                .pathMatchers("/admin").hasRole("admins");
}

В этой статье Я обнаружил, что должен настроить сервер ресурсов.Дайте мне подсказку, как это сделать, пожалуйста.

1 Ответ

0 голосов
/ 13 октября 2018

Вам нужно будет использовать вехую версию 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, как указано в этом сообщении в блоге .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...