Я хочу реализовать простое приложение, которое позволяет пользователям войти в систему с локальной учетной записью или зарегистрировать новую учетную запись или войти с помощью OAuth2 - например, Facebook. Для пользователей, которые выбрали Facebook, я хотел бы автоматически создать локальную учетную запись и войти в нее с этой учетной записью.
Насколько я понимаю, Spring Social - это dead (было бы очень полезно, если бы это было упомянуто на главной странице проекта, потому что это спасло бы усилия для таких людей, как я, которые инвестировали в изучение весеннего социального общения).
Другая вещь, которую я понимаю, заключается в том, что " OAuth2 и OID C теперь являются первоклассными гражданами в экосистемах Spring Boot и Spring Security ». Похоже, что правильный путь к go - это использование Spring Security 5 с его первоклассной поддержкой OAuth2!
Итак ... давайте go. My application.yaml
:
spring:
security:
oauth2:
client:
registration:
facebook:
client-id: senko
client-secret: topsecret
Конфигурация безопасности:
@Override
protected void configure(HttpSecurity http) throws Exception {
// for the ant pattern matcher syntax, please check:
// https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/util/AntPathMatcher.html
http
.formLogin()
.loginPage("/login")
.loginProcessingUrl("/login/authenticate")
.failureUrl("/login?param.error=bad_credentials")
.successForwardUrl("/home")
.and()
.logout()
.logoutUrl("/logout")
.deleteCookies("JSESSIONID").
and()
.authorizeRequests()
.antMatchers("/login**").permitAll()
.antMatchers("/**").authenticated().
and().
oauth2Login().
loginPage("/login");
}
@Override
public void configureGlobal(AuthenticationManagerBuilder auth)
throws Exception {
auth.userDetailsService(userDetailsService).passwordEncoder(
new BCryptPasswordEncoder());
}
Моя служба пользователя использует локальное хранилище с поддержкой MySQL. Краткая форма входа в систему (тимилеф):
Login:
<form id="signin" th:action="@{/login/authenticate}" method="post">
<input id="login" name="username" type="text" size="25"></input>
<input id="password" name="password" type="password" size="25"></input>
<button type="submit">Login In</button>
</form>
Or...:
<a th:href="@{/oauth2/authorization/facebook}">Sign in with Facebook</a>
Пока я могу войти с локальной учетной записью. Я также могу войти через Facebook. Здесь мне не хватает той части, где я должен создать учетную запись локального пользователя после успешного входа в Facebook. Как правильно это реализовать? Я совершенно невежественен. То, что я пробовал до сих пор, это поиск в Google и прочитать код OAuth2LoginAuthenticationProvider
. Будем благодарны за любую помощь.
ОБНОВЛЕНИЕ: я изучаю, является ли реализация AuthenticationSuccessHandler
правильным вариантом ...