TIL - 인증과 인가

홍예찬·2020년 9월 13일
0
post-thumbnail

1. 인증

- 인증?
회원가입, 로그인을 의미
- 소비자 입장에서 인증은 왜 필요하나?
자신이 맞음을 알려야 하기 때문
- 개발자 입장에서 인증은 왜 필요한가?
어떤 소비자가 어떤 서비스를 어떻게 이용하는지 알고 추적이 가능하도록 하기 위해
- 인증이 필요한 것은?
아이디, 이메일주소, 비밀번호 등(이 중에서 비밀번호가 제일 중요!)

그렇다면 비밀번호는 어떻게 관리해야 할까?

  1. 백엔드 개발자가 데이터베이스에 저장 시 개인 정보를 암호화해서 저장

  2. 통신 시에는 SSL을 적용하여 암호화(사이트 URL옆에 자물쇠가 걸려 있음)

암호화는 어떻게 할까?

  1. 해쉬함수(단방향 해쉬)
  • 과거 MD5, SHA-1을 사용했으나 매커니즘이 드러나면서 보안이 취약해졌고 최근에는 SHA-256을 사용한다.
  • 그러나 같은 비밀번호(예를 들어 1234)를 쓸 경우 같은 알고리즘으로 항상 같은 결과가 도출된다.
  1. SALTING & KeyStreching
  • 단순 해쉬값이 쉽게 노출되기 때문에 입력한 비밀번호와 생성한 문자열(Salt)를 합쳐 해싱해서 새로운 배열을 만듦
  1. bcrypt 라이브러리를 통해서

2.인가

- 인가
사용자가 서비스에 로그인하면 해당 사용자가 맞는지 확인하는 과정
백엔드가 주는 토큰을 프론트엔드는 브라우저에 저장

JSON Web Token

헤더.내용.서명

헤더에는 토큰의 타입과 해시알고리즘 정보가 들어간다.

내용에는 만료시간을 나타내는 공개 클레임, 클라이언트와 서버간 협의하에 사용하는 비공개 클레임을 조합해서 BASE64로 인코딩하여 두번째 요소로 위치.

서명에는 JWT가 원본 그대로라는 것을 확인할 때 사용하는 부분. 누가 토큰을 만들었는지?

profile
내실 있는 프론트엔드 개발자가 되기 위해 오늘도 최선을 다하고 있습니다.

0개의 댓글