인증(Authentication) : 로그인이라고 생각하면 된다. 이 사이트의 회원임을 아이디와 패스워드를 통해서 인증받는것 즉, 사용자의 신원을 확인하는 절차
인가(Authorization) : 인증 후 권한을 주는 것 즉, 사용자의 권한을 확인하고 허가하는 절차
쿠키
- 브라우저에 저장되는 키와 값이 들어있는 데이터 파일
- 클라이언트의 상태 정보를 저장
- 사용자가 따로 요청하지 않아도 Request시 Header에 담겨 서버에 전송
세션
- 서버측에서 관리
- 클라이언트를 구분하기 위해 세션 ID 부여
- 세션 ID를 통해 클라이언트 식별
JWT (Json Web Token)
- Json 포멧을 이용하여 사용자에 대한 속성을 저장하는 Claim 기반의 Web Token

특징
- 서버 기반 인증 시스템과 달리 상태를 유지하지 않는다.
- DB를 조회하지 않고 인증된 회원인지 식별할 수 있다.
단점
- 쿠키, 세션과는 다르게 토큰 자체의 데이터 길이가 길다.
- payload는 암호화 되지 않기 때문에 유저의 중요한 정보를 담을 수 없다.
- 토큰을 탈취 당하면 대처하기 어렵다.
OAuth (인가)
웹, 모바일, 데스크톱 어플리케이션에서의 간단하고 표준적인 방법으로 보안 인가를 허용하기 위한 개방형 표준 프로토콜

사용자, 후디닷컴, 구글을 OAuth에서 부르는 용어가 존재한다.
- 사용자 : Resource Owner
- 리소스를 소유하며 접근할 권한을 가지고 있고, 클라이언트에게 그 권한을 위임하는 주체
- 후디닷컴 : Client
- 리소스 소유자 대신 위임 받은 권한으로 리소스를 요청하는 주체
- 구글 : Authorization Server, Resource Server
- Authorization Server : 리소스 소유자를 인증하고 클라이언트에 액세스 토큰을 발급하는 서버
- Resource Server : 액세스 토큰을 사용하여 리소스 요청을 수락하고 응답할 수 있는 리소스를 가지고 있는 서버


- Scope : 클라이언트에게 허용된 리소스 접근 범위 (e.g 카카오톡 이름, 프로필 사진)



OpenID (인증)
- 비영리기관인 OpenID Foundation에서 추진하는 개방형 표준 및 분산 인증 프로토콜
- OpenId Connect 1.0은 OAuth 2.0 프로토콜 위에 있는 간단한 ID 계층이다. 이를 통해 클라이언트는 REST와 유사한 방식으로 최종 사용자의 신원과 기본적인 프로필 정보를 얻을 수 있다.
- 신뢰할 수 있는 서비스(구글, 페이스북, 트위터 등)에 사용자 인증 절차를 위임
- 사용자는 자신이 신뢰할 수 있는 서비스의 인증 정보 하나로 여러 서비스에서 인증
- 서비스마다 ID와 PW를 일일히 외우고 있지 않아도 된다.
- IdP(Identity Provider): 구글 카카오와 같이 OpenID 서비스를 제공하는 당사자
- RP(Relying Party): 사용자를 인증하기 위해 IdP에 의존하는 주체

OAuth 2.0과 OpenID Connect의 목적 차이
- OAuth 2.0 목적 : Access Token을 발급받고 Access Token을 통해 리소스에 접근
- OpenID Connect 목적 : ID Token을 발급받고 ID Token을 통해 사용자 식별정보를 얻는다.
ID Token
- 사용자 식별 정보를 담고 있는 토큰
- JWT 형식으로 표현


OpenID를 통해서 사용자 정보를 가져오는 이유
- OAuth 2.0은 사용자에 대한 정보를 명시적으로 제공하지 않는다.



출처