Spring Cloud单点登录,但仅限于已登录的情况
我已经安装了一个SpringCloudOAuth2服务器,并使用jwt和一个配置如下的客户端运行Spring Cloud单点登录,但仅限于已登录的情况,spring,spring-security,spring-boot,spring-security-oauth2,spring-cloud,Spring,Spring Security,Spring Boot,Spring Security Oauth2,Spring Cloud,我已经安装了一个SpringCloudOAuth2服务器,并使用jwt和一个配置如下的客户端运行 @EnableOAuth2Sso public class PortalApplication { public static void main(String[] args) { SpringApplication.run(PortalApplication.class, args); } @Component public static cla
@EnableOAuth2Sso
public class PortalApplication {
public static void main(String[] args) {
SpringApplication.run(PortalApplication.class, args);
}
@Component
public static class LoginConfigurer extends OAuth2SsoConfigurerAdapter {
@Override
public void match(RequestMatchers matchers) {
matchers.antMatchers("/**");
}
@Override
public void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest()
.authenticated()
.and()
.csrf()
.csrfTokenRepository(csrfTokenRepository())
.and()
.addFilterAfter(csrfHeaderFilter(), CsrfFilter.class);
}
private Filter csrfHeaderFilter() {
return new OncePerRequestFilter() {
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
CsrfToken csrf = (CsrfToken) request.getAttribute(CsrfToken.class.getName());
if (csrf != null) {
Cookie cookie = new Cookie("XSRF-TOKEN", csrf.getToken());
cookie.setPath("/");
response.addCookie(cookie);
}
filterChain.doFilter(request, response);
}
};
}
private CsrfTokenRepository csrfTokenRepository() {
HttpSessionCsrfTokenRepository repository = new HttpSessionCsrfTokenRepository();
repository.setHeaderName("X-XSRF-TOKEN");
return repository;
}
}
}
这一切正常,应用程序重定向到身份验证服务器,完成后重定向回门户应用程序
二号客户
但现在我有另一个客户,那是一家网上商店
如果用户在auth服务器上登录,则网络商店应在顶部显示一个栏,其中包含指向用户以前订单的链接和配置文件
如果用户未登录,则在签出步骤之前不会发生任何事情,在此步骤中,用户必须登录或创建帐户
问题:
如果我已经登录到身份验证服务器,但允许匿名用户登录,如何自动登录
我可以用spring.oauth2.resource.userInfoUri来实现这一点吗?这难道不是一个正常的“如果经过身份验证,则显示这个,否则显示那个”用例吗?您不必为每个请求对用户进行身份验证(您的ant matcher是/**)。如果我登录到account.mydomain.com,oauthserver所在的位置。如果我访问www.mydomain.com,我希望看到我已登录。但它不应该强迫用户登录,因为它是一个公共站点。我不知道舒尔如何配置它。如何让www.mydomain.com检查身份验证服务器以查看我是否已登录?除非您控制两个域,否则无法在后台通道中执行此操作-否则您必须使用浏览器并让用户参与此过程。如果您同时控制这两个域,则可以向“auth”域添加CORS筛选器,允许浏览器从“www”域询问当前已验证用户的相关信息。如果您知道他已通过身份验证,那么您可以安全地将浏览器重定向到“www”上的a/login端点,并获得该域的cookie,而无需进一步身份验证。