회사의 로그인 코드를 이해하는 과정에서 관련된 개념들을 공부해 보았다.
Authentication (인증)
사용자의 신원을 확인하는 과정
Factors
- 지식 기반: 사용자만 알고 있는 것 ex) 비밀번호, 이름, 주민번호, 사번
- 소유 기반: 사용자만 소유하고 있는 것 ex) 인증서, OTP, SMS 인증
- 속성 기반: 사용자만이 고유하게 지닌 것 ex) 지문, 홍채, 정맥, 얼굴
- One Factor Authentication: 1가지 요소를 사용하는 인증
- Two Factor Authentication: 2가지 요소를 사용하는 인증
- Multi Factor Authentication: 2가지 이상의 요소를 사용하는 인증
Techniques
- 비밀번호 기반 인증 방식
- 주로 단방향 해쉬 함수로 비밀번호를 암호화하여 DB에 저장함
- cf) 단방향 해쉬 함수: 원본 메시지를 암호화할 수 있음. 원본 메시지를 알면 암호화된 메시지를 알 수 있지만, 반대는 불가능함
- OTP: 1회용 비밀번호를 사용하는 인증 방식
- 2FA/MFA: 여러 인증 요소를 사용하여 유연하고 보안이 강화된 인증 방식
- SSO: 한 번의 인증으로 다양한 시스템에 재인증 없이 접근할 수 있는 인증 방식
- Social Authentication: SNS의 기존 자격 증명을 사용하는 인증 방식
- API Authentication: 서비스에 액세스하려는 사용자를 API key/token으로 식별하는 인증 방식
- 생체 인증: 고유한 생물학적 특징을 사용하는 인증 방식
Authorization (권한 부여)
사용자의 특정 리소스에 대한 접근 권한을 확인하는 과정
Techniques
- API Key
- Access Token (ex: JWT Token)
- OAuth: 사용자가 비밀번호를 제공하지 않고 다른 웹사이트의 본인 계정 정보에 대해 접근 권한을 부여할 수 있는 방식
access token을 사용한 절차
- Authentication을 통해 access token을 발급함
- request 시 access token을 첨부하여 보냄
- 서버는 받은 access token을 복호화하여 사용자 정보를 얻음
- 사용자 정보를 통해 사용자의 권한을 확인함
- 권한이 있다면 해당 request를 처리함
JWT (JSON Web Token)
JSON 형식의 토큰으로, 주로 인증/인가를 위해 사용됨
구성
<Header>.<Payload>.<Signature>
장점
- 토큰에 사용자 정보가 포함되어 있어 세션 관리가 필요 없으므로 서버 자원과 비용을 절감할 수 있음
- signature를 통해 토큰의 위변조 여부를 검증할 수 있음
단점
- server가 client를 제어할 수 없음
- 내용이 많아지면 네트워크 통신 시 부하가 생길 수 있음
- 쉽게 payload를 디코딩할 수 있으므로 민감한 정보를 담을 수 없음
- 탈취 당하면 만료될 때까지 대처가 어려움
보완 방법
- 짧은 만료 기한을 설정함
- 민감한 작업을 수행할 때에는 2FA와 같이 추가적인 인증을 통해 보안을 강화함
- request 시 access token을 재발급하여 만료 기한을 연장하는 방식
- request 시 access token이 만료됐을 때 refresh token으로 access token을 재발급하는 방식
cf) refresh token: access token의 재발급을 위한 토큰으로, access token보다 긴 만료 기한을 가짐. 또한 검증을 위해 서버에 따로 저장해 두어야 하며, 추가적인 I/O 작업이 수반됨
Reference:
https://baek.dev/post/24/
http://www.opennaru.com/opennaru-blog/jwt-json-web-token/
https://www.daleseo.com/jwt/
https://velopert.com/2389
https://brunch.co.kr/@jinyoungchoi95/1
https://m.blog.naver.com/dilrong/222039327623