Обработка обратного вызова OAuth2 в Spring Boot - PullRequest
1 голос
/ 23 апреля 2020

Я пытаюсь создать проект Spring Boot, требующий входа в OAuth2 SSO. У меня есть следующие зависимости Maven:

org.springframework.boot:spring-boot-starter-web
org.springframework.security:spring-security-oauth2-client
org.springframework.security:spring-security-config

Я использую HttpSecurity для принудительной аутентификации OAuth2 для приложения, используя следующее:

@EnableWebSecurity
@Order(101)
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
            .antMatcher("/api/auth/oauth2/callback").permitAll()
            .anyRequest().authenticated()
            .and()
            .oauth2Login();
    }

}

Теперь, что это делает: это видит, что пользователь не вошел в систему, перенаправляет его в систему единого входа и после того, как он вошел в систему, перенаправляет пользователя обратно в конечную точку /api/auth/oauth2/callback?code=...&state=.... Это все работает отлично. Тем не менее, я довольно новичок в Spring Boot, и я не понимаю, как я сохраняю тот факт, что пользователь теперь аутентифицирован (я знаю, что мне все еще нужно проверить обратный вызов, это не проблема).

Вот модель аутентификации, которую я хотел бы реализовать: я хочу сгенерировать ha sh в конечной точке обратного вызова и сохранить этот ha sh в памяти в приложении и в качестве cook ie в браузере пользователя. Затем в любых последующих запросах приложение считывало бы значение cook ie, находило строку в базе данных в памяти с ha sh и извлекало соответствующие пользовательские данные из строки базы данных.

Хороший пример этого я искал , однако во всех примерах OAuth2 на основе Spring Boot используется Github / Google OAuth, и кажется, что он обрабатывает много вещей под капотом (или возможно, я не понимаю их должным образом).

Буду признателен за любую помощь / руководство!

Если это поможет, вот мой файл application.yml:

spring:
  security:
    oauth2:
      client:
        registration:
          custom_sso_name:
            clientId: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
            clientSecret: SUPER_SECRET
            authorizationGrantType: authorization_code
            redirectUri: https://dev.localhost/api/auth/oauth2/callback
        provider:
          custom_sso_name:
            userInfoUri: https://sso.example.com/nidp/oauth/nam/userinfo
            authorizationUri: https://sso.example.com/nidp/oauth/nam/authz
            tokenUri: https://sso.example.com/nidp/oauth/nam/token
            preferTokenInfo: false
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...