У меня проблема с ошибкой "Несанкционировано" в моем приложении.Я использую Spring Security и oauth2.Мои клиенты и пользователи хранятся в базе данных.Я получил ошибку 401 в PostMan, когда я начинаю использовать клиент из базы данных.Клиент сохраняет в базе данных, но все же у меня появляется ошибка, когда я хочу получить доступ к токену от localhost: 8080 / oauth / token.Ниже мой источник:
AuthorizationServerConfig:
открытый класс AuthorizationServerConfig расширяет AuthorizationServerConfigurerAdapter {
@Autowired
private AuthenticationManager authenticationManager;
@Autowired
private TokenStore tokenStore;
private CustomClientDetailsService customClientDetailsService;
@Bean
PasswordEncoder passwordEncoder() {
return PasswordEncoderFactories.createDelegatingPasswordEncoder();
}
@Override
public void configure(AuthorizationServerSecurityConfigurer security) throws Exception {
security.tokenKeyAccess("permitAll()")
.checkTokenAccess("isAuthenticated()");
}
@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
clients.withClientDetails(customClientDetailsService);
}
@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
endpoints
.tokenStore(tokenStore)
.authenticationManager(authenticationManager);
}
}
Это мой CustomClientDetails:
открытый класс CustomClientDetails реализует ClientDetails {
final static Logger log = LoggerFactory.getLogger(CustomClientDetailsService.class);
private static final long serialVersionUID = 6602529451366778198L;
private Clients clients;
public CustomClientDetails(final Clients clients){
this.clients = clients;
}
@Override
public String getClientId() {
return clients.getClientId();
}
@Override
public Set<String> getResourceIds() {
final Set<String> resourcesIds = new HashSet<String>();
resourcesIds.add(clients.getResourceIds());
return resourcesIds;
}
@Override
public boolean isSecretRequired() {
return true;
}
@Override
public String getClientSecret() {
return clients.getClientSecret();
}
@Override
public boolean isScoped() {
return true;
}
@Override
public Set<String> getScope() {
final Set<String> scopes = new HashSet<String>();
scopes.add(clients.getScope());
return scopes;
}
@Override
public Set<String> getAuthorizedGrantTypes() {
final Set<String> authorizedGrantTypes = new HashSet<String>();
authorizedGrantTypes.add(clients.getAuthorizedGrantTypes());
return authorizedGrantTypes;
}
@Override
public Set<String> getRegisteredRedirectUri() {
final Set<String> registeredRedirectUris = new HashSet<String>();
registeredRedirectUris.add(clients.getWebServerRedirectUri());
return registeredRedirectUris;
}
@Override
public Collection<GrantedAuthority> getAuthorities() {
final Set<GrantedAuthority> authorities = new HashSet<GrantedAuthority>();
authorities.add(new SimpleGrantedAuthority(clients.getAuthorities()));
return authorities;
}
@Override
public Integer getAccessTokenValiditySeconds() {
return clients.getAccessTokenValidity();
}
@Override
public Integer getRefreshTokenValiditySeconds() {
return clients.getRefreshTokenValidity();
}
@Override
public boolean isAutoApprove(String s) {
return false;
}
@Override
public Map<String, Object> getAdditionalInformation() {
final Set<String> additionalInformation = new HashSet<String>();
additionalInformation.add(clients.getAdditionalInformation());
return null;
}
Это пользовательский класс CustomClientDetailsService:
открытый класс CustomClientDetailsService реализует ClientDetailsService {
@Autowired
private ClientsRepository clientsRepository;
@Autowired
private CustomClientDetails customClientDetails;
@Override
public ClientDetails loadClientByClientId(String clientId) throws ClientRegistrationException {
Clients client = clientsRepository.findByClientId(clientId);
final CustomClientDetails customClientDetails = new CustomClientDetails(client);
return customClientDetails;
}
: ошибка 10 PostM*
{"timestamp": "2019-02-20T09: 32: 15.479 + 0000", "status": 401, "error": "Unauthorized", "message": "Unauthorized", "path": "/ oauth / token "}