Интеграция Shiro с реализацией pac4j jax-rs - PullRequest
0 голосов
/ 13 ноября 2018

Я использую реализацию pac4j jsx-rs , чтобы включить только АУТЕНТИФИКАЦИЮ для моего приложения. Для авторизации хочу использовать Широ. Но я не уверен, как интегрировать Shiro с pac4j.

В настоящее время у меня есть Feature, который выполняет необходимую настройку JAX-RS, и я сделал его Provider

Ниже перечислены функции и поставщики, которые я зарегистрировал.

    featureContext
    .register(new JaxRsConfigProvider(config))
    .register(new Pac4JSecurityFeature())
    .register(new Pac4JValueFactoryProvider.Binder())
    .register(new ServletJaxRsContextFactoryProvider())
    .register(new Pac4JSecurityFilterFeature(false, null, "keycloakoidcclient", "callback", false))

Я использую AuthorizationFilter Широ, чтобы выполнить аутентификацию. Под этим я подразумеваю, что создаю токен на основе зарегистрированного пользователя. Я зарегистрировал этот фильтр, используя Guice's ServletModule. Но я не могу заполучить зарегистрированного пользователя. Я пытаюсь ввести Джерси SecurityContext, используя @Context. Но порядок фильтров перепутан. AuthorizationFilter вызывается до завершения аутентификации. Следовательно, SecurityContext всегда равно нулю.

Есть ли лучший способ интеграции Shiro с pac4j?

1 Ответ

0 голосов
/ 26 ноября 2018

Shiro предоставляет собственную реализацию Feature для использования с JAX-RS.Добавление зависимости модуля в проект делает свое дело.

И чтобы получить пользовательский контекст из pac-4j, я реализовал Authorizer, где мне вводили профиль OIDC.Я создал собственный профиль пользователя и предоставил его Широ следующим образом:

SecurityUtils.getSubject().login(new DemoToken(profile));

Таким образом Широ получает профиль пользователя и затем может продолжить авторизацию.

...