Любой работающий пример, как настроить сервер авторизации oauth2 с формой входа и GitHub? - PullRequest
0 голосов
/ 27 апреля 2019

Я пытаюсь настроить сервер авторизации с помощью весенней загрузки.

Этот сервер должен иметь возможность авторизовать пользователя с помощью формы логина / пароля и с помощью github (как пример).

Я надеюсь, что изображение поможет лучше понять, что я хочу.

Пример формы входа:

Example login form

Требования:

  1. Пользователь должен иметь возможность войти в систему напрямую (введя адрес сервера авторизации *1018* в браузере) на сервер , используя форму логина / пароля .
  2. Пользователь должен иметь возможность войти непосредственно на сервер , используя авторизацию github .
  3. Клиент (другое приложение) должен иметь возможность авторизовать пользователя (получить access_tokenи так далее ...) используя этот сервер авторизации с формой логин / пароль .
  4. Клиент (другое приложение) должен иметь возможность авторизовать пользователя, используя этот сервер авторизации скнопка входа в GitHub .

Мне удалось выполнить только первые 3 пункта из списка требований с помощью кода:

@SpringBootApplication
@RestController
@Configuration
@Import(AuthorizationServerSecurityConfiguration.class)
public class SsoApplication extends WebSecurityConfigurerAdapter {

    public static void main(String[] args) {
        SpringApplication.run(SsoApplication.class, args);
    }

    @GetMapping("/")
    public Authentication me() {
        return SecurityContextHolder.getContext().getAuthentication();
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                .anyRequest().authenticated()
                .and()
                .formLogin()
                .and()
                .oauth2Login();
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication()
                .withUser("123")
                .password(passwordEncoder().encode("123"))
                .roles("USER");
    }

    @Bean
    public BCryptPasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); }

}

Полный пример кода можно посмотреть на githab

В качестве клиента для проверки пунктов 3 и 4 вы можете использовать почтальона с настройками для получения токена:

  • Тип гранта: Код авторизации
  • Обратный звонокURL: http://localhost:8081/client/login
  • Auth URL: http://localhost:8080/oauth/authorize
  • URL-адрес токена доступа: http://localhost:8080/oauth/token
  • Идентификатор клиента: первый клиент
  • Секрет клиента: noonewilleverguess
  • Область действия: user_info
  • Состояние: test
  • Аутентификация клиента: отправка в виде заголовка Basic Auth

postman request configuration

Мне не удалось реализовать:

Клиент (другое приложение) должен иметь возможность авторизовать пользователя с помощью этого сервера авторизации с помощью кнопки входа в GitHub.

В консоли почтальона появляется ошибка:

Invalid authorization code: 97477114b3ec3c53547d

Буду признателен за любую помощь.Спасибо!

Ответы [ 2 ]

1 голос
/ 28 апреля 2019

Я нашел причину ошибки. Проблема в том, что Postman перехватывает неправильный код из github для сервера авторизации вместо того, который требуется от сервера авторизации для клиента.

Другими словами, проблема в почтальоне. Для правильной проверки вы должны использовать полноценный клиент oauth2.

1 голос
/ 28 апреля 2019

Ваш код хорошо работает для меня.

Но я создал собственное приложение OAuth в github. Затем с вашим кодом я вставил в свое приложение Github:

URL домашней страницы: http://localhost:8080

URL-адрес обратного вызова авторизации: http://localhost:8080/login

и после того, как дал кнопку и разрешил приложению идентифицировать меня с github, я вернул основной

...
"authenticated": true,
"principal": {
    "authorities": [
      {
        "authority": "ROLE_USER",
        "attributes": {
          "login": "xxx",
...

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

EDIT:

В консоли Postman ошибка исчезнет, ​​если вы добавите аннотацию @EnableOAuth2Sso в конфигурацию SsoApplication:

@SpringBootApplication
@RestController
@Configuration
@EnableOAuth2Sso
@Import(AuthorizationServerSecurityConfiguration.class)
public class SsoApplication extends WebSecurityConfigurerAdapter
...