구조는 예를들어 spa + rest api 라고 가정함.
어떤 홈페이지에서 api요청 전에 토큰 발급받으려고 client id와 client secret을 base64로 인코딩한다음
authorization 헤더에 넣어서 oauth에 fetch 요청 하더라고
이해가 안가는게
1. 만약 토큰 발급받으려는 로직이 자격없는 제 3자의 api요청을 방지하기 위해서라면
-> 프론트 소스코드에 떡하니 client id와 secret이 (환경변수로 안보이지만 관리자도구로 확인가능) 노출되어있는데 oauth로 토큰 발급받아봤자 제 3자도
같은 client id와 secret으로 토큰 발급받아서 요청보낼수있지않나? 그렇다면 로직의 의미가 없는데 왜 위 로직을 사용하는거지?
2. 위의 이유가 아니라면 어떠한 이유때문에 api요청 전에 토큰을 발급받는거임?
나도 포폴땜에 spa + restapi로 프로젝트중이고, 내가 배포 + api 서버 담당했음.
관리자 페이지의 경우 로그인 후 jwt.발급으로 spring security에서 검증하는 로직을 진행했고,
일반적인 GET요청의 경우 api key만 헤더에 넣어서 요청보내고 검증후 api 값 반환하는식으로 진행했는데
아무리 생각해도 api key의.의미가 없음...
명쾌한 답변 부탁함
그게 무슨 소리야 제3자가 쿠키나 세션저장소도 아니고 spa 어플리케이션의 자바스크립트 변수에서 id와 serect을 탈취해갈 정도면 하드웨어가 위험해
음 그니까 따로 로그인 안해도 쇼핑몰의 상품들은 보여지잖아? 그게 코드 보니까 client에서 client id와 secret을 넣어서 토큰을 발급받고 fetch로 api요청을 하더라고
민감한정보가 아니라서 그런거아님? 클라단에서 비용드는 api키 노출되게 할 사이트는 없음
ㅇㅇ 그래서 궁금한게 그럴거면 안해도 상관없지않나? 하는 궁금증이 생기더라고 중요한 관리자접근 정도만 oauth나 jwt 사용하고
그래서 oauth는 server side app 에서 쓰는걸 권장하는건데? 보안 허술한 공개클라이언트(브라우저,앱 등) 에서 쓰려는 노력 때문에 PKCE 라는 개념이 나온거고
일단 이부분은 몰라서 공부해오고 올게 ㄱㅅ
1. 상품 목록처럼 회원 인증 필요없는 api는 jwt 토큰 없이 요청함. 백에서도 인증 안 받는 api 구분해 놓으면 토큰 검사 안 함. (스프링 시큐리티에서 설정 가능). JWT 토큰은 사용자 인증 정보를 암호화 해 놓은 거임. 근데 로그인 전, 무슨 사용자인지도 모르는 상태에서 토큰을 어캐 만듦 2. 제3자 요청은 cors 설정으로 막음
JWT 토큰은 로그인한 사용자가 누구인 지 알아내려고 쓰는 거임. '내 정보 조회' api에서 '내'가 어떤 유저인 지 알아내려면 jwt 토큰을 복호화해서 아이디 등을 얻고 유저를 조회해야 함. 회원만 쓸 수 있는 api를 구현할 때도 같은 방법으로 jwt 정보로 유저 조회해서 회원이 아니면 에러 응답함
다음 뉴스가 이런 구조였던거같은데
여러가지 이유가 있을수 있습니다. 토큰을 진입점으로 해서 크롤러를 막는다거나하는 보안적인 처리일수도 있고, 토큰을 키값으로 로그인하기전 봤던 상품이나 장바구니에 담아둔걸 로그인 이후에 그대로 가져가게 한다거나 하는등 비즈니스 처리일수도 있어요