혼자 살아남기
2020-05-18 15:01:37
4
276

rest api 서버에서 시큐리티, 권한 질문입니다.


현재 jersey rest api 서버에 jwt 을 적용하고 있습니다.

그런데 현재 이서버 1개로 모바일앱, 웹 2개를 사용하고 있는데요,

지금까지는 로그인처리 는 DB 검증만 해둔상태였다가 jwt를 적용하려고하니 막히는 부분이 많네요


1. 앱에서 로그인 유지를 위해 토큰을 써본 경험이 있어서 알겠는데, 웹에서는 세션으로만 해봐서 그런데

웹에서는 토큰만 가지고 로그인 처리를 하나요 아니면 따른 방식이 있는건가요?


2. 토큰 발급, 리프레시 토큰 관련 질문

1) 로그인시에 엑세스토큰(30분), 리프레시 토큰(ex 1일) 2가지를 발급한다.

2) 여기서 리프레시 토큰만 해당 사용자의 테이블에 INSERT 한다.

3) 엑세스토큰은 그대로 리턴할때 사용자 정보와 같이 보내, 앱단에서 로컬스토리지에 저장 시킨다.

4) 저장한 값을 꺼내 fetch header에 넣어 통신시 사용한다.

5) 여기서 해당 엑세스 토큰 유효기간이 지났을때 try..catch()에 잡히게 되면, 이때 해당 사용자 테이블을 조회 하여 리프레시 토큰값을 가지고와서 이것이로 통신을 한다.


일단 테스트로 저렇게 해놨습니다만..이것말고 다른 방법으로 해야할꺼 같은데 제 머리로는 한계가 있네요..(사수없이 저 혼자 하느라 경험도 없이 하는중 입니다.)


1
  • 답변 4

  • 어쩌다프로그래머
    6k
    2020-05-18 15:13:27

    뭐 이게 정답이다라고 하는 방법은 없죠 상황에 맞는 적당한 방법을쓰면 되는거라.

    웹은 세션으로 하는게 더욱 좋은 방법이라 생각은합니다..

    Oauth 검색해보시면 상당한 레퍼런스가 있을거예요

  • 초무쿤
    6k
    2020-05-18 17:00:32 작성 2020-05-18 17:01:10 수정됨

    * 로그인시 

    1. 인증성공후 JWT를 말아 쿠키에 X-ACCESS-TOKEN 같은 이름으로 넣어준다. (Authentication Provider)


    * 다음부터 접속시 

    쿠키에서 X-ACESS-TOKEN이라는 이름의 JWT를 꺼네서 유효한지 체크한다. (Custom Security Filter 추가)


    추가로 어디 저장하실 필요는 없습니다.

  • 혼자 살아남기
    2020-05-18 17:31:34

    초무쿤

    답변 감사드립니다.

    혹시,

    웹페이지를 대상으로 답변 달아주신건가요? 아니면 앱, 웹 상관없이 jwt 으로 구현시 

    1,2 번 항목처럼만 해도 괜찮다는건가요?


  • 초무쿤
    6k
    2020-05-18 17:35:39 작성 2020-05-18 17:38:24 수정됨

    JWT로 구현시요.. 

    Server to Server시면 HTTP 헤더에 X-ACCESS-TOKEN 같은 커스텀 태그로 전송받는거로 정의하시면 되실듯 한데요.


    앱,웹,Servert to Server 모두 고려해해서 

    로그인 성공시 Response HTTP Header에 JWT 토큰 내려주시면 됩니다.(그냥 응답으로 주셔도 되고요.)

    앱이 됬던 서버가 됬던 리소스 접근시 그 JWT를 해더로 보내는거죠. (브라우져라면 알아서 보내줍니다.)


  • 로그인을 하시면 답변을 등록할 수 있습니다.