728x90
반응형
공부하면서 만든 Oauth Server에 대한 테스트를 Postman으로는 했는데 실제로 Client Code가 필요하게 되었다.
2017/09/04 - [Development/Java] - [Spring Boot]Oauth server 적용해보기
테스트만 할 경우에는 Postman만 써도 상관이 없지만 실제 Client 가 호출을 하려면 code가 필요하다. 그래서 여기저기 구글링을 해가면서 찾아봤다.
우선 Oauth Token을 발급 받기위한 코드가 필요하다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | public String getOAuth2Token(String username, String password) { final String CLIENT_ID = "myclient"; final String CLIENT_SECRET = "secret"; final String GRANT_TYPE = "password"; final String SERVER_URL = "http://localhost:" + port; final String API_OAUTH_TOKEN = "/oauth/token"; String clientCredentials = CLIENT_ID + ":" + CLIENT_SECRET; String base64ClientCredentials = new String(Base64.encodeBase64(clientCredentials.getBytes())); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); headers.add("Authorization", "Basic " + base64ClientCredentials); MultiValueMap<String, String> parameters = new LinkedMultiValueMap<>(); parameters.add("grant_type", GRANT_TYPE); parameters.add("username", username); parameters.add("password", password); HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<>(parameters, headers); @SuppressWarnings("rawtypes") ResponseEntity<Map> response; URI uri = URI.create(SERVER_URL + API_OAUTH_TOKEN); response = restTemplate.postForEntity(uri, request, Map.class); return (String) response.getBody().get("access_token"); } | cs |
위에 작성된 메소드를 보면 파라메터로 id, password를 받게 되어있다. 이건 실제 사용자의 id, password를 넣으면 된다. 그리고 그 이외에 필요한 정보들은 final 상수로 정의를 해놓았다. 다만 Testcase로 작성 하다 보니 port 는 Random하게 들어간다. 호출 형태는 Postman에서 작성했던 것을 그대로 Code로 옮긴걸로 생가하면 된다. 저렇게 호출을 하게되면 결과값으로 access_token값을 받게된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | @Test public void getOAuth2TokenTest(){ Assert.assertNotNull(accessToken); } @Test public void getTestWithAccessToken(){ final String SERVER_URL = "http://localhost:" + port; final String API_URL = "/private?access_token={access_token}"; ResponseEntity<String> responseEntity = restTemplate.getForEntity( SERVER_URL + API_URL, String.class, accessToken); Assert.assertEquals("private", responseEntity.getBody()); } | cs |
이렇게 받은 access_token을 실제 API 에 넣어서 보내주면 전에 글에서 postman 으로 실행했던 것과 동일한 결과를 얻을 수 있다.
위에 작성된 소스 코드는 https://github.com/blusky10/study_spring 에 가서 OauthServiceTest.java파일을 보면 확인 할 수 있다.
728x90
반응형
'Development > Java' 카테고리의 다른 글
[Spring Security] Max Session 적용하기 (0) | 2017.11.20 |
---|---|
[Spring Boot]RabbitMQ 연동하기 (0) | 2017.10.27 |
[Spring Boot]Oauth server 적용해보기 (0) | 2017.09.04 |
[OAuth] Oauth의 간략한 흐름. (0) | 2017.07.04 |
[Spring Security]간단 Spring Security (0) | 2017.06.27 |