WEB/MSA[Cloud Native Java]

[8] OAuth

PSAwesome 2019. 7. 5. 10:24
반응형

OAuth는 Open Authorization의 약자로서 인터넷에서 토큰 기반 인가의 표준이다.

 


인가토큰의 장점은?

  • 아이디와 패스워드가 노출되는 시간 간격을 줄임
  • 클라이언트가 패스워드에 얽매이지 않게 함
  • 잘못된 클라이언트가 올바른 사용자의 계정을 잠글 수 없도록 보장

 

인증 (Authentication) : 사용자가 누구인지 확인

인가 (Authorization) : 사용자가 무슨 권한을 가지고 있는지를 확인

 

인증과 인가는 다른 성격의 프로토콜을 지니고 있기 때문에 

인증은 OAuth와 별개로 다른 곳에서 처리되어야 하며, 

인증이 처리된 후에는 OAuth가 제어권을 넘겨받는다.

 

토큰은 클라이언트에 따라 달라지며,

인증이 완료되면 토큰을 써서 요청에 대한 인가를 받을 수 있다.

 

 

 

 

OAuth 관련 용어

  • 클라이언트: 보호받는 요청을 만들어내는 애플리케이션. 아이폰, 안드로이드, 애플리케이션, HTML5 브라우저 등과 같은 것이 클라이언트이다. (페이스북 사례에선 페이스북의 IOS 앱, 데스크탑 브라우저)
  • 자원 소유자 (Resource Owner): 자신이 소유한 정보에 대한 접근 권한을 부여하는 최종 사용자를 가리킨다.
  • 자원 서버 (Resrouce Server): 보호되는 자원을 호스팅하는 서버로서 접근 토큰을 포함해 보호받는 요청을 접수하고 응답할 수 있다. (클라이언트가 접속하는 보안처리된 API)
  • 인가서버 (Authorization Server): 인증 과정을 통과하고 인가를 획득한 자원 소유자의 클라이언트에게 접근 토큰을 발부한다. (페이스북 사례: 페이스북으로 로그인 버튼을 클릭할 때 리다이렉트 되는 페이스북 서비스가 인가 서버다. 인가서버 = 자원서버)

인가 획득의 4가지 방법

 

  1. 서비스 쪽 애플리케이션 :
    간접화를 통해 중간자 공격을 막는다. (접근 토큰의 유출을 막을 수 있다.)
  2. HTML5와 자바스크립트 단일 페이지 애플리케이션 :
    SPA는 웹 페이지에서 소스 코드를 로딩한 후 전적으로 브라우저에서 동작한다.
    때문에 어떤 비밀 정보도 SPA에 담아서는 안 된다.
    일부 권한을 부여하겠냐는 알림에 동의버튼을 클릭 시 http://some-third-party-service.com/an_oauth_callback#token=12345와 같은 형식으로 접근 토큰을 URL 프래그먼트에 포함해서 단일 페이지 애플리케이션으로 다시 리다이렉트해준다. URL 프래그먼트의 변경은 브라우저의 리로딩을 유발하지 않는다. 이 방식을암시적 부여 (implicit garnt)라고 한다. 암시적 부여에는 서비스 쪽 컴포넌트가 없기 때문에 클라이언트가 접근 토큰을 볼 수 있도록 명확하게 최적화되어 있다.

  3. 사용자 없는 애플리케이션 :
    특정한 사용자가 없이 클라이언트의 인증정보(credentials)만으로도 접근 토큰을 요청할 수 있다.
    (배치, 분석 애플리케이션) 제한적이나마 권한을 부여받을 수 있고 이 방식을 클라이언트 인증정보 부여(client credentials grant)라고 한다.

  4. 신뢰할 수 있는 클라이언트
    사용자가 아이디와 패스워드로 인가 서버에 접근해서 접근 토큰으로 교환한다. 이 방식을 자원 소유자 패스워드 인증정보 부여(resource owner password credentials grant)라고 한다.
반응형