我需要实现多重身份验证
通过otp登录
通过用户名/密码登录
通过限时登录链接登录
我怎么能做到呢。有不同的页面。通过用户名/密码登录是很容易实现的,因为它与springsecurity是开箱即用的。
我需要通过otp实现登录。我找不到正确的方法来实施它。
我试过跟踪
@Component
public class CustomAuthenticationProvider implements AuthenticationProvider {
@Override
public Authentication authenticate(Authentication authentication)
throws AuthenticationException {
String phone = authentication.getName();
String otp = authentication.getCredentials().toString();
if (shouldAuthenticateAgainstThirdPartySystem(username, password)) {
// use the credentials
// and authenticate against the third-party system
return new UsernamePasswordAuthenticationToken(
phone, otp, new ArrayList<>());
} else {
return null;
}
}
@Override
public boolean supports(Class<?> authentication) {
return authentication.equals(
UsernamePasswordAuthenticationToken.class);
}
}
在安全配置中
@Configuration
@EnableWebSecurity
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {
// @Autowired
// private BCryptPasswordEncoder bCryptPasswordEncoder;
@Autowired
private MyUserDetailsService userDetailsService;
private static final String[] PUBLIC_MATCHERS = { "/", "/vendor/**" };
@Autowired
public void configureGlobal(AuthenticationManagerBuilder authenticationMgr) throws Exception {
authenticationMgr.inMemoryAuthentication()
.withUser("user").password("user").authorities("ADMIN")
.and()
.withUser("admin").password("admin").authorities("USER","ADMIN");
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth
.userDetailsService(userDetailsService)
.passwordEncoder(passwordEncoder());
}
}
登录url为“/login”
而处理通过otp登录将是:“/login via otp”
通过链接登录也有类似的不同
但我不知道如何实现同样的事情。
它是一种多身份验证提供者,但一次只能使用其中一个。
暂无答案!
目前还没有任何答案,快来回答吧!