Я пытаюсь создать проект 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