웹 인증 표준 - Basic, OAuth 2.0

#웹 인증 표준

웹 표준을 정의하는 조직인 W3C에서 인증을 위한 여러 표준을 만들었다.

여러 인증 프레임 워크들(Basic, OAuth2.0)이 있는데, 꼭 표준을 지키지 않으면 안되는 것은 아니다. 하지만 상호 범용성을 위해 표준을 안지키는게

가장 일반적이라고 하는 Basic과 JWT에 적합한 OAuth Framework를 봐보자.

Basic Framework

일반적인 HTTP 인증 프레임워크이다.

클라이언트와 서버 라이프 라인 간의 HTTP 메시지를 보여주는 시퀀스 다이어그램.

  1. 처음 server에 접근하면 401(권한없음) 코드와 함께 헤더에 WWW-Authenticate: {type} realm="클라이언트가 인증을 하기 위한 도움메시지" 형태로 응답이 온다.
  2. 클라이언트가 자신의 증명 정보(id, password같은)를 암호화해 Authorization: {type} {암호화된 정보} 형식으로 보낸다.
  3. 검증 후 인증을 완료한다. (or forbidden)

스키마 타입은 Basic 이기때문에 {type}부분에 Basic을 입력해 보낸다.

가장 간단하나 토큰 방식에는 적합하지는 않다.

OAuth 2.0 Framework

OAuth 2.0 Framework - RFC 6749

다양한 클라이언트 환경에 적합한 인증 및 권한의 위임 방법(grant_type)을 제공하고 그 결과로 클라이언트에게 access_token을 발급하는 것이다.

Grant Type

OAuth 2.0 은 기본적으로 클라이언트가 인증을 통해 보호된 리소스를 얻을 수 있게 하는 access token을 얻게 한다.

access token을 얻게하는 인증의 여러 방법도 표준화되어있다. 그것이 Grant Type 이다.

상황에 맞게 grant type을 정해 인증을 진행할 수 있다.

  • Authorization Code Grant : 웹이나 모바일 앱에서 자주 사용된다. access 토큰을 위한 권한 인증 코드를 받을 때 사용하는 인증이다.
  • Implicit Grant : 브라우저 기반 앱이나 모바일 앱에서 자주 사용된다. 권한 인증 코드없이 바로 access 토큰을 받는다.
  • password : 일반적으로 서비스 자체의 모바일 앱에서만 사용되며 대부분 타사 개발자가 사용할 수 없다.
  • Client Credential Grant: 사용자가 아닌 응용프로그램이 access 토큰이 필요할 때 사용하는 인증이다.

참조

  • https://tools.ietf.org/html/rfc6749
  • https://oauth.net/2/
김땡땡's blog

김땡땡's blog

김땡땡