Spring Boot OAuth2 - GoogleApi - Konnte nicht erhalten Benutzer-Informationen aus dem token
Arbeite ich an einem Projekt, die Anforderungen für Gmail-Authentifizierung und auch die kann verlängert werden.
Ich war nach diesem tutorial hier hatte Beispiele für Facebook und GitHub-Authentifizierung. Also versuchte ich für Gmail und ich bin immer diese Fehlermeldung, die ich nicht lösen konnte und immer neue Ausnahmen, wenn Sie versuchen zu beheben. Freundlich, helfen Sie mir heraus, wie ich glaube, das ist der Punkt, wo der code am wenigsten betroffen durch meine Ergänzungen. Mit so viel von der config und den code, es funktioniert für github und fb, aber nicht für google.
SocialApplication.java
@SpringBootApplication
@RestController
@EnableOAuth2Client
@EnableAuthorizationServer
@Order(6)
public class SocialApplication extends WebSecurityConfigurerAdapter {
@Autowired
OAuth2ClientContext oauth2ClientContext;
@RequestMapping({ "/user", "/me" })
public Map<String, String> user(Principal principal) {
Map<String, String> map = new LinkedHashMap<>();
map.put("name", principal.getName());
return map;
}
@Override
protected void configure(HttpSecurity http) throws Exception {
//@formatter:off
http.antMatcher("/**").authorizeRequests().antMatchers("/", "/login**", "/webjars/**").permitAll().anyRequest()
.authenticated().and().exceptionHandling()
.authenticationEntryPoint(new LoginUrlAuthenticationEntryPoint("/")).and().logout()
.logoutSuccessUrl("/").permitAll().and().csrf()
.csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse()).and()
.addFilterBefore(ssoFilter(), BasicAuthenticationFilter.class);
//@formatter:on
}
@Configuration
@EnableResourceServer
protected static class ResourceServerConfiguration extends ResourceServerConfigurerAdapter {
@Override
public void configure(HttpSecurity http) throws Exception {
//@formatter:off
http.antMatcher("/me").authorizeRequests().anyRequest().authenticated();
//@formatter:on
}
}
public static void main(String[] args) {
SpringApplication.run(SocialApplication.class, args);
}
@Bean
public FilterRegistrationBean oauth2ClientFilterRegistration(OAuth2ClientContextFilter filter) {
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(filter);
registration.setOrder(-100);
return registration;
}
@Bean
@ConfigurationProperties("github")
ClientResources github() {
return new ClientResources();
}
@Bean
@ConfigurationProperties("facebook")
ClientResources facebook() {
return new ClientResources();
}
**@Bean
@ConfigurationProperties("gmail")
ClientResources gmail(){return new ClientResources();}**
private Filter ssoFilter() {
CompositeFilter filter = new CompositeFilter();
List<Filter> filters = new ArrayList<>();
filters.add(ssoFilter(facebook(), "/login/facebook"));
filters.add(ssoFilter(github(), "/login/github"));
**filters.add(ssoFilter(gmail(), "/login/gmail"));**
filter.setFilters(filters);
return filter;
}
private Filter ssoFilter(ClientResources client, String path) {
OAuth2ClientAuthenticationProcessingFilter oAuth2ClientAuthenticationFilter = new OAuth2ClientAuthenticationProcessingFilter(
path);
OAuth2RestTemplate oAuth2RestTemplate = new OAuth2RestTemplate(client.getClient(), oauth2ClientContext);
oAuth2ClientAuthenticationFilter.setRestTemplate(oAuth2RestTemplate);
UserInfoTokenServices tokenServices = new UserInfoTokenServices(client.getResource().getUserInfoUri(),
client.getClient().getClientId());
tokenServices.setRestTemplate(oAuth2RestTemplate);
oAuth2ClientAuthenticationFilter.setTokenServices(tokenServices);
return oAuth2ClientAuthenticationFilter;
}
}
class ClientResources {
private OAuth2ProtectedResourceDetails client = new AuthorizationCodeResourceDetails();
private ResourceServerProperties resource = new ResourceServerProperties();
public OAuth2ProtectedResourceDetails getClient() {
return client;
}
public ResourceServerProperties getResource() {
return resource;
}
}
index.html
<div>
With Facebook: <a href="/login/facebook">click here</a>
</div>
<div>
With Github: <a href="/login/github">click here</a>
</div>
**<div>
With Gmail: <a href="/login/gmail">click here</a>
</div>**
Anwendung.yml //übersprungen, die Inhalte für github und fb um Platz zu sparen
gmail:
client:
client_id: 7xxxxxxxx-1spjexxxxxxxc.apps.googleusercontent.com
scope: https://www.googleapis.com/auth/userinfo.profile
client_secret: Xxxxxxx-I*****zx
userAuthorizationUri: https://accounts.google.com/o/oauth2/auth
accessTokenUri: https://accounts.google.com/o/oauth2/token
auth_provider_x509_cert_url:https://www.googleapis.com/oauth2/v1/certs
LOG
org.springframework.Sicherheit.die Authentifizierung.BadCredentialsException:
Konnte nicht erhalten Benutzer-Informationen aus dem token an
org.springframework.security.oauth2.client.filter.OAuth2ClientAuthenticationProcessingfilter.attemptAuthentication(OAuth2ClientAuthenticationProcessingfilter.java:122)
~[spring-security-oauth2-2.0.10.RELEASE.jar:na] at
org.springframework.security.web.authentication.AbstractAuthenticationProcessingfilter.doFilter(AbstractAuthenticationProcessingfilter.java:212)
[spring-security-web-4.1.1.RELEASE.jar:4.1.1.RELEASE]
org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:112)
[spring-web-4.3.2.RELEASE.jar:4.3.2.RELEASE]
org.springframework.security.web.authentication.AbstractAuthenticationProcessingfilter.doFilter(AbstractAuthenticationProcessingfilter.java:200)
[spring-security-web-4.1.1.RELEASE.jar:4.1.1.RELEASE]
org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:112)
[spring-web-4.3.2.RELEASE.jar:4.3.2.RELEASE]
org.springframework.security.web.authentication.AbstractAuthenticationProcessingfilter.doFilter(AbstractAuthenticationProcessingfilter.java:200)
[spring-security-web-4.1.1.RELEASE.jar:4.1.1.RELEASE]
org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:112)
[spring-web-4.3.2.RELEASE.jar:4.3.2.RELEASE]
org.springframework.web.filter.CompositeFilter.doFilter(CompositeFilter.java:73)
[spring-web-4.3.2.RELEASE.jar:4.3.2.RELEASE]**Verursacht durch:
org.springframework.Sicherheit.oauth2.common.Ausnahmen.InvalidTokenException:
ya***********dCCnRbsve3
bei
org.springframework.boot.autoconfigure.security.oauth2.resource.UserInfoTokenServices.loadAuthentication(UserInfoTokenServices.java:91)
~[spring-boot-autoconfigure-1.4.0.RELEASE.jar:1.4.0.RELEASE]
org.springframework.security.oauth2.client.filter.OAuth2ClientAuthenticationProcessingfilter.attemptAuthentication(OAuth2ClientAuthenticationProcessingfilter.java:112)
~[spring-security-oauth2-2.0.10.RELEASE.jar:na] ... 66 common frames
ausgelassen
Und auf die Google API Console.
Redirect-URL habe ich angegeben : localhost:8080/login/gmail
InformationsquelleAutor balboa_21 | 2016-08-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
In Ihrer Anwendung.yml confirguration, konnte ich nicht finden die userinfo-url definiert?
Ich habe die folgende google-config für mich arbeiten:
InformationsquelleAutor Amit Rangra