在我的项目中,我尝试使用instagram验证用户身份。
该项目使用 spring-security-oauth2 在 spring-boot 上运行。
在身份验证阶段,我从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。 感谢任何建议如何提前解决这个烦人的异常
答案 0 :(得分:-1)
在OAuth2中有多个流程,我们可以在其中执行身份验证授权。您选择的流程是授权代码流程。
在Authrorization Code流程中,授权服务器将授权代码返回给用户代理(浏览器)。浏览器然后将该代码发回资源服务器(在服务器上运行的Api代码)。然后,服务器将该代码与客户端ID和客户端密钥交换为access_token。
客户端ID和机密是保密的,因此当您在基于Javascript的应用程序中使用OAuth2时,建议使用隐式流程。在此流程中,authrorization服务器使用access_token而不是授权代码进行响应。
如果这有用,或者您有任何其他问题,请与我们联系。
谢谢你, 索马。