【发布时间】:2016-08-29 00:20:04
【问题描述】:
在我的项目中,我正在尝试使用 instagram 对用户进行身份验证。
该项目在 spring-boot 上使用 spring-security-oauth2 运行。
在身份验证阶段,我从 instagram code 收到,它被发送到 instagram 以检索 access_token。而不是access_token,我收到了错误的请求响应消息:“您必须提供client_id”。
WebSecurityConfig.class
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.antMatcher("/**")
.authorizeRequests()
.antMatchers("/", "/index**", "/login/**", "/webjars/**", "/js/**", "/css/**", "/images/**")
.permitAll()
.anyRequest()
.authenticated()
.and().exceptionHandling().authenticationEntryPoint(new LoginUrlAuthenticationEntryPoint("/"))
.and().logout().logoutSuccessUrl("/").permitAll()
.and().addFilterAfter(csrfHeaderFilter(), CsrfFilter.class)
.addFilterBefore(ssoFilter(instagram(), "/login"), BasicAuthenticationFilter.class);
}
@Bean
@ConfigurationProperties("instagram")
ClientResources instagram() {
return new ClientResources();
}
private Filter ssoFilter(ClientResources client, String path) {
OAuth2ClientAuthenticationProcessingFilter filter = new OAuth2ClientAuthenticationProcessingFilter(path) {
};
OAuth2RestTemplate filterTemplate = new OAuth2RestTemplate(client.getClient(), oauth2ClientContext);
filter.setRestTemplate(filterTemplate);
filter.setTokenServices(new UserInfoTokenServices(client.getResource().getUserInfoUri(),
client.getClient().getClientId()));
return filter;
}
application.properties
instagram.client.clientId=df5cc67d71e04b1b9a89ca9e1572a801
instagram.client.clientSecret=8da04f4072a54579ae4e334d5e865fa4
instagram.client.accessTokenUri=https://api.instagram.com/oauth/access_token
instagram.client.userAuthorizationUri=https://api.instagram.com/oauth/authorize
instagram.client.scope=basic, likes, comments, relationships
instagram.resource.userInfoUri=https://api.instagram.com/v1/users/self
Here 是 github 上的那个项目。用于教育目的的项目,所以这里开放了clientId和clientSecret。 感谢您提供有关如何提前解决该烦人异常的建议
【问题讨论】:
标签: spring-boot instagram spring-security-oauth2 oauth2