Несанкционированная ошибка oauth2 клиента из базы данных - PullRequest
0 голосов
/ 20 февраля 2019

У меня проблема с ошибкой "Несанкционировано" в моем приложении.Я использую 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 "}

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Вы должны предоставить client_id и client_secret в почтальоне, в разделе авторизации вы можете установить Basic Auth.enter image description here

В поле username введите свой client_id, а в password - client_secret.

0 голосов
/ 21 февраля 2019

«Unauthorized» в «/ oauth / token», вероятно, означает, что вы не указали HTTP Basic Auth учетные данные в заголовках запросов.Насколько я помню, эта конечная точка защищена по умолчанию, логин и пароль хранятся в сущности oauth_client_details.Найдите пару client_id + client_secret и предоставьте ее почтальону с настройками Авторизация-> Базовая аутентификация.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...