티스토리 뷰
OAuth인증을 통해 Access Token을 발급받는 과정에 대해 설명하고자 한다.
Java를 사용하였으며 unirest를 통해 token을 요청하였다.
네이버 D2블로그에서 OAuth과정에 대해 이해하기 쉽게 설명한 글이 있어 해당 글의 비유를 참고하였으며
과정과 코드를 비교해가며 설명하겠다.
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
참고글
'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
- Stack
- 인접리스트
- 스텍
- Java
- 동적프로그래밍
- 자료구조
- react
- 인접행렬
- dfs
- 알고리즘
- 교착상태
- stackframe
- javascript
- C++
- BFS
- 병행프로세스
- server side rendering
- 최단경로
- 클래스
- 퀵정렬
- 이진탐색
- 운영체제
- 재귀함수
- 세마포어
- 입출력장치
- client side rendering
- 배열
- C
- 소프트웨어
- 구조체
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |