본문 바로가기

Java

(Java) OAuth

3개의 참여자

각각이 누군지?

 

나의 서비스

 

사용자

 

나의 서비스가 연동하려고 하는 그들의 서비스 (구글, 페이스북)

 

그들의 서비스를 접속할 수 있도록 허가를 받아야 함

 

사용자가 나의 서비스에 그들의 서비스의 아이디, 비밀번호를 넘겨서 

나의 서비스가 저장 후 그들의 서비스에 넘겨서 상호작용을 한다.

 

이런 식의 방법은 너무 위험하다.

누군지 알 수 없는 서비스에 그들의 서비스의 아이디, 비밀번호를 넘겨주면 그 아이디, 비밀번호를 

다른 위험한 일에 사용될 가능성이 있다.

 

이런 일이 발생하지 않게 하려고 OAuth라는 기능이 있다.

 

OAuth를 사용하게 되면 아이디, 비밀번호를 저장을 안 해도 되고 그들의 서비스에서 accessToken을 발행을 하기 때문에 

사용자가 요청을 하게 되면 나의 서비스에서는 이 accessToken을 사용해서 그들의 서비스에 상호작용을 할 수 있다.

 

이 accessToken은 모든 정보가 아닌 나의 서비스에 필요한 정보만을 가질 수 있다.

 

OAuth :

사용자 이름, 비밀번호 등의 실제 사용자 자격 증명을 공유하지 않고

한 서비스에서 다른 서비스로 권한 부여를 전달하기 위한 프로토콜입니다.

===== 출처 =====

 

 

3개의 주체

나의 서비스

Client

(리소스 서버에 접속해서 자원을 가져가는 클라이언트)

 

나의 서비스 사용자

Resource Owner

(자원의 소유자)

 

그들의 서비스

Resource Server

(제어하고자 하는 자원을 가지고 있는 서버 // 데이터)

 

===========

 

Authorization Server

(인증과 관련된 처리를 전담하는 서버 // 인증)

사용자에게 토큰을 발급해주는 서버

 

Authorization Code

(AccessToken을 얻기 위한 자격 증명)

 

AccessToken

(보호된 자원에 접근하기 위한 토큰)

 

Scope

(토큰의 권한을 지정)

 

Authentication

인증 절차

 

Aiuthorization

권환 부여

(권한에 따라 Scope에 권한을 지정)

 

사용이유

세션과 jwt를 이용한 로그인 방식은 서비스 별로 사용자는 새로운 로그인 정보를 따로 입력을 해야 하기 때문에 불편함

검증되지 않은 앱에서 사용자의 정보를 관리해야 하는 불안함

검증된 앱을 통해 효율적이고 안전한 로그인 가능