인증(Authentication) & 인가(Authorization)

김현우·2020년 8월 12일
0

Session

목록 보기
1/1

인증은 무엇이고 왜 할까요?🤔

유저의 identification을 확인하는 절차
인증은 회원가입과 로그인을 말함

  • 인증과 인가는 API에서 가장 자주 구현되는 기능중 하나
  • Private한 API는 물론이고 Public한 API도 기본적인 인증과 인가를 요구

비밀번호 어떻게 관리해야 할까?🧑‍🔬

Database에 저장시 개인정보를 해싱하여 복원할 수 없도록 한다
통신시 개인정보를 주고 받을 때 SSL을 적용하여 암호화(HTTPS)

SSL(Secure Socket Layer) 프로토콜이란?

처음에 Netscape사에서 웹서버와 브라우저 사이의 보안을 위해 만듦. SSL은 Certificate Authority(CA)라 불리는 서드 파티로부터 서버와 클라이언트의 인증을 하는데 사용


암호화는 어떻게 할까요?📜

단방향 해쉬란?

  • 해쉬함수는 자료구조에서 빠른 자료의 검색, 데이터 위변조 체크를 위해서 쓰이지만 복원이 불가능한 단방향 해쉬함수는 암호학적 용도로 사용함.

  • MD5, SHA-1(둘은 보안취약), SHA-256등이 있다.

  • 허점을 보완하고자 Salting과 Key Stretching이라는 아이디어가 생겨났습니다.


Salting과 KeyStretching🏆

  • 단순 해쉬값이 해킹에 쉽게 노출되기 때문에 Salting이라는 아이디어가 생겨남

  • 입력한 비밀번호와 임의의 생성한 문자열(Salt)를 합쳐서 해싱해서 이 해시값을 저장하는 방법

  • 여기에, 해커가 패스워드 무작위 대입을 통해 해시값을 계산하는데 필요한 시간을 대폭 늘리기 위해 Salting 및 해싱을 여러번 반복해서 원본 값을 유추하기 어렵게 만드는 것이 키 스트렛칭

bcrypt 🏐

salting & Key Stretching 대표적 라이브러리
hash결과값에 소금값과 해시값 및 반복횟수를 같이 보관하기 때문에 비밀번호 해싱을 적용하는데 있어 DB설계를 복잡하게 할 필요가 없음.


인가는 무엇일까요? 🥁

사용자가 서버에 로그인 하면 해당 사용자가 맞는지 확인하는 과정
유저가 로그인에 성공한 후에는 access token이라고 하는 암호화된 유저 정보를 첨부해서 request를 보내게 됨!

http의 특징은 무엇일까요?

바로 request/response 요청과 응답
stateless한 성질(저장하지 않는 성질)

위의 특징때문에 서버는 사용자가 로그인 했을 경우, 로그인 했다는 것을 어떻게 알 수 있을까요?
바로 headers에 메타데이터를 보내서 확인!!

이 메타정보를 바로 JSON Web Token 일명 JWT라고 한다. 접근 허락 증명과 같다.

헤더(Header)는

두가지 정보를 지니고 있습니다.
typ: 토큰의 타입을 지정합니다. 바로 JWT 이죠.

alg: 해싱 알고리즘을 지정합니다. 해싱 알고리즘으로는 보통 HMAC SHA256 혹은 RSA 가 사용되며, 이 알고리즘은, 토큰을 검증 할 때 사용되는 signature 부분에서 사용됩니다.

내용(payload)는

토큰에 담을 정보가 들어있습니다. 여기에 담는 정보의 한 ‘조각’ 을 클레임(claim) 이라고 부르고, 이는 name / value 의 한 쌍으로 이뤄져있습니다. 토큰에는 여러개의 클레임 들을 넣을 수 있습니다.

클레임 의 종류는 다음과 같이 크게 세 분류

  1. 등록된 (registered) 클레임,
  2. 공개 (public) 클레임,
  3. 비공개 (private) 클레임

서명 (signature)는

헤더의 인코딩값과, 정보의 인코딩값을 합친후 주어진 비밀키로 해쉬를 하여 생성

profile
코딩을 잘하는 개발자가 되자!

0개의 댓글