我正在使用Spring Security和SpringMVC创建一个Web应用程序(为了清楚起见,我将其称为WebApp),该应用程序与一个现有应用程序(我将其称为BackendApp)进行交互。
我希望将身份验证责任委托给BackendApp(这样我就不需要同步这两个应用程序)。
为了实现这一点,我希望WebApp(运行spring security)通过REST与BackendApp进行通信,用户在表单中提供用户名和密码,并根据BackendApp的响应是200 OK还是401 Unauthorized进行身份验证。
我知道我需要编写一个自定义Authentication Manager来实现这一点,但是我对Spring非常陌生,无法找到有关如何实现它的任何信息。
我相信我将需要这样做:
public class CustomAuthenticationManager implements AuthenticationManager{
@Override
public Authentication authenticate(Authentication authentication) throws AuthenticationException {
String username = authentication.getName();
String pw = authentication.getCredentials().toString();
// Code to make rest call here and check for OK or Unauthorised.
// What do I return?
}
}
如果成功,我是否设置authentication。setAuthenticated(true);如果不成功,是否设置false?
一旦写好了这个,我如何使用Java配置文件配置Spring Security来使用这个身份验证管理器呢?
提前感谢您的帮助。
5条答案
按热度按时间yyhrrdl81#
请看下面的示例。您必须返回一个UsernamePasswordAuthenticationToken。它包含主体和授权。希望我能提供帮助:)
PS:userRepo和rightRepo是访问我的自定义User-DB的Spring-Data-JPA存储库
SpringSecurity Java配置:
qqrboqgw2#
在其最简单的:
yjghlzjz3#
我的解答几乎与第一个答案相同:
1)您需要一个实现身份验证提供程序的类
2)与第一个答案相反,如果您只有此自定义提供程序,则不需要在WebSecurityConfiguration中包含以下代码。
问题是Spring会寻找可用的提供者,如果没有找到其他的提供者,就使用默认的提供者。
0g0grzrc4#
首先,必须配置Spring安全性以使用自定义AuthenticationProvider。因此,必须在spring-security.xml(或等效的配置文件)中定义实现此功能的类。例如:
其次,必须实现AuthenticationProvider,如示例中所示。特别是方法authenticate(身份验证身份验证),您的rest调用必须使用该方法。例如:
gkl3eglg5#
这就是我使用基于组件的配置(SecurityFilterChain)和新的
authorizeHttpRequests
的方法