具有外部 clientName 参数和 ThymeLeaf 的 Spring Security 5 Oauth 配置

Spring Security 5 Oauth configuration with external clientName parameter and ThymeLeaf

提问人:kpdude 提问时间:10/3/2023 更新时间:10/3/2023 访问量:43

问:

我们的应用程序有一个控制器映射(“/newsociallogin”),它从外部站点获取请求参数字符串类型(即“google”或“apple”),然后尝试根据标准属性配置等自动授权。我需要配置一种足够智能的方式,以便从我的初始映射中读取类型参数并继续前进。另请注意,我们启用了 ThymeLeaf,因此每个控制器方法都必须返回有效的 template/html 或重定向。在我收到调用映射重定向 uri 的提供程序的响应之前,我不想重定向到任何实际页面。

这是我目前所拥有的:

@GetMapping(value = "/newsociallogin")
    public ModelAndView newInitiateLogin(@RequestParam(value = "type") String type,
                                      HttpServletResponse response) {
        log.info("Get request to /newsociallogin with type: {}", type);
        ModelAndView modelAndView = new ModelAndView("redirect:/oauth_login?type=" + type);
        return modelAndView;
    }

 @GetMapping("/oauth_login")
    public ModelAndView getOauthSocial(@RequestParam(value = "type", required = true) String clientName)  {
        log.info("KP: in getOauthSocial, clientName = " + clientName);
        if (clientName != null) {
            return new ModelAndView("redirect:" + authorizationRequestBaseUri + "/" + clientName.toLowerCase());
        } else {
            return new ModelAndView("redirect:/");
        }
    }

 protected void configureLocalSecurity(HttpSecurity http) throws Exception {

        generateAppleClientSecret();
        http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED);
        http.authorizeRequests().antMatchers(
            "/",
            "/oauth_login",
            "/newsociallogin/**"
        ).permitAll()
                .and()
        .oauth2Login().defaultSuccessUrl("/loginSuccess")
                .authorizationEndpoint()
                .baseUri("/oauth_login");


        http.authorizeRequests().antMatchers("/**").authenticated();
        http.exceptionHandling().authenticationEntryPoint(new LoginUrlAuthenticationEntryPoint("/"));
        http.logout().logoutSuccessUrl("/").permitAll();

        http.csrf().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse());
        http.csrf().ignoringAntMatchers("/apple", "/registerwithsocial", "/updateapple", "/registerapple");
    }

问题在于在下游适当地传达传入的“type”参数并正确配置安全性。

当我检查网络流时,我看不到对 /oauth2/authorization/google 的调用实际上做了什么。

Spring 安全 OAuth-2.0

评论

0赞 kpdude 10/3/2023
我考虑过编写一个“自动提交”html,它将转发到类似于上面的映射的 google/apple,但仍然需要以某种方式在范围内键入。

答: 暂无答案