
외부 서비스에서도 인증을 가능하게 하고 그 서비스의 API를 이용하게 해주는 것, 이것을 OAuth라고 한다.

위와 같이 구글, 페이스북 등 외부 소셜 계정 기반으로 간편하게 회원가입 및 로그인 할 수 있고 연동 된 외부 어플리케이션 기능들을 간편하게 사용할 수 있음! 이럴 때 사용되는 프로토콜이 OAuth이다.
예시 - Payco


출처: https://developers.payco.com/guide/development/start
인증 예시
authorization code 요청
GET
https://alpha-id.payco.com/oauth2.0/authorize?
client_id={client_id}&
redirect_uri=http://nhnent.dooray.com/auth/signin/process/payco?nextUrl=%2F&
response_type=code&
serviceProviderCode=DOORAY&
termsYN=Y&
state={random_string}
access-token 요청
POST
https://alpha-id.payco.com/oauth2.0/token
grant_type=authorization_code&
code=NyP8aIFKIS6r8tm2&
client_id={client_id}&
client_secret={client_secret}&
state={random_string}
응답예제
{
"access_token_secret" : "32321vveerrer2fv",
"state" : null,
"expires_in" : "11111",
"token_type" : "Bearer",
"access_token" : "AAAA4NV74n+ns623iceBu343424C4cMZ0A5T5pGjwfMF5b/Yj+LyDBqK8+/jvVTIKHbzM47wFw8qUf0fTCw4+/ko+hSgAGClMLykvaDJ7/0B/OxlM99999AqkvAw4niLVho14Izga2c5IksQOjTTv5L8keM4yTplN50xzGzYJpV1vmj3NGWtPKHaJL3fLVa41hvZmxOw00edQeOYAw/vhLW7iQDuJjpTciWgmgEUd9if7EL+tqIJmE6fRSH42b4aNOX5XgiaEr6hUDisUoHG5kqOd",
"refresh_token" : "AAAAb7F2pdU0FZuxHreJD12wefvber/LIsbLGHdW85lVuJ3OaNDguDnGx5+FZeZaIbBTDRBcaneT9WlrDNORX8eyVf5bgL6RrENn5tKhjdjQlmsXxH1wCJDUa2J2QtQOHRTxAg="
}
클라이언트가 어떠한 웹사이트를 방문할 경우, 그 사이트가 사용하고 있는 서버를 통해 클라이언트의 브라우저에 설치되는 작은 기록 정보 파일을 말한다.
Cookie & Session 기반 인증
HTTP/1.1 200
Set-Cookie: JSESSIONID=FDB5E30BF20045E8A9AAFC788383680C;
서버는 클라이언트의 로그인 요청에 대한 응답을 작성할 때, 인증 정보는 서버에 저장하고 클라이언트 식별자인 JSESSIONID를 쿠키에 담는다.
이후 클라이언트는 요청을 보낼 때마다, JSESSIONID 쿠키를 함께 보낸다.
서버는 JSESSIONID 유효성을 판별해 클라이언트를 식별한다.
JWT(JSON Web Token)란 인증에 필요한 정보들을 암호화시킨 토큰을 의미한다. JWT 기반 인증은 쿠키/세션 방식과 유사하게 JWT 토큰(Access Token)을 HTTP 헤더에 실어 서버가 클라이언트를 식별한다.

Header
{
"alg": "HS256",
"typ": "JWT"
}
Payload
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
}
Signiture

인증과정