我正在尝试为不同的用户角色(带有Spring Boot 2的Spring Security OAuth2)实现多个登录策略,并且每个策略都应使用不同的端点。我有3个用户类型,REGULAR, EXTERNAL, CLIENT
,其中常规登录vía用户名/密码,外部登录通过documentId / key,客户端在获取当前密码之前做了一些短信恶作剧,并用电话/密码登录。他们已经可以从常规网站登录,但他们将为每个角色提供移动应用程序。
我尝试使用AuthorizationServer
创建多个@EnableAuthorizationServer
个实例,每个实例都有一个配置,但它只会获取最后一个。{1}}实例。每个角色都有一个不同的UserDetailsService
impl,并且在DB中创建了一个应用程序。我希望公开它们,以便客户端应用使用/client/oauth/...
,常规应用使用/regular/oauth/...
,外部应用使用/external/oauth/...
如何实现此目标?
答案 0 :(得分:0)
如果您使用的是spring security和oauth2,并且想要获得许多不同的登录端点,则可能需要自定义 AuthenticationEntryPoint 。
@Component
public class CustomAuthenticationEntryPoint implements AuthenticationEntryPoint {
private final RedirectStrategy redirectStrategy = new DefaultRedirectStrategy();
@Override
public void commence(HttpServletRequest request, HttpServletResponse response,
AuthenticationException authException) throws IOException, ServletException {
String clientId = request.getParameter("client_id");
String redirectUrl = "/login";
HttpSession session = request.getSession();
session.setAttribute(SessionSaveAttribute.CLIENT_ID_ATR, clientId);
//echoSessionAtr(request);
redirectStrategy.sendRedirect(request, response, redirectUrl);
}
}
因此,您可以通过制定条件来自定义登录端点。
if(clientId=="REGULAR_CLIENT_ID"){
redirectUrl = "regular/login"
} else if(clientId=="SPECIAL_CLIENT_ID"){
redirctUrl = "...";
}