Невозможно получить токен доступа от KeyCloak

Я пытаюсь получить токен доступа с сервера Keycloak с помощью почтальона.

Я перешел по этой ссылке и создал учетные данные области, пользователя и роли, как указано в учебник.

Но когда я делаю запрос, он продолжается бесконечно, ничего не возвращая.

edit: Я также попробовал grant_type как "пароль" и "client_credentials". Но не повезло.

введите здесь описание изображения


person Kshitiz Sharma    schedule 25.11.2019    source источник


Ответы (2)


В этом примере вы не можете использовать client_credentials, потому что у вас нет секрета клиента, здесь вы можете прочитать о Предоставление учетных данных клиента. Он также используется в основном для связи между серверами. Вы не должны использовать предоставление пароля, но для примеров, я думаю, все в порядке. Предоставление пароля

вот что я получаю  введите описание изображения здесь

Вопрос в том, как вы настроили приложение с весенней загрузкой? Вот application.properties, упомянутые в руководстве:

keycloak.realm=SpringBootKeycloak
keycloak.auth-server-url=http://localhost:8080/auth/
keycloak.resource=login-app
keycloak.public-client=true

и так выглядит мой SecurityConfig

@Configuration
@EnableWebSecurity
@ComponentScan(
        basePackageClasses = KeycloakSecurityComponents.class,
        excludeFilters = @ComponentScan.Filter(type = FilterType.REGEX, pattern = "org.keycloak.adapters.springsecurity.management.HttpSessionManager"))
public class SecurityConfig extends KeycloakWebSecurityConfigurerAdapter {

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        KeycloakAuthenticationProvider keycloakAuthenticationProvider = keycloakAuthenticationProvider();
        keycloakAuthenticationProvider.setGrantedAuthoritiesMapper(new SimpleAuthorityMapper());
        auth.authenticationProvider(keycloakAuthenticationProvider);
    }

    @Override
    protected SessionAuthenticationStrategy sessionAuthenticationStrategy() {
        return new RegisterSessionAuthenticationStrategy(new SessionRegistryImpl());
    }

    @Bean
    public KeycloakSpringBootConfigResolver KeycloakConfigResolver() {
        return new KeycloakSpringBootConfigResolver();
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        super.configure(http);
        http.authorizeRequests()
                .antMatchers("/*")
                .hasRole("user").anyRequest().permitAll();

    }
}
person Alex P.    schedule 25.11.2019
comment
Я даже не могу сгенерировать токен - person Kshitiz Sharma; 25.11.2019
comment
Я вижу ошибку на вашем скриншоте. Царства не существует. Вы все еще понимаете это? Вы создали это царство? также вы можете опубликовать конфигурацию весенней загрузки, дополнительно изменив grant_type на пароль - person Alex P.; 25.11.2019
comment
Нет, это было раньше. Сейчас запрос не проходит. Он просто застрял на этом этапе. И я еще не написал никакого загрузочного кода Spring. Я просто пытаюсь получить жетон у почтальона - person Kshitiz Sharma; 25.11.2019
comment
Ну тогда как вы хотите, чтобы это работало? Вы просите Keycloak дать вам токен доступа для чего? В учебнике предлагается указать действительный URL-адрес перенаправления. Вероятно, это займет вечность, потому что URL-адрес перенаправления не работает. дело в том, что если URL-адрес перенаправления не работает, keycloak не может перенаправить вас на эту страницу с действующим токеном доступа - person Alex P.; 25.11.2019
comment
О, я вижу. Видите ли, мой вариант использования - некоторая внешняя служба получит токен доступа для доступа к остальным конечным точкам, которые я буду писать. В моем приложении мне нужно аутентифицировать токен и соответственно предоставить доступ к ресурсу - person Kshitiz Sharma; 25.11.2019
comment
Затем вам нужно указать keycloak, на который выполняется перенаправление. В этом случае URL вашего ресурса - person Alex P.; 25.11.2019
comment
Позвольте нам продолжить это обсуждение в чате. - person Kshitiz Sharma; 25.11.2019

Вот правильный способ получить токен от PostMan

https://<IP ADDRESS>:<PORT>/auth/realms/master/protocol/openid-connect/token

В разделе "Тело" выберите x-www-form-urlencoded.

{
   "username": "username",
   "password": "password",
   "client_id": "APP-NAME",
   "grant_type": "password",
   "client_secret": "462fe347-d47f-4365-94ee-6aefff994ef2"
}

Для более четкого решения используйте этот  введите описание изображения здесь

If you want to from through `curl` command then use below command 
curl -X POST -k -H 'Content-Type: application/x-www-form-urlencoded' -i 'https://<IP>:<PORT>/auth/realms/master/protocol/openid-connect/token' --data 'username=username&password=password&client_id=CLIENT-ID&grant_type=password&client_secret=462fe347-d47f-4365-94ee-6aefff994ef2'

**РЕДАКТИРОВАТЬ **

Как обсуждалось с OP в чате SO, наконец, нашел решение, OP создавал пользователя с временным паролем, поэтому каждый раз, когда пользователь входит в систему, он должен менять пароль, поэтому он терпит неудачу. После того, как OP изменил параметр отключения, он начал работать введите изображение  описание здесь

person Subodh Joshi    schedule 25.11.2019
comment
Я не вижу разницы в вашем решении и в том, что я пробовал. Не могли бы вы объяснить - person Kshitiz Sharma; 25.11.2019
comment
@KshitizSharma Где в вашем случае секрет клиента? Если вы когда-либо застревали в api отдыха, попробуйте то же самое с командой curl. - person Subodh Joshi; 25.11.2019
comment
При настройке области я установил тип доступа «общедоступный». Итак, я не получил client_secret - person Kshitiz Sharma; 25.11.2019
comment
@KshitizSharma попробуйте с клиентом по умолчанию admin-cli это работает для вас? Поскольку я тестировал одного и того же клиента в своей настройке, он работал нормально. Или проверьте правильность вашего порта? - person Subodh Joshi; 25.11.2019
comment
На самом деле, я новичок в keyCloak. Вы можете мне посоветовать, как мы можем это сделать? - person Kshitiz Sharma; 25.11.2019
comment
@KshitizSharma Как вы получаете доступ к своей клавиатуре из графического интерфейса? Какой IP-адрес / порт для доступа. - person Subodh Joshi; 25.11.2019
comment
Давайте продолжим это обсуждение в чате. - person Kshitiz Sharma; 25.11.2019