OAuth2 기초개념

심주흔·2023년 9월 19일
0
post-thumbnail

OAuth2로 구글 로그인을 구현하며 요즘 대부분의 서비스에서 제공하는 OAuth 방식의 로그인 개발을 공부한다.

🦑 1. OAuth란?

OAuth는 제 3 서비스에 계정 관리를 맡기는 방식이다 흔히 볼 수 있는 네이버로 로그인하기, 구글로 로그인하기 같은 방법이다.

<필수 용어>
리소스 오너(Resource owner) : 자신의 정보를 사용하도록 인증 서버에 허가하는 주체. 서비스를 이용하는 사용자

리소스 서버(Resource server) : 리소스 오너의 정보를 가지며, 리소스 오너의 ㅈ어보를 보호하는 주체를 의미

인증 서버(Authorization server) : 클라이언트에게 리소스 오너의 정보에 접근할 수 있는 토큰을 발급하는 역할을 하는 애플리케이션을 의미함

클라이언트 애플리케이션(Client application) : 인증 서버에게 인증을 받고 리소스 오너의 리소스를 사용하는 주체를 의미함.

리소스 오너 정보조를 취득하는 4가지 방법

  • 권한 부여 코드 승인 타입:
    클라이언트가 리로스에 접근하는데 사용하며, 권한에 접근 할 수 있는 코드와 리소스 오너에 대한 액세스 토큰을 발급받는 방식으로 OAuth 2.0에서 가장 잘 알려진 방법이다.

  • 암시적 승인 타입:
    서버가 없는 자바스크립트 웹 애플리케이션 클라이언트에서 주로 사용하는 방법이다. 클라이언트가 용청을 보내면 리소스 오너의 인증 과정 이외에는 권한 코드 교환 등의 별다른 인증 과정을 거치지 않고 액세스 토큰을 제공받는 방식이다.

  • 리소스 소유자 암호 자격증명 승인 타입:
    클라잉너트의 패스워드를 이용해서 액세스 토큰에 대한 사용자의 자격 증명을 교환하는 방식이다.

  • 클라이언트 자격증명 승인 타입:
    클라잉너트가 컨텍스트 외부에서 액세스 토큰을 얻어 특정 리소스에 접근을 요청할 때 사용하는 방식이다.

🦑 2. 권한 부여 코드 승인 타입

권한요청
: 스프링부트 서버가 특정 사용자 데이터에 접근하기 위해 권한 서버에 요청을 보내는 것. 요청 URL는 권한 서버마다 다르지만 보통은 클라이언트 ID, 리다이렉트 URI, 리다이렉트 URI, 응답 타입 등 파라미터로 보낸다.

GET spring-authorization-server.example/authorize?
	client_id=66a36b4c2&
    redirect_uri=http://localhost:8080/myapp&
    response_type=code&
    scope=profile

client_id
인증 서버가 클라이언트에 할당한 고유 식별자. 클라이언트 애플리케이션을 OAuth 서비스에 등록할 때 서비스에서 생성하는 값

redirect_uri
로그인 성공 시 이동해야하는 URI

response_type
클라이언트가 제공받길 원하는 응답 타입. 인증 코드를 받을 때는 code 값을 포함해야 한다.

scope
제공받고자 하는 리소스 오너의 정보 목록

데이터 접근용 권한 부여
인증 서버에 요청을 처음 보내는 경우 사용자에게 보이는 페이지를 로그인 페이지로 변경하고 사용자의 데이터에 접근 동의를 얻는다.(1회)
이후 인증서버에서 동의 내용을 저장하고 있기 때문에 로그인만 진행함. 로그인이 성공되면 권한 부여 서버는 데이터 접근할 수 있게 인증 및 권한 부여를 수신함.

인증 코드 제공
사용자가 로그인에 성공하면 권한 요청 시에 파라미터로 보낸 redirect_uri로 리다이렉션 되며 파라미터에 인증 코드가 제공된다.

GET http://localhost:8080/myapp?code=a1s2d3f4g5

액세스 토큰 응답
인증 코드를 받으면 액세스 토큰을 교환해야한다. 액세스 토큰은 로그인 세션에 대한 보안 자격을 증명하는 식별 코드를 의미한다. 보통/token POST요청을 사용한다.

액세스 토큰으로 API응답&반환
제공받은 액세스 토큰으로 리소스 오너의 정보를 가져올 수 있다. 정보가 필요 함에 따라API 호출을 통해 정보를 가져오고 리소스 서버는 토큰이 유효한지 검사한 뒤 응답함.

리소스 오너의 정보를 가져오기 위한 요청 예)
GET spring-authorization-resource-server.example.com/userinfo
Headeer: Authorization: Bearer aasdffb

🦑 3. 쿠키

사용자가 어떠한 웹 사이트를 방문했을 때 웹사이트가 사용하는 서버에서 여러분의 로컬 환경에 저자하는 작은 데이터를 말한다.

  1. 클라이언트가 정보를 요청하면 서버에서 정보를 값으로 넣은 쿠키를 생성해서 요청한 정보를 HTTP헤더와 함께 돌려보낸다.

  2. 클라이언트는 로컬(브라우저)에 쿠키를 저장

  3. 사이트에 재방문할 때는 사용자가 로컬 환경에 있는 쿠키와 함께 서버에 요청한다.

쿠키는 이전에 방문한 적이 잇는지 알 수 잇고 이전에 로그인을 했다면 로그인 정보도 유지할 수 있다.
쿠키는 키와 값으로 이루어져 있으며 만료기간, 도메인 등의 정보를 가지고 있다.
HTTP 요청을 통해 쿠키의 특정 키에 값을 추가 할 수 있다.

profile
이봐... 해보기는 했어?

0개의 댓글