Node.js

[백엔드]인증, 인가

selonjulie 2022. 6. 15. 11:14

인증, 인가

서비스에 대한 접근 제어. 보낼 수 있는 정보, 받을 수 있는 정보에 제한을 줌 eg)맴버십 서비스

API에서 가장 자주 구현되는 기능  

 

인증 Authentication 

  • 회원가입, 로그인 (해당 유저가 그 유저가 맞는지 확인)
    • 회원가입: 등록 절차를 거침
      • 회원가입시 암호화된 비밀번호르 데이터베이스에 저장
    • 로그인: 내가 동일 유저가 맞는지를 확인. 로그인 성공시 (유저가 입력한 정보와 데이터베이스 정보가 일치할 시) JWT를 발행하고, http response로 access token을 프론트 서버(클라이언트)에 전달
      • 아이디, 이메일 주소, 비밀번호 (서비스마다 다름)
      • 비밀번호: 유저, 서버만 알고 있음. 서버에서 데이터를 들고와서 같으면 인증 권한을 주는 과정
        • 비밀번호, 바이오 정보, 주민등록번호는 꼭 암호화되야함 *<->복호화
        • 암호화: 단방향 해쉬(One-way hash)
          • 암호화된 값을 복호화하지 않고, 평문을 다시 동일하게 암호화해서 서로 비교. 암호화하는 방식을 각각 사이트마다 다르게 하기 위해 secret key, sort를 줌 
          • 임의로 생성한 문자열Salt 을 합쳐 해싱하여 해시값을 저장하는 것 
          • bcrypt : 단방향 암호화 하기위해 사용하는 라이브러리(해쉬함수)
            • salting: 실제 비밀번호 이외에 추가적으로 랜덤 데이터를 더해서 해시값을 계산
            • key stretching: 단방향 해쉬값을 계산한 후 그 해쉬값을 해쉬해서 반복하는 것
              • 일반적으로 10번 반복(Algorithm options)
            • 결과값 Digest 암호화된 메시지

 

인가 Authorization

  • 사용자가 인증은 됬고, 인증 후 이 사람이 어떤 서비스에 접근 가능하게 할건지 정하는 것
  • http의 특징: 1.요청, 응답 2.Stateless한 성질
  • 서버는 사용자가 로그인할때 headers에 메타데이터를 보내서 확인함
    • 메타정보: JSON web token, JWT (token도 암호화) 
      • 유저 정보를 담은 JSON 데이터를 암호화해서 클라이언트와 서버 간에 주고 받는 것
    • JWT 구조 (.으로 구분함)
      • header: 토큰타입JWT, 해싱 알고리즘 (양방향)
      • payload: 나의 정보/고유식별 값/해당토큰의 만료시간 (양방향)
      • signature: 정상적으로 암호화가 됬는지, 복호화가 불가능 (단방향 해쉬)