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.