Last active
September 18, 2018 15:07
-
-
Save craigleonard/d2d76747f19872690b1fb5d894f3eec2 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package oauth; | |
import static com.github.tomakehurst.wiremock.client.WireMock.*; | |
import com.github.tomakehurst.wiremock.junit.WireMockRule; | |
import org.junit.Rule; | |
import org.junit.Test; | |
import org.junit.runner.RunWith; | |
import org.springframework.beans.factory.annotation.Autowired; | |
import org.springframework.context.annotation.Bean; | |
import org.springframework.context.annotation.Configuration; | |
import org.springframework.security.crypto.codec.Base64; | |
import org.springframework.security.oauth2.client.DefaultOAuth2ClientContext; | |
import org.springframework.security.oauth2.client.OAuth2ClientContext; | |
import org.springframework.security.oauth2.client.OAuth2RestTemplate; | |
import org.springframework.security.oauth2.client.resource.OAuth2ProtectedResourceDetails; | |
import org.springframework.security.oauth2.client.token.grant.password.ResourceOwnerPasswordResourceDetails; | |
import org.springframework.security.oauth2.config.annotation.web.configuration.EnableOAuth2Client; | |
import org.springframework.test.context.ContextConfiguration; | |
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; | |
import org.springframework.web.client.RestTemplate; | |
import java.io.UnsupportedEncodingException; | |
@RunWith(SpringJUnit4ClassRunner.class) | |
@ContextConfiguration(classes = OAuthRestClientTest.ClientConfiguration.class) | |
public class OAuthRestClientTest { | |
@Rule | |
public WireMockRule wireMockRule = new WireMockRule(); | |
@Autowired | |
private RestTemplate restTemplate; | |
@Test | |
public void test() throws UnsupportedEncodingException { | |
String authzHeader = new String(Base64.encode("clientapp:123456".getBytes("UTF-8"))); | |
String token = "{\"access_token\":\"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3\",\"token_type\":\"bearer\",\"expires_in\":3600}"; | |
stubFor(post(urlEqualTo("/oauth/token")) | |
.withHeader("Authorization", equalTo("Basic " + authzHeader)) | |
.withRequestBody(equalTo("grant_type=password&username=roy&password=spring")) | |
.willReturn(aResponse() | |
.withStatus(200) | |
.withHeader("Content-Type", "application/json") | |
.withBody(token))); | |
stubFor(get(urlEqualTo("/api/123")) | |
.withHeader("Authorization", equalTo("Bearer MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3")) | |
.willReturn(aResponse() | |
.withStatus(200) | |
.withHeader("Content-Type", "application/json") | |
.withBody("{}"))); | |
restTemplate.getForEntity("http://localhost:8080/api/123", String.class); | |
} | |
@EnableOAuth2Client | |
@Configuration | |
public static class ClientConfiguration { | |
@Bean | |
public OAuth2ProtectedResourceDetails pantheonResource() { | |
ResourceOwnerPasswordResourceDetails resourceDetails = new ResourceOwnerPasswordResourceDetails(); | |
resourceDetails.setUsername("roy"); | |
resourceDetails.setPassword("spring"); | |
resourceDetails.setAccessTokenUri("http://localhost:8080/oauth/token"); | |
resourceDetails.setClientId("clientapp"); | |
resourceDetails.setClientSecret("123456"); | |
resourceDetails.setGrantType("password"); | |
return resourceDetails; | |
} | |
@Bean | |
public OAuth2ClientContext oauth2ClientContext() { | |
return new DefaultOAuth2ClientContext(); | |
} | |
@Bean | |
public OAuth2RestTemplate oauthRestTemplate(OAuth2ProtectedResourceDetails resource, OAuth2ClientContext context) { | |
return new OAuth2RestTemplate(resource, context); | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="UTF-8"?> | |
<project xmlns="http://maven.apache.org/POM/4.0.0" | |
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | |
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | |
<modelVersion>4.0.0</modelVersion> | |
<groupId>spring-oauth-test</groupId> | |
<artifactId>spring-oauth-test</artifactId> | |
<version>1.0-SNAPSHOT</version> | |
<dependencyManagement> | |
<dependencies> | |
<dependency> | |
<groupId>org.springframework</groupId> | |
<artifactId>spring-framework-bom</artifactId> | |
<version>4.3.12.RELEASE</version> | |
<type>pom</type> | |
<scope>import</scope> | |
</dependency> | |
</dependencies> | |
</dependencyManagement> | |
<dependencies> | |
<dependency> | |
<groupId>org.slf4j</groupId> | |
<artifactId>slf4j-api</artifactId> | |
<version>1.7.12</version> | |
</dependency> | |
<dependency> | |
<groupId>org.slf4j</groupId> | |
<artifactId>jcl-over-slf4j</artifactId> | |
<version>1.7.12</version> | |
</dependency> | |
<dependency> | |
<groupId>ch.qos.logback</groupId> | |
<artifactId>logback-classic</artifactId> | |
<version>1.2.3</version> | |
</dependency> | |
<dependency> | |
<groupId>org.springframework.security.oauth</groupId> | |
<artifactId>spring-security-oauth2</artifactId> | |
<version>2.3.3.RELEASE</version> | |
<exclusions> | |
<exclusion> | |
<groupId>commons-logging</groupId> | |
<artifactId>commons-logging</artifactId> | |
</exclusion> | |
</exclusions> | |
</dependency> | |
<dependency> | |
<groupId>org.springframework</groupId> | |
<artifactId>spring-test</artifactId> | |
</dependency> | |
<dependency> | |
<groupId>junit</groupId> | |
<artifactId>junit</artifactId> | |
<version>4.12</version> | |
<scope>test</scope> | |
</dependency> | |
<dependency> | |
<groupId>com.github.tomakehurst</groupId> | |
<artifactId>wiremock</artifactId> | |
<version>2.18.0</version> | |
<scope>test</scope> | |
</dependency> | |
</dependencies> | |
</project> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment