ID/PW
가장 기본이 되는 인증 방식으로, Password 를 암호화 하여 DB 에 저장된 값과 비교하여 사용자를 인증하는 방식이다.
Cookie/Session
Cookie/Session 인증 방식은 기본적으로 session 저장소를 필요로 한다. session 저장소는 로그인 시 사용자 정보를 저장하고 session ID 를 만든 후 HTTP Header 에 얹어서 client (browser 등) 로 전송한다.
Client 는 session ID 를 포함하는 Cookie 를 저장한다.
인증이 필요한 요청에 해당 cookie 를 포함하여 server 로 전송한다.
Basic Auth
ID:PASSWORD 값을 base64 로 Encoding 하여 HTTP Header 에 담아 전송하는 방식이다.
HTTP 통신 도중 패킷을 가로채서 Header 를 Base64 로 Decoding 하면 id:password 정보가 그대로 노출되기 때문에 TLS 위에서 통신해야 한다.
Authorization Header 는 아래 형식을 따른다.
Authorization: Basic <credentials>
credentials 는 다음과 같이 구성한다
- 사용자 ID 및 password 는 ":" 으로 결합한다.
- 결합한 문자열을 base64 로 Encoding 한다.
예시
Authorization: Basic dHdpbGlvOmFob3kh
동작방식
- Server 는 Client 에게 401(Unauthorized) 응답 코드를 가지고 응답과 함께 WWW-Authenticate(en-us) 응답 헤더를 기술해서 권한을 부여하는 방법에 대한 정보를 제공한다.
- Client 는 Http Request Header 의 Authorization 필드에 인증 정보를 포함함하여 전송한다.
WWW-Authenticate(en-us)
- WWW-Authenticate HTTP Response Heaer 는 resource 에 접근하는데 사용해야 하는 인증 방법을 정의한다.
- remalm 은 해설 형식으로 되어서 사용자가 권한 범위를 이해하는데 도움이 되어야 한다.
WWW-Authenticate: Basic realm="Corporate Financials"
Web Token
Self-Contained & Stateless
- 서버의 상태를 저장하지 않음.
- Token 자체로 정보를 가지고 있기 때문에 별도의 인증 서버가 필요 없음.
- 요청을 받은 서버 자체에서 인증 프로세스를 수행할 수 있음.
- JSON 포멧으로 통신하기 때문에 다양한 Client (Web, App 등) 에서 이용 가능.
JWT
- JSON Web Token(JWT)은 개방형 표준이며, JSON 객체를 사용해서 토큰 자체에 정보를 저장하는 Web Token 이다.
- jwt는 토큰 발행 및 갱신을 서버에서 진행하며 토큰을 전달 받은 클라이언트는 전달 받은 accesstoken을 지속적으로 활용하여 서버에 토큰 인증 절차 및 부하를 최소화 하는 방법이다.
- JWT에는 세 가지 구성요소로 이루어져 있다. (각 요소별 구조는 하단에서 상세히 설명)
- Header: 토큰 유형을 비롯해 관련된 서명 알고리즘을 정의.
- Payload: 토큰 발급자(issur), 토큰 유효기간 등을 정의.
- Signature: 보안 서명을 통해 메시지가 전송 과정에서 바뀌지 않은 것을 확인.
OAuth
특징
- 인증 및 인가를 위한 Open Prodocol. 사용자가 kakao, twitter 등과 같은 인터넷 서비스의 기능을 다른 application (Web, mobile 등) 에서도 사용할 수 있게 하는 것.
- 인증(Authentication): 사용자 본인 여부를 확인
- 인가(Authorization): 서비스나 시스템에 접근할 수 있도록 권한을 부여하는 것
SAML (Security Assertion Markup Language)
SAML 은 Identity Provider 와 Service Provider 간의 Authentication 및 Authorization 데이터를 교환하기 위한 XML 기반의 데이터 포맷이다.
쉽게 말해, 보안 인증에 관한 정보를 기술하는 Markup 언어이다.
SAML 이 기술하는 가장 중요한 요구사항은 웹 브라우저 통합 인증, SSO(Single Sign-On) 다. 통합 인증은 인트라넷 수준에서 일반적이지만, 그 밖으로 확장하는 것은 문제가 있으며 상호 운용 사유 기술들이 범람하게 되었다.
이 밖에 브라우저 SSO 문제를 해결하기 위한 접근으로 OpenID Connect 프로토콜이 있다.
> 참고: SSO 는 한 번의 로그인으로 여러 개의 다른 domain 을 이용할 때 필요한 기술이다.
동작 원리
- SAML 인증을 이용하면, 사용자가 앱에 접근할 때마다 SAML ID 공급자가 인증 프로세스를 전달 받는다.
- 사용자가 자격 증명(예: password, OTP 등)을 입력하면 ID 공급자가 확인한다.
- ID 공급자가 SAML assertion 형식으로 Access/Deny response 를 반환한다.
- 인증 성공 시, 사용자에게 Resource 접근 권한 부여
- 인증 거부 시, 권한 거부
참조
'Backend > 인증' 카테고리의 다른 글
| [인증] JWT (개념 정리, 특징, 구성요소, 토큰 탈취) (0) | 2022.10.22 |
|---|---|
| [인증] OAuth 2.0 (개념 정리) (1) | 2022.10.22 |