我从一周开始就开始学习 OAuth2 Spring Security,如果问题很简单,请原谅。在我开始研究之前,这个话题对我来说似乎也很容易。 我将在我的应用程序中为 Rest 端点编写测试。为此,我将为我的资源类编写测试。但是我的应用程序使用的是 OAuth2。
第一个想法是为这个测试配置单独的授权服务器扩展 AuthorizationServerConfigurerAdapter。我已将 ClientDetailsService 配置为持久保存在内存中并添加了 InMemoryTokenService。但它不起作用。响应为 401 - 未经授权。
现在我只想提供 bean DefaultTokenServices 并以某种方式省略授权服务器(但如何?)。我没有更改“生产”资源服务器中的任何内容。
我知道如何添加不记名 token 。我正在使用 OAuth2RestTemplate 编写测试,并将访问 token 添加到 OAuth2ClientContext。我使用构造函数 DefaultOAuth2AccessToken(String value) 创建访问 token 。我知道有 TestRestTemplate 但在这种情况下 OAuth2RestTemplate 对我来说似乎更好。我正在使用 Spring Boot,也许这会有帮助?
我的问题是: 1. 什么是最好的解决方案?配置 OAuth2 以执行 Rest 端点测试的最佳方法是什么?如何在没有授权服务器的情况下进行测试?也许我的理解不合适? 2 有没有办法模拟对授权服务器的请求?怎么做?
在此先感谢您的合作。
我阅读了很多 Material ,包括: http://projects.spring.io/spring-security-oauth/docs/oauth2.html 但我在任何地方都找不到答案。
最佳答案
提供准确答案所需的更多信息:
- 您正在编写单元测试或集成测试吗?
如果是单元测试,你根本不应该为授权服务器操心。您所需要的只是为您的 mockMvc 查询(或响应式等效项)正确设置 SecurityContext。
如果是集成测试,Spring 会为此提供工具,但我会专注于单元测试,因为据我所知,您正在尝试编写它。
- 您使用的是什么版本的 spring 库?
spring-security-oauth2 已弃用且不支持单元测试,但我在对此 other question 的回答中进行了详细说明如何创建注释来配置这样的安全上下文。
从版本 5.2(选择最新的里程碑)开始,spring-security-test 基本支持使用 JWT 保护的单元测试 @Controller。如果您使用内省(introspection)或安全的@Service,则必须引用 this lib I wrote因为 spring-security 团队选择只集成我工作的一小部分。
关于java - Spring OAuth2 安全单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32125620/