Reputation: 179
I get token post request to http://localhost:8090/oauth/token with Headers: Basic Y2xpZW50OnF3ZXJ0eQ== (for username:client and password:qwerty) and params: username:user password:123 grant_type:password
{
"access_token": "6595cfb6-e79c-4110-adc1-eb5e0926bd74",
"token_type": "bearer",
"refresh_token": "2036efc5-b1a9-4d50-9fc8-4c0746737732",
"expires_in": 299,
"scope": "read write trust"
}
and in the next step I try to get access to localhost:8090/test/0 , but I get :
{
"timestamp": 1523824850474,
"status": 401,
"error": "Unauthorized",
"message": "Full authentication is required to access this resource",
"path": "/test/0"
}
I do not understand what I'm doing wrong in my AuthorizationServerConfig:
@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
clients.inMemory()
.withClient("client")
.secret("qwerty")
.authorizedGrantTypes("password", "refresh_token")
.authorities("ROLE_CLIENT", "ROLE_TRUSTED_CLIENT")
.scopes("read", "write", "trust")
.accessTokenValiditySeconds(300)
.refreshTokenValiditySeconds(3600);
}
@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) {
endpoints.tokenStore(tokenStore).userApprovalHandler(userApprovalHandler)
.authenticationManager(authenticationManager);
}
@Override
public void configure(AuthorizationServerSecurityConfigurer oauthServer) {
oauthServer.realm("REALM");
}
ResourceServer:
@Configuration
@EnableResourceServer
public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
@Override
public void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest().authenticated()
.and().exceptionHandling().accessDeniedHandler(new OAuth2AccessDeniedHandler());
}
}
And SecurityConfig:
@Autowired
private ClientDetailsService clientDetailsService;
@Autowired
public void globalUserDetails(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.withUser("admin").password("123").roles("ADMIN").and()
.withUser("user").password("123").roles("USER");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf().disable()
.authorizeRequests()
.anyRequest().authenticated()
.and()
.httpBasic()
.realmName("REALM");
}
@Override
@Bean
public AuthenticationManager authenticationManagerBean() throws Exception {
return super.authenticationManagerBean();
}
@Bean
public TokenStore tokenStore() {
return new InMemoryTokenStore();
}
@Bean
@Autowired
public TokenStoreUserApprovalHandler userApprovalHandler(TokenStore tokenStore){
TokenStoreUserApprovalHandler handler = new TokenStoreUserApprovalHandler();
handler.setTokenStore(tokenStore);
handler.setRequestFactory(new DefaultOAuth2RequestFactory(clientDetailsService));
handler.setClientDetailsService(clientDetailsService);
return handler;
}
@Bean
@Autowired
public ApprovalStore approvalStore(TokenStore tokenStore) {
TokenApprovalStore store = new TokenApprovalStore();
store.setTokenStore(tokenStore);
return store;
}
I don't understand why this does not work
Upvotes: 1
Views: 266
Reputation: 2634
Based on the error you're getting it appears that you are not using the access token correctly to make a request.
Add an Authorization
header and access token with bearer
perfix as its value.
Upvotes: 1