작성
·
41
0
일반적으로 서버에 로그인 요청을 보낼 때, 굳이 인코딩된 값을 보내진 않아도 보안상 괜찮을까요? 저는 주로 백엔드 개발을 하다가 풀스택에 관심이 생겨서 플러터 강의를 듣게 되었는데, 대개 로그인 요청을 서버에서 받을 때 헤더에 사용자 정보를 인코딩까지 해서 담아 보낸 값을 서버에서 디코딩을 해본 기억은 없어서요. 주로 json 형식으로 body에 담긴 값들을 바로 읽어서 사용자 검증을 했었습니다.
또한, 강의에서는 로그인 성공 시 access, refresh 토큰을 발급할 때 body에 담았지만, 헤더에 담아도 상관은 없을까요?
답변 2
1
안녕하세요!
참고로 인코딩은 보안과 관련이 없습니다.
인코딩은 누구나 디코딩이 가능하기 때문에 말씀하신 논리에선 아무런 차이가 없다고 생각 할 수 있습니다. 보안을 더 챙기고 싶으시면 암호화를 하는게 맞습니다.
서버에서 디코딩 해본적이 없다고 말씀하셨는데 개발 체계가 잘 갖춰져있는 큰 기업으로 올라갈수록 토큰 인증을 더 많이 사용하게 되실겁니다.
그렇다고 해서 json 바디에 그냥 받아서 인증하는 법이 뭐가 한참 잘못됐다는건 아닙니다. 어차피 정보만 전달하면 되는게 맞기 때문입니다. 하지만 일반적으로 많이 사용하는 방식을 도입해둔다면 장점이 다양하게 있겠죠?
반환을 헤더에 하셔도 따지고보면 딱히 상관은 없습니다. 조금 극단적으로 생각해보면 PATCH 요청인데 PUT 요청을 가능하게하는 API를 작성 할수도 있겠죠. 일반적이진 않지만 좀 이상하더라도 서로 이미 약속을 자 해둔 상태라면 할수도 있긴합니다. 마찬가지로 헤더에는 보통 "메타데이터" 또는 인증 관련 데이터만 전달하는데 로그인 요청의 경우 반환하는 토큰 값이 "메타 데이터"가 아닌 실질적 요청에 대한 응답 데이터라고 저는 판단 합니다. 그렇기 때문에 저같으면 무조건 바디에 담겠지만 선임 개발자가 죽어도 헤더에 넣어야한다고 한다면 그냥 그러려니 할 것 같은 정도의 문제긴 합니다.
그런데 요청때는 바디에 인증 정보를 넣어놓고 응답때는 토큰을 헤더에 반환한다? 좀 멋지지 않긴 합니다.
감사합니다!
0
안녕하세요, 인프런 AI 인턴입니다. helloworld님.
서버에 로그인 요청을 보낼 때 인코딩된 값을 보내지 않아도 되는 이유와 헤더 및 바디를 통한 토큰 전송에 대한 질문을 주셨네요.
인코딩 및 보안:
일반적으로 HTTP 요청 시, 사용자의 정보는 네트워크 상에서 노출될 가능성이 있으므로 보안에 주의를 기울여야 합니다. 로그인 시, 비밀번호를 포함한 민감한 정보는 Base64 인코딩보다 HTTPS 프로토콜 사용을 통해 암호화되는 것이 일반적입니다. Base64는 단순 인코딩이기 때문에 보안을 제공하지 않습니다. 보안을 강화하고 싶다면 데이터 전송 시 SSL/TLS와 같은 보안 계층을 활용하는 것이 좋습니다.
토큰의 위치:
Authorization
헤더에 포함시키고, Refresh 토큰은 보안성을 높이기 위해 서버와 클라이언트 간의 특정한 프로세스를 통해 관리하는 것이 좋습니다.다음의 유사한 질문도 참고해보시면 도움이 될 것입니다:
- 보안 및 content type 질문: Base64 인코딩과 서버 요청 시의 Content-Type에 대한 설명을 볼 수 있습니다.
- Basic 토큰을 API 서버가 받아서 어떤식으로 검증을 하는지 궁금합니다: API 서버가 Basic 토큰을 처리하는 방식에 대한 정보입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
도움 많이 됐습니다. 상세한 답변 감사드립니다 ^.^