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 安全视频。
- 通过邮递员发送
GET
请求 http://localhost:8080/login
,它会 return 你 html。从响应中提取 _csrf
标记。看起来像
<input name="_csrf" type="hidden"
value="1c470a6c-dff3-43aa-9d08-d308545dc880" />
- 向
http://localhost:8080/login
发出如下 POST 请求,复制 _csrf
令牌、用户名和密码作为参数
记下第二步响应中的 JESSIONID
Cookie
值。那就是 authenticated session
的 session Id。
只要您在后续请求中将 JESSIONID
作为 cookie 发送,spring 安全就知道您是谁。 Postman 会自动将 Cookie
添加到后续请求中。
您可以使用该 cookie header 手动将其添加为 header 或更新邮递员设置以始终发送 JESSIONID
cookie
我是 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 安全视频。
- 通过邮递员发送
GET
请求http://localhost:8080/login
,它会 return 你 html。从响应中提取_csrf
标记。看起来像
<input name="_csrf" type="hidden"
value="1c470a6c-dff3-43aa-9d08-d308545dc880" />
- 向
http://localhost:8080/login
发出如下 POST 请求,复制_csrf
令牌、用户名和密码作为参数
记下第二步响应中的
JESSIONID
Cookie
值。那就是authenticated session
的 session Id。只要您在后续请求中将
JESSIONID
作为 cookie 发送,spring 安全就知道您是谁。 Postman 会自动将Cookie
添加到后续请求中。您可以使用该 cookie header 手动将其添加为 header 或更新邮递员设置以始终发送
JESSIONID
cookie