0

Я пытаюсь настроить сервер авторизации OAuth2 с помощью интеграции OAuth2 Spring и Spring Security.Spring Boot OAuth2 Authorization Server, Bad Credentials Response

Когда я пытаюсь пройти аутентификацию, я получаю код статуса HTTP 400 ответ: «Плохие учетные данные».

Здесь вы можете найти свой сервер авторизации и настройки веб-безопасности: https://gist.github.com/codecitizen/8d130469d83439f5fca86b1a84733aab

У меня есть собственная реализация для UserDetailsService и ClientDetailsService. Но они, похоже, правильно настроены. Когда я запускаю следующий тестовый пример:

  given(). 
        formParam("grant_type", "password"). 
        formParam("username", user.getUsername()). 
        formParam("password", password). 
        auth().basic(client.getClientId(), client.getClientSecret()). 
      when(). 
        post("/oauth/token"). 
      then().extract().asString(); 

используя RestAssurred, называются обе службы.

Событие незнакомца: Когда я устанавливаю точку разрыва в IntelliJ на этом выражении и оцениваю его, он возвращает правильный токен JWT, и аутентификация, похоже, работает. Когда я снова повторю метод теста и точно так же, я получаю: {"error":"invalid_grant","error_description":"Bad credentials"} этот ответ! Не меняя ничего в коде!

Я действительно не могу понять, в чем проблема. Кто-нибудь, у кого есть опыт Spring Security + OAuth2, кто может помочь?

ответ

0

Вы уверены, что ваши пользовательские ClientDetails настроены с правильными типами стилей Oauth2.

Если у вас есть ручной UserDetailsService, возможно, он будет настроен с типами гранта по умолчанию (а не ваш нужный тип password гранта)

  • authorization_code
  • refresh_token

Чтобы добавить в качестве гранта password вам необходимо сделать что-то вроде этого:

@Override 
public void configure(ClientDetailsServiceConfigurer clients) throws Exception { 
    InMemoryClientDetailsServiceBuilder clientsBuilder = clients 
    .inMemory() 
    .withClient("clientid") 
    .scopes("openid","read", "write") 
    .authorizedGrantTypes("password", "refresh_token", "authorization_code") 
    .secret("clientSecret")); 
} 
+0

Эй, типы грантов верны. Я проверил. Я переустановил всю конфигурацию, используя http://stytex.de/blog/2016/02/01/spring-cloud-security-with-oauth2/, а затем применил мою ClientDetailsService и UserDetailsService. Проблема была как-то связана с компонентом DefaultTokenServices и JwtTokenStore. Я буду смотреть, что было точной причиной завтра. – SakeSushiBig