Spring Boot 无法使用postman访问受保护的URL

ryoqjall  于 2022-12-26  发布在  Spring
关注(0)|答案(1)|浏览(240)

我在Sping Boot OAuth2项目中遇到了问题。我将应用程序创建为客户端并启动了服务器。我可以使用浏览器访问受保护的URL,但无法使用Postman执行相同操作(即使在创建OAuth2.0令牌并将其作为授权头发送后)。使用Postman尝试时,它总是返回Google登录页面的HTML文档。我使用的是

oauth2-client

应用程序的依赖项。
我尝试添加一个自定义过滤器,但它不起作用。我甚至尝试使用JWT令牌代替access_token(不透明令牌),但也不起作用。当我尝试使用浏览器访问受保护的URL时,它能够获取登录用户的信息,并返回预期值。

ss2ws0br

ss2ws0br1#

Web浏览器和Spring OAuth2客户端之间的请求不是OAuth2。默认情况下,它使用会话而不是BearerAuthorization头来保护。
Postman主要是一个REST客户端,而不是一个Web浏览器。它旨在测试REST API(@RestController@Controller@ResponseBody),这些API是资源服务器,而不是客户端。
一个应用可以同时作为资源服务器(REST API)和客户端(@Controller,其方法返回Thymeleaf模板的名称或使用WebClient查询其他OAuth2 Web服务),但您必须配置两个单独的SecurityFilterChains,并使用securityMatcher进行隔离:

  • 一个“客户端”框架,具有会话、CSRF保护和用于Thymeleaf页面的oauth2Login(或JSF或任何其他服务器端呈现框架)
  • 一个“资源服务器”,它具有JWT解码器或内省,并且可能禁用会话和CSRF。

您可以参考我编写的those tutorials,了解如何配置资源服务器(甚至还有一个教程,其中介绍了Spring应用程序既是资源服务器又是客户机)

相关问题