@dk_bis

Как избавиться от ошибки [missing_user_info_uri] при авторизации через Oauth2?

Пытаюсь реализовать доступ приложения к ресурсам Headhunter API через OAUTH2 и столкнулся с возникновением ошибки [missing_user_info_uri] Missing required UserInfo Uri in UserInfoEndpoint for Client Registration после авторизации. Полагаю, что неправильно настроил конфигурацию, но пока не пойму что именно не так.

Контроллер странички, защищенной авторизацией. При обращении к ней возникает запрос к HH, на котором успешно проходится авторизация, после чего возникает сообщение о вышеуказанной ошибке.
@GetMapping("/hello")
	public String indexToo() {
		return  "Authorized Hello!";
	}

Конфигурация HttpSecurity:
@Override
	protected void configure(HttpSecurity http) throws Exception {
		http
				.authorizeRequests()
						.antMatchers("/", "/error", "/webjars/**").permitAll()
						.anyRequest().authenticated()
				.and()
				.oauth2Login();
	}


application.properties (client-id и client-secret опущены):
spring.security.oauth2.client.registration.headhunter.client-name=HeadHunter
spring.security.oauth2.client.registration.headhunter.client-id=
spring.security.oauth2.client.registration.headhunter.client-secret=
spring.security.oauth2.client.registration.headhunter.redirect-uri=http://localhost/login/oauth2/code/headhunter
spring.security.oauth2.client.registration.headhunter.authorization-grant-type=authorization_code
spring.security.oauth2.client.registration.headhunter.scope=profile email
spring.security.oauth2.client.registration.headhunter.client-authentication-method=post

spring.security.oauth2.client.provider.headhunter.authorization-uri=https://hh.ru/oauth/authorize
spring.security.oauth2.client.provider.headhunter.token-uri=https://api.hh.ru/token
spring.security.oauth2.client.provider.headhunter.user-name-attribute=profile


Спасибо за помощь.
  • Вопрос задан
  • 40 просмотров
Пригласить эксперта
Ответы на вопрос 2
@pro100Code
TechnoCraft Designer Developer
Ошибка [missing_user_info_uri] возникает, потому что Spring Security ожидает URL для получения информации о пользователе (UserInfo endpoint) в конфигурации, но ты не указал его для провайдера OAuth2. В случае с Headhunter API этот endpoint отсутствует в стандартной конфигурации, поэтому его нужно указать вручную.

Попробуй добавить в свой application.properties параметр user-info-uri, чтобы указать Spring, где получать данные о пользователе

После этого Spring должен корректно получать информацию о пользователе через UserInfo endpoint, и ошибка должна исчезнуть.

Если не совсем понятно, напиши, попробую составить пример
Ответ написан
Комментировать
@dk_bis Автор вопроса
Спасибо за ответ.
Решил проблему следующим образом - внёс изменения в настройки:
spring.security.oauth2.client.provider.headhunter.user-name-attribute=email
spring.security.oauth2.client.provider.headhunter.user-info-uri=https://api.hh.ru/me

Насколько я понял, теперь в качестве идентификатора пользователя используется email, а не профиль. Кроме того прописал адрес ресурса, выдающего информацию по текущему пользователю.
Теперь пытаюсь сделать всё тоже самое под более свежей версией Spring Boot 3.3.4. Оказалось, что в части конфигурирования они внесли значительные изменения и старый код теперь не работает.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы