• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

access token 관련 질문드립니다.

23.11.07 01:12 작성 23.11.07 02:05 수정 조회수 288

0

 안녕하세요 강의를 다 듣고 개인 포트폴리오 제작중에 있습니다.

현재 로그인 부분을 구현중인데, 포인트 충전이라던가 마이페이지 접근시, 비밀번호 변경 시 등의 경우에 인가(여기선 fetchUser)를 받아야 한다고 이해했습니다.

 

그러려면, 강의에선 아래 사진처럼 header에 토큰을 넣어서 보내었습니다.

하지만 직접 프론트엔드를 구축해서 api 호출하려고 하니 header에 토큰을 넣어줘야 하는데, 현재 로그인시 그냥 토큰 값인 문자열을 리턴할 뿐 엑세스토큰을 저장하는 곳이 없습니다.

  1. 보통 액세스토큰을 저장할 때 변수, 로컬스토리지, 세션스토리지, 쿠키 중 무엇을 가장 많이 사용하나요?

  2. 섹션 13-11의 강의에서 처럼 변수에 액세스토큰을 저장하는 경우를 생각해 봤습니다. 그러면 인증하는 컴포넌트(ex: login)와 인가를 받는 컴포넌트(ex: 포인트 충전)가 다를 때 컴포넌트에서 token을 변수로 저장하더라도 다른 컴포넌트에서는 사용 못할텐데 recoil같은 라이브러리를 사용해서 전역변수로 사용해야 하는지 궁금합니다.

     

    아래는 프론트엔드의 login 컴포넌트를 예시를 적어보았습니다.

     

     

     

    const [token, setToken] = useState("");
    
    await axios.post("http://localhost:5656/graphql", {
                query: `
                    mutation {
                        login(id: "${inputId}", password: "${inputPw}")
                    }
                `,
            })
            .then(res => {
                setToken(res.data.data.login);
                }
            })

     

     

 감사합니다.

답변 1

답변을 작성해보세요.

0

안녕하세요! rjs2517님!

우선! 강의를 완강하신 것을 축하드립니다!^^
끝 매듭을 짓는 모습이 정말 멋져요!

질문에 대한 답변을 드리기에 앞서, 한가지 기준을 먼저 설명드리면!
사실상 모든 검증은 백엔드에서 이루어집니다!(인가를 포함한 게시글, 댓글 등 모든 검증)
프론트엔드는 유저가 조작이 가능하므로 프론트엔드의 검증은 사실상 백엔드로의 네트워크 비용을 줄이기 위함 정도로 인지해 주시면 좋을 것 같아요!

따라서, 특정 api를 요청하면 백엔드에서 검사하여 응답을 줄지말지가 결정됩니다!
(로그인은 header에 들어온 토큰을 가지고 결정하겠죠?!)

 

이어서, 1번부터 답변을 드리자면!

  1. 엑세스토큰을 저장할 때, 로컬스토리지, 세션스토리지에 저장하는 경우도 많이 있지만, 프론트 수업에서 배우셨던 것처럼 XSS공격 취약점에 의해서 로컬스토리지는 탈취 위험이 있었어요! 따라서, 보안수준을 높이기 위해서 변수에 저장해 주시면 좋겠죠!

  2. 네! 맞아요! 수업때 했던 방식 그대로, recoil로 엑세스토큰을 관리하게 됩니다! 꼭 recoil이 아니더라도, 전역변수를 관리할 수 있는 글로벌스테이트면 상관 없겠죠?!^^