Spring 安全测试:检索令牌

Posted

技术标签:

【中文标题】Spring 安全测试:检索令牌【英文标题】:Spring Security Testing: Retreiving a Token 【发布时间】:2018-11-22 00:32:09 【问题描述】:

我已经成功实现了允许我通过 OAuth 和 UserDetailsS​​ervice 从我的应用程序中检索 JWT 令牌的代码。

Atm 我正在尝试实施测试以确认这一点,但我不断收到 400 个错误请求

@Test
public void is_status_up() throws InterruptedException, JSONException 
    // Given

    final String TOKEN_URL = "http://localhost:8080/oauth/token";
    MultiValueMap<String, String> params = new LinkedMultiValueMap<String, String>();
    params.add("username","username");
    params.add("credential","credentials");
    params.add("grant_type","password");

    HttpHeaders headers = new HttpHeaders();
    headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON_UTF8));
    headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
    HttpEntity<String> entity = new HttpEntity<>("parameters" , headers);

    HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<MultiValueMap<String, String>>(params, headers);



    RestTemplate restTemplate = new RestTemplate();

    restTemplate.getInterceptors().add(new BasicAuthorizationInterceptor("client-id","client-secret"));

    //When
    String result = restTemplate.postForObject(TOKEN_URL, request, String.class);

    //Then
    assertThat(result).isNotNull();

这应该尝试从 Spring Security Authorization Server 的 /oauth/token 端点检索令牌,但遇到 400 Bad Request。

在邮递员中,我已经设置了请求,它成功检索了令牌

标题 授权:基本 内容类型:application/x-www-form-urlencoded

body(选择了 x-www-form-urlencoded) 用户名: 密码: grant_type:"密码"

【问题讨论】:

【参考方案1】:

问题是我在我的参数映射中放入了凭据,而它应该是密码。我最初这样做是因为 SonarLint 或 IntelliJ 会在它下划线并抛出一个嘶嘶声,因为密码这个词被如此公开地声明。

解决方案 将参数映射中的“凭据”更改为“密码”

【讨论】:

以上是关于Spring 安全测试:检索令牌的主要内容,如果未能解决你的问题,请参考以下文章

MockMVC - 如何使用 org.hamcrest.Matcher 在春季安全集成测试中检查 JWT 令牌的内容

UnrecognizedClientException","errorMessage":"本地测试lambda函数时请求中包含的安全令牌无效

Grails Spring 安全测试

Localstack 抛出请求中包含的安全令牌无效

Spring MVC集成测试弹簧安全问题,怎么解决

WordPress OAuth2 - 以安全的方式检索令牌