我有一个应用程序使用pac4j与一个JWT客户端(即一个直接),我想使用AnonymousClient作为后盾。如何确保AnonymousClient在JwtClient之后被调用?DefaultSecurityLogic是否尊重客户提供的订单?
我也看了一下setProfileFactoryWhenNotAuthenticated,但是在文档中他们只提到了它在间接客户端中的使用(我尝试了用我的JwtClient,但它没有工作)。
为了使它更辣,我实际上使用了一个间接客户端,我希望AnonymousClient作为整个客户链的后盾。对间接客户端使用setProfileFactoryWhenNotAuthenticated将无法工作,因为我希望使用AnonymousCLient,即使直接客户机被丢弃,因为请求是AJAX。
总结一下我想做的是:
有什么想法吗?
发布于 2022-06-01 21:01:52
这个问题并不是最近才提出的,但我试图做一些类似的事情,并发现了如何去做。
这里的匿名部分被描述为沉默登录:https://www.pac4j.org/docs/clients.html#8-silent-login
示例:
myClient.setProfileFactoryWhenNotAuthenticated(p -> AnonymousProfile.INSTANCE);我认为您需要列出所有直接客户端,并在列表上的最后一个客户机上调用上述方法。
这是违反直觉的,因为您需要先将间接客户端放在客户列表中,然后将直接客户端放在客户端列表中。但是我想它和上面一样,您需要在最后一个直接客户机上调用setProfileFactoryWhenNotAuthenticated方法。
来自DefaultSecurityLogic文档(重点是我的):
首先,如果未对用户进行身份验证(没有配置文件),并且在参数中定义了一些客户端,则会尝试为直接客户端进行登录。
然后,如果用户有配置文件,
authorizers配置检查授权。如果授权有效,则授予用户访问权限。否则,将显示一个403错误页。最后,如果用户未进行身份验证(没有配置文件),则如果第一个定义的客户端是clients configuration.中的间接客户端,则重定向到适当的身份提供程序。否则,将显示一个401错误页。
https://stackoverflow.com/questions/68430080
复制相似问题