序言
由于有关stackoverflow的问题已经很多了,我首先要确保这不是重复和区别。
这是关于
在两个不同的AuthenticationManager中有两个(或更多)不同的AuthenticationProvider,用于不同的路由。
使用SpringSecurity 5.5而不是3.x中的方法
使用基于非xml配置的方法
因此,问题不在于:
如何在on authenticationmanager中包含多个AuthenticationProviders以提供“替代身份验证”(大多数问题都是这样)
案例
假设有两个自定义身份验证提供程序:catapitokenprovider和dogapitokenprovider。我们之所以不谈论aouth/jwt/basic/formproviders,是因为它们提供了快捷方式。
现在我们有两个RESTAPI端点 /dog/endpoint
及 /cat/endpoint
.
问题:
在今天的spring security 5.5中,如何正确实现这一点:
我们需要身份验证提供者 CATApiTokenProvider
仅能够对上的请求进行身份验证 /cat/endpoint
我们需要身份验证提供者 DOGApiTokenProvider
仅能够对上的请求进行身份验证 /dog/endpoint
因此,用户无法使用计算机上的cat令牌进行身份验证 /dog/endpoint
也没有带狗牌的 /cat/endpoint
.
我的想法/方法
a) 我知道,因为我有定制的猫/狗过滤器,所以可以使用 AuthenticationManagerResolver
并在创建bean时将一个示例传递到过滤器中。此解析器可能看起来像
public AuthenticationManagerResolver<HttpServletRequest> resolver()
{
return request -> {
if (request.getPathInfo().startsWith("/dog/")) {
try {
return ???;
} catch (Exception exception) {
log.error(exception);
}
}
if (request.getPathInfo().startsWith("/cat/")) {
try {
return ???;
} catch (Exception exception) {
log.error(exception);
}
}
};
}
与此相关的两个问题是:
如何在此处返回不同的身份验证管理器?如何用每个catap和dogap示例化2个不同的am?目前我使用 public void configure(AuthenticationManagerBuilder auth)
但据我所知,我只会配置“the one”authenticationmanager,我可以在那里添加dogap和catap,但这会让1个am和2个AP成为可能,因此当使用此am时,我可以在cat端点上使用dog令牌进行身份验证
这真的是实现这一目标的正确方式吗?我希望能够在securityconfiguration级别上提供am
b) 以某种方式示例化2个不同的AuthenticationManager,然后使用securityconfiguration将它们分配给不同的匹配器。
两个问题:
使用不同的提供商生成2个不同的ams的正确方法是什么?
我无法理解如何为规范添加am
http.authorizeRequests()
.antMatchers("/dog/**")
.?
暂无答案!
目前还没有任何答案,快来回答吧!