Не могу получить доступ к OAuth2AuthenticationToken при использовании Google OAuth2 в Spring BootJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Не могу получить доступ к OAuth2AuthenticationToken при использовании Google OAuth2 в Spring Boot

Сообщение Anonymous »

Я пытаюсь внедрить вход с Google в моем приложении Spring Boot с помощью пользовательского дефолта по умолчанию . Аутентификация, кажется, проходит, но когда я добираюсь до конечной точки URL, я не могу получить oauth2authenticationToken (она нулевая, если поставить как аргумент метода), и когда я получаю аутентификацию из контекста безопасности, она возвращается как анонимная Как таковой:
< /p>

У меня добавлены эти зависимости: < /p>


org.springframework.boot
spring-boot-starter-security


org.springframework.security
spring-security-oauth2-client


org.springframework.security
spring-security-oauth2-jose

< /code>

Вот мой SecurityConfig: < /p>

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {

@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.mvcMatchers("/api/users/login").permitAll()
.requestMatchers(EndpointRequest.toAnyEndpoint()).authenticated()
.antMatchers("/api/users/login**","/callback/", "/webjars/**", "/error**").permitAll()
.antMatchers("/oauth_login", "/loginFailure", "/").permitAll()
.anyRequest().authenticated()
.and()
.oauth2Login()
.defaultSuccessUrl("/api/users/loginSuccess", true)
.failureUrl("/loginFailure");

http.csrf().disable();
http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
}
< /code>

И вот конечная точка успеха: < /p>


@RestController
@RequestMapping("/api/users")
@RequiredArgsConstructor
public class UserController {

private final OAuth2AuthorizedClientService authorizedClientService;

@GetMapping("/loginSuccess")
public String getLoginInfo(Model model, OAuth2AuthenticationToken authentication) {
OAuth2AuthorizedClient client = authorizedClientService
.loadAuthorizedClient(authentication.getAuthorizedClientRegistrationId(), authentication.getName());

String userInfoEndpointUri = client.getClientRegistration().getProviderDetails().getUserInfoEndpoint().getUri();

if (!StringUtils.isEmpty(userInfoEndpointUri)) {
HttpHeaders headers = new HttpHeaders();
headers.add(HttpHeaders.AUTHORIZATION, "Bearer " + client.getAccessToken().getTokenValue());
HttpEntity entity = new HttpEntity("", headers);

RestTemplate restTemplate = new RestTemplate();
ResponseEntity response = restTemplate.exchange(userInfoEndpointUri, HttpMethod.GET, entity, Map.class);
Map userAttributes = response.getBody();

model.addAttribute("name", userAttributes.get("name"));
}

return "loginSuccess";
}

}
< /code>

Правильно перенаправляется в конечную точку, но OAuth2AuthenticationToken < /code> является нулевой, и, как я уже говорил, аутентификация, проводимая в контексте безопасности, является анонимной. Где проблема не предоставлять надлежащие объекты аутентификации?


Подробнее здесь: https://stackoverflow.com/questions/584 ... pring-boot
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»