질문이요.

미해결질문
hsjo12 프로필

현재 두개의 시크릿키 client 와 frontSecret 키들이 있잖아요.

 

1.

clinentSecret 키는 서버간의 인증을 위한 키 

frontSecret키는 프론트에서 서버로 보내줄때 인증을 위한키

보안상의 이유로 클라이언트 키가 프론트에서 보이는 것 보다

프론트 키가 프론트에서 보이는 걸 선호하는 이유가, 프론트키 와 유저가 직접입력한 도메인을 알아야 기에 좀 더 안전해서 프론트 키를 쓴다. 

지금 제가 이해 한게 맞나요?

 

2.

현재 프론트에서 보내는 프론트 키 + 도메인으로 토큰을 발급 받을때요. 

localhost:8003/ 을 입렵하면, 

라우터 / 이거 에서 frontSecret 키를 main.pug 로보내고, 

main.pug는 다시 locallhost:8002/v2/token 으로 보낸후, 

이 라우터 안에서

DB에 제대로 유저가 등록한 도메인으로 요청을 했는지,

where: { host: url.parse(req.get('origin')).host } 로 

DB 체크후  CORS로 넘겨진후..

 

/token 라우터로 가서, 보내준 frontKey가 맞는지 체크하고 

토큰을 발급을 해주잖아요. 

그래서 /token 라우터 코드를 

const { frontSecret } = req.body; 프론트키받고

where: { frontSecret }  이런식으로 DB에서 체크후 

DB에 프론트키가 있는지 여부를 보고, 토큰을 발행해주나요. 

 

그렇다면, 이전에 clientSeceret 키로 주고 받았잔아요.

예를 들면, nodebird-call 을 보시면, 

request 함수에, 

const URL = 'http://localhost:8002/v2';
const request = async (req, api) => {
try {
if (!req.session.jwt) { 
const tokenResult = await axios.post(`${URL}/token`, {
clientSecret: process.env.CLIENT_SECRET,
});
.......}

 

이런식으로 axios를 통해서 http://localhost:8002/v2/token 에다가, clientSecret을 

보내고, 위와 같은 흐름으로 client 키를 통해서

v2.js 에서 도메인도 체크하고난후, 

/token 라우터를 통해서,  

const { frontSecret } = req.body; 프론트키받고

where: { frontSecret }  이런식으로 DB에서 체크후 

체크를 하는데 , 문제는 frontSecret을 받으려고하잖아요.

 

이럴경우는 clientSecret을 따로 받을 수 있게, 

v2-1.js 이런식으로 새로 만들고,

아예  http://localhost:8002/v2-1/token 이런식으로 요청을 받을수 있게 하는게 나은가요 ??

 

3. 그리고, 만약에 clientSecret만 으로 토큰을 

받는다면, 도메인 체크는 할 필요가 없어지는게 맞죠?

애초에 프론트에 나오지 않아 해킹에 위험이 적어지니까요.

조현영 프로필
조현영 3달 전

1. 프론트 키는 프론트 환경에서 무조건 노출되게 되는데, 노출돼도 안전하기 때문에 씁니다.

2. 아뇨, v2/token 한 라우터에서, 프론트에서 요청을 보냈는지, nodebird-call같은 서버에서 요청을 보냈는지에 따라 frontSecret을 쓸지, clientSecret을 쓸지 분기 처리하는게 좋습니다.

3. 도메인 체크도 하는 것이 좋습니다. 보안 체크는 철저할 수록 좋아요.

문장훈 프로필
문장훈 3달 전

프론트에서 보낸 요청인지, 서버에서 보낸 요청인지 어떻게 구분할 수 있는건가요?? 요청을 받는 서버 입장에서는 같은 요청 아닌가요?   혹시...어떤 시크릿 키를 보내왔는지에 따라서 구분하는 건가요?

libertines11 프로필
libertines11 2달 전

제가 제대로 이해한건진 모르겠지만...

views/main.pug 에서 요청한건 프런트라고보고

routes/index.js 에서 요청한건 서버라고 볼때

main.pug에선 frontSecret 키를 보내고

index.js 에서는 clientSecret 키를 보내면

api 쪽의 v2.js 에서 if문으로 나눠서 프런트와 서버키를 구분해서 처리하면 될것 같아요

지식공유자 되기
많은 사람들에게 배움의 기회를 주고,
경제적 보상을 받아보세요.
지식공유참여
기업 교육을 위한 인프런
“인프런 비즈니스” 를 통해 모든 팀원이 인프런의 강의들을
자유롭게 학습하는 환경을 제공하세요.
인프런 비즈니스