java - Spring OAuth2 安全单元测试

标签 java spring oauth spring-security

我从一周开始就开始学习 OAuth2 Spring Security,如果问题很简单,请原谅。在我开始研究之前,这个话题对我来说似乎也很容易。 我将在我的应用程序中为 Rest 端点编写测试。为此,我将为我的资源类编写测试。但是我的应用程序使用的是 OAuth2。

第一个想法是为这个测试配置单独的授权服务器扩展 AuthorizationServerConfigurerAdapter。我已将 ClientDetailsS​​ervice 配置为持久保存在内存中并添加了 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 但我在任何地方都找不到答案。

最佳答案

提供准确答案所需的更多信息:

  1. 您正在编写单元测试或集成测试吗?

如果是单元测试,你根本不应该为授权服务器操心。您所需要的只是为您的 mockMvc 查询(或响应式等效项)正确设置 SecurityContext。

如果是集成测试,Spring 会为此提供工具,但我会专注于单元测试,因为据我所知,您正在尝试编写它。

  1. 您使用的是什么版本的 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/

相关文章:

java - 允许用户在 Spring MVC Hibernate 应用程序中添加自己的自定义字段 - 理想的方法是什么?

java - HashCode 循环调用 : OneToMany JPA

c# - 在 .NET 中使用 OAuth2.0 两条腿的方法访问 Jira API

web-services - 两条腿的 OAuth - 寻找信息

java - JComponent 如何通知其父 J(Internal)Frame 的关闭事件?

java - 如何将 EditText 中的 PHP 变量的值传递到 Android Studio?

java - 如何根据单选按钮组件的值验证输入文本组件

java - rxjava-string 上的双问号是什么意思?

java - 在 DAO 层之外使用 @org.springframework.transaction.annotation.Transactional?

java - 使用 java 配置 Api