I am trying to write some tests for code that uses Nimbus. In that code I want to convert the HttpServletRequest to a Nimbus UserInfoRequest.

When I try that with the MockHttpServletRequest as implementation, I get an error about a missing parameter access_token.

I don't know if this is an issue with Spring Test or with Nimbus.

import static org.assertj.core.api.Assertions.assertThat;

import com.nimbusds.oauth2.sdk.ParseException;
import com.nimbusds.oauth2.sdk.http.ServletUtils;
import com.nimbusds.openid.connect.sdk.UserInfoRequest;
import org.junit.jupiter.api.Test;
import org.springframework.mock.web.MockHttpServletRequest;

import java.io.IOException;

class MockHttpServletRequestNimbusTest {

  @Test
  void mockHttpServletRequestToNimbusUserInfoDetail() throws IOException, ParseException {
    final var request = new MockHttpServletRequest("POST", "/");
    request.setParameter("access_token", "BEARER validToken");

    final UserInfoRequest userInfoRequest = UserInfoRequest.parse(ServletUtils.createHTTPRequest(request));

    assertThat(userInfoRequest.getAccessToken().getValue()).isEqualTo("validtoken");
  }
}

Error:

com.nimbusds.oauth2.sdk.ParseException: Missing access token parameter
    at com.nimbusds.oauth2.sdk.token.AccessTokenUtils.parseValueFromQueryParameters(AccessTokenUtils.java:261)
    at com.nimbusds.oauth2.sdk.token.AccessToken.parse(AccessToken.java:454)
    at com.nimbusds.openid.connect.sdk.UserInfoRequest.parse(UserInfoRequest.java:167)
    at MockHttpServletRequestNimbusTest.mockHttpServletRequestToNimbusUserInfoDetail(MockHttpServletRequestNimbusTest.java:20)

Comment From: poutsma

I do not have any experience with Nimbus, but it appears that it's looking for a valid OAuth token, and BEARER validToken is not. At any rate, not a Spring Framework bug.