如何在邮递员中设置CSRF令牌

时间:2020-01-24 19:09:44

标签: spring-boot spring-security postman csrf spring-security-rest

我正在使用Spring Boot 2和Spring 5来创建一个保存两个实体的应用程序:User和UserProfile。这是我的控制器类:

@RestController
@RequestMapping("userProfile")
public class UserProfileController {

    @Autowired
    private UserProfileService userProfileService;

    @PostMapping(produces = "application/json")
    @ResponseStatus(HttpStatus.CREATED)
    public void createUserProfile(@RequestBody @Valid UserProfileDTO userProfileDTO, @AuthenticationPrincipal User user){
//code 
    }

    @GetMapping
    public ResponseEntity getUserProfile(@AuthenticationPrincipal User user){
        //code
    }
}

没什么,我得到了经过身份验证的用户,然后将其设置并保存,或者根据经过身份验证的用户获取数据。我的安全配置是:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private UserDetailsService userDetailsService;

    @Bean
    public PasswordEncoder passwordEncoder() {
        return NoOpPasswordEncoder.getInstance();
    };

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder());
    }

}

现在我想和邮递员一起测试。 GET工作正常,我在Postman中添加表单数据并进行身份验证,并且可以调试get方法。 POST始终被标识为403 Forbidden。我不想禁用CSRF或/和cors。如何测试我的应用程序,获取CSRF令牌并在Postman中进行设置?

1 个答案:

答案 0 :(得分:0)

您必须从登录响应(或最初发送的任何地方)获取 XSRF 值,将其存储在您的环境中,并将其添加到您的 POST 标头中。

我使用的是 Spring Security,所以 XSRF 值作为一个名为 SET-COOKIEXSRF-TOKEN 标头返回,我将其保存为 csrftoken Screenshot of Postman post-login code saving the token

然后在我的 POST 中包含一个名为 X-XSRF-TOKEN 的标题

Screenshot of setting the token in an outgoing header

您的标头值可能会以不同的名称命名,但这种通用方法应该可行。