티스토리 뷰

OAuth인증을 통해 Access Token을 발급받는 과정에 대해 설명하고자 한다. 

Java를 사용하였으며 unirest를 통해 token을 요청하였다.

 

네이버 D2블로그에서 OAuth과정에 대해 이해하기 쉽게 설명한 글이 있어 해당 글의 비유를 참고하였으며

과정과 코드를 비교해가며 설명하겠다.

출처 - 네이버 D2 blog

 

Request Token요청과 발급

test.jsp에 버튼을 생성이 되어 있으며 버튼클릭시 location.href를 통해 Request Token을 요청한다.

<script type="text/javascript">
$(function(){
	$("#token").click(function(){
		location.href='요청 url';
	});
});
</script>
<body>
<button id="token">Request Token요청</button>
${demoDto }
</body>

요청이 완료된 다음에는 최종 Access Token을 demoDto 객체에 담아 "token" 버튼 아래 나타내 주고자 한다.

 

사용자 인증페이지 호출/사용자 로그인 완료

1번 과정에서 나온 url을 통해 사용자 인증 페이지가 호출된다. 

이 인증페이지에서 id와 비밀번호를 입력해서 로그인에 성공하면 4번 과정까지 완료된다.

 

로그인에 성공한 후 redirect를 "/"로 해두어 controller를 호출한다.

@GetMapping(value = {"", "/"})
public String index(@RequestParam String code, Model model) {
	LOGGER.info("index {} ", code);

    // Access Token요청은 service에서 처리
    DemoDto demoDto = demoService.unirest(code);

    model.addAttribute("code", code);
    model.addAttribute("demoDto", demoDto);

    return "test";
}

 

 

사용자 권한 요청 및 수락/Access Token발급

Access Token을 발급받기 위해 요청하는 과정이다. service단에서 unirest를 통해 토큰발급 url을 요청하였다.

필요한 파라미터를 header와 field에 넣는다.

CompletableFuture<HttpResponse<JsonNode>> response = Unirest.post("https://localhost:8080/")
	.header("Authorization", "")
	.field("grant_type","")
	.field("code", "")
	.field("redirect_uri", "")
	.asJsonAsync(res -> {
		jsonNode = res.getBody();	
	});
    
    
    	accessToken = (String)demoDto.getAccessToken();
	tokenType = (String)demoDto.getTokenType();

해당요청이 성공적으로 완료되면 access token이 발급된다.

access token이 발급되면 jsonNode에 정보들이 담겨져 오게 되고 이렇게 리턴받은 jsonNode를 객체에 하나씩 저장하면 된다.

 

Access Token을 이용해 서비스 정보 요청

HttpResponse<String> res = Unirest.get("")
	.header("Authorization", tokenType+" "+accessToken)
	.queryString("param1", "")
	.queryString("param2", "")
	.queryString("param3","")
	.asString();

지금까지의 과정을 통해 발급받은 access token을 api요청에 함께 보낸다.

 

 

전체 코드

github.com/soyeondev/tokenTest

 

soyeondev/tokenTest

Contribute to soyeondev/tokenTest development by creating an account on GitHub.

github.com

 

참고글

d2.naver.com/helloworld/24942

 

'java' 카테고리의 다른 글

[Java] 언어의 기원  (0) 2021.03.14
[Java] OkHttpClient로 동기, 비동기 요청하기  (0) 2021.02.13
[Java] return true; return false;  (0) 2020.05.21
gradle Kotlin Groovy  (0) 2020.05.18
[Java] Builder Pattern  (0) 2020.04.11
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
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 29 30 31
글 보관함