Родная поддержка Spring для рабочего процесса OIDC - PullRequest
0 голосов
/ 15 октября 2019

Я пытаюсь включить OIDC authN и рабочий процесс authZ для моего Spring-Java-веб-приложения. В идеале я хотел сделать это независимым от IDP способом. То есть это приложение могло быть интегрировано только с любым из Azure AD, OKTA, AWS SSO, Google-auth администратором развертывания. И я хочу, чтобы пользователи перенаправлялись на любого провайдера, которогоПриложение интегрировано с.

С OIDC в ​​качестве стандарта, я понимаю, что я должен быть в состоянии написать фильтр обработки аутентификации OIDC, который должен работать с любым из провайдеров. Необходимая конфигурация, которая варьируется в зависимости от провайдера (URL-адрес аутентификации, идентификатор клиента, секрет, URL-адрес JWKS для получения ключей провайдера и т. Д.), Будет передана в этот шаблон фильтра / отдыха в качестве параметров.

  • В.1 Можно ли реализовать независимый от поставщика фильтр OIDC? Может кто-нибудь дать какие-нибудь указатели?

Мне известно, что Spring изначально предоставляет библиотеки Oauth2 / apis, такие как AuthorizationCodeResourceDetails, OAuth2ClientAuthenticationProcessingFilter. Однако я не вижу никакого встроенного фильтра обработки OIDC во встроенном. Есть ли что-нибудь?

Я попытался понять рабочий процесс, описанный в https://www.baeldung.com/spring-security-openid-connect. Однако, когда я пытаюсь настроить этот код, чтобы он работал с Azure AD, он не работает. Это связано с тем, что Azure AD требует

  1. Параметр response_type должен содержать id_token.
  2. Запрос должен содержать параметр nonce, который должен быть установлен в запросе.

AuthorizationCodeResourceDetails не поддерживает такой параметр. Учитывая, что OIDC является общим стандартом,

  • Q-2. Я не понимаю, почему у каждого поставщика все еще разные требования? Разве это не противоречит цели OIDC. На самом деле я прочитал, что Google выдает ошибку, если вы передаете nonce

  • Q-3. Есть ли какие-нибудь родные способы настройки этих дополнительных параметров, специфичных для провайдера, таких как nonce, promt, дополнительные response-type, предпочтительно с примерами?

1 Ответ

1 голос
/ 15 октября 2019

Я думаю, что ваши проблемы с Spring Security OIDC заключаются в том, что вы используете устаревшую библиотеку OAuth (по крайней мере, это иллюстрирует статья в Baeldung). OAuth2 и OIDC теперь являются частью Spring Security 5.x, а не отдельным проектом. В этом примере есть клиент OIDC «login-client»: https://github.com/jgrandja/oauth2-protocol-patterns, который может показывать другое. Да, OIDC должен позволять вам менять местами провайдеров, хотя не все провайдеры OIDC будут реализовывать все (например, обнаружение и т. Д.)

...