Spring 来自本机 Postman 应用的安全授权请求

Spring Security Authorize request from native Postman app

我是 exploring/learning Spring 安全模块,通过 REST API 实现。

为了测试效果,我们使用 Postman 本机应用程序作为休息客户端。

@RestController
@RequestMapping("/auth")
public class Employee {

    @GetMapping("/status")
    public ResponseEntity<String> getStatus()
    {
        ResponseEntity<String> responseEntity = new ResponseEntity<>("Resource is fetched", HttpStatus.OK);


        return responseEntity;
    }

}

以上为消费资源。 下面是配置身份验证和授权的代码片段

@EnableWebSecurity
public class AppSecurityConfiguration extends WebSecurityConfigurerAdapter {


    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication().withUser("ashish").password("{noop}admin").roles("USER")
                .and().withUser("foo").password("{noop}foo").roles("ADMIN");

    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests().antMatchers("/auth/status").hasRole("ADMIN").and()
        .formLogin()
        ;
    }

    @Bean
    public PasswordEncoder getPasswordEncoder()
    {
        return PasswordEncoderFactories.createDelegatingPasswordEncoder();
    }

}

现在上面的授权代码在浏览器中尝试时工作正常 - 它使用默认的 spring 登录页面。 但是我不太明白如何通过邮递员 execute/test 相同。

在方法 protected void configure(HttpSecurity http) 中,我尝试删除 formLogin() 但它不起作用。 我添加了 httpBasic - 它也没有用。

在邮递员中,我使用的是基本身份验证。

在互联网上搜索时,我遇到了一些非常好的文章,但几乎所有文章都使用某种 UI 技术,如 angular 或 thymleaf 来展示我发现很难理解的概念掌握.

我参考下面的视频教程来学习 spring 安全。

https://www.youtube.com/watch?v=payxWrmF_0k&list=PLqq-6Pq4lTTYTEooakHchTGglSvkZAjnE&index=6&t=0s

提前致谢! 阿希什帕拉布

您必须为此实现 JWT 令牌并将其添加到 Postman 中的请求 header 'Authorization'。您可以在 youtube 上观看 Java Brains Spring 安全视频。

  1. 通过邮递员发送 GET 请求 http://localhost:8080/login,它会 return 你 html。从响应中提取 _csrf 标记。看起来像
   <input name="_csrf" type="hidden" 
          value="1c470a6c-dff3-43aa-9d08-d308545dc880" />
  1. http://localhost:8080/login 发出如下 POST 请求,复制 _csrf 令牌、用户名和密码作为参数

  1. 记下第二步响应中的 JESSIONID Cookie 值。那就是 authenticated session 的 session Id。

  2. 只要您在后续请求中将 JESSIONID 作为 cookie 发送,spring 安全就知道您是谁。 Postman 会自动将 Cookie 添加到后续请求中。

  3. 您可以使用该 cookie header 手动将其添加为 header 或更新邮递员设置以始终发送 JESSIONID cookie