TIL 2021-07-27

한꼬북·2021년 7월 27일
0

TIL

목록 보기
2/28
post-thumbnail
post-custom-banner

망할놈의 JWT🚑

로그인 이후 토근 발급 받고, 발급 받은 토큰을 api이용시 header에 Authorization value로 넣어서 전달 하자! 그럼 서버에서는 헤더 확인하고 토큰을 인가 로직으로 보내자! 이후에는 인가된 사용자만 데이터 보내주고, 인가된 유저가 아니면 Exception 넘겨주자! 라는 생각으로 만들었읍니다.
분명 내머리속에서는 어떻게 돌아갔으면 좋겠다 라는 생각이 있었는데요,, 없어졌습니다,,😂

1. JWT 발급

post method를 통해 id, passwd를 서버쪽으로 보내고 서버는 db에 들려 인증된 유저에게 accessToken, refreshToken을 발급한다. 발급은 setCookie를 통해서 client쪽에 심어주고 httpOnly 속성을 넣어 js에서 접근할 수 없도록 만듦(xss취약점 보안)

2. Authorization Header

api를 이용하기 위해 Reqeust Header에 Authorization : {accessToken} 형식으로 서버쪽에 같이 보내줘야 하는데, js에서 접근을 못하니 어떻게 해야할까 Cookie, httponly 속성에 대해 하루 꼬박 찾아봤더니

setCookie를 한 웹에 다시 Request시 Header에 Cookie를 보내준다고 한다. 😮
아 그럼 Cookie에서 값을 가져오면 되겠다!? 😉

3. getCookie, getAccessToken

서버에서 Cookie를 받아 어떻게 잘게 부셔서 accessToken을 가져올까 고민하다 인가가 필요한 페이지 접근 시 Request Header에 Cookie값이 있는 경우에만 가져와서 StringTokenizer를 통해 key와 value로 나누고 반복문을 통해 equals("accessToken")가 true를 반환할 경우 nextElement()를 통해 accessToken 값을 가져와 인가하는 로직으로 보내줬다.

    String authCookie = request.getHeader("Cookie");
    if (authCookie != null) {
        StringTokenizer tokenIzer = new StringTokenizer(authCookie, ";= ");
	String token = null;
	while(tokenIzer.hasMoreElements()) {
	    if(tokenIzer.nextToken().equals("AccessToken")) {
		token = (String) tokenIzer.nextElement();
                break;
	    };
	}	
    }

마무리😋

JWT를 이용해서 로그인 이후 api를 잘 사용할 수 있었음!!!!!! 그리고 Cookie에 대해서도 조금 더 알게 된 하루 킹치만,, 아직 refreshToken을 어떻게 처리할지 조금 더 고민을 해봐야겠다... 생각해 생각!!🙄

profile
오히려 좋아, 자 가보자고!
post-custom-banner

0개의 댓글