我正在使用pac4j的jsx-rs实现为我的应用程序仅启用身份验证。为了获得授权,我想使用Shiro。但是我不确定如何将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))
我正在使用Shiro的AuthorizationFilter
进行身份验证。我的意思是我要根据登录的用户创建令牌。我已经使用Guice的ServletModule
注册了此过滤器。但是我无法保留已登录的用户。我正在尝试使用SecurityContext
注入Jersey的@Context
。但是过滤器的顺序混乱了。 AuthorizationFilter
在身份验证完成之前被调用。因此SecurityContext
始终为空。
是否有更好的方法将Shiro与pac4j集成?
答案 0 :(得分:0)
Shiro提供了自己的Feature
实现,可以与JAX-RS
一起使用。将模块依赖项添加到项目中就可以了。
并且为了从pac-4j获取用户上下文,我实现了一个Authorizer
,在其中注入了OIDC配置文件。我创建了一个自定义用户配置文件,并将其提供给Shiro,如下所示:
SecurityUtils.getSubject().login(new DemoToken(profile));
这样Shiro可以获取用户个人资料,然后进行授权。