구조는 예를들어 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의.의미가 없음...
명쾌한 답변 부탁함
관리목적ㅇㅅㅇ
관리 목적이라는게 누가 api 사용하는지 말하는거?
웹브라우저 속 니 쿠키에만 담길거고 요청할때는 인증서로 개인키 교환하고 암호화해서 통신할거라 상관없지않나
그 전에 client id 랑 client secret키가 노출되더라고.
본문이 내가 이해한게 맞나 헷갈리네 "제 3자도 같은 client id와 secret으로 토큰 발급받아서 요청보낼수있지않나?" 제 3자는 그 secret을 어떻게 알게 되는거임?
base64로 인코딩하는데 그건 base64로 디코딩 가능함
관리자 도구에서 소스코드 보니까 t.append("Authorization", "Basic " + btoa(this.clientId + ":" + this.clientSecret)); 이렇게 작성했더라고
인코딩하기 전 값을 어떻게 제 3자가 알게 되는거임?
t.append("Authorization", "Basic " + btoa(this.clientId + ":" + this.clientSecret)); 이렇게 하면 결과값이 Authrization: 토큰값임. 이게 request header에 들어가는거고, 이건 관리자도구의 네트워크탭에서 확인 가능함. 저 토큰값을 base64로 다시 디코딩하면 id랑 secret임
그러니까 그 토큰값을 제3자가 알 방법은 없잖음 내 브라우저 안에서 가지고 있다가 https 암호화해서 전송할테니까
저게 따로 내가 로그인하니까 client id랑 secret이 발급된게 아니라 그냥 홈페이지에 들어가면 클라이언트쪽에서 미리 넣어놓는 값임. 로그인 필요없이 상품정보들 보여줄때
ㅇㅎ 그걸 일종의 사용자 추적 수단으로 쓰는 것 아닐까? 매번 랜덤함수 돌려서 그 값을 만드는거면 사용자마다 값이 다를테니까 비회원이 하는 행동 추적하는데 사용할 수 있을 듯. 다른 용도는 딱히 떠오르는게 없네
흠 그럴수도 있겠네 오키오키 감사용