웹 인증 표준 - Basic, OAuth 2.0
#웹 인증 표준
웹 표준을 정의하는 조직인 W3C에서 인증을 위한 여러 표준을 만들었다.
여러 인증 프레임 워크들(Basic, OAuth2.0)이 있는데, 꼭 표준을 지키지 않으면 안되는 것은 아니다. 하지만 상호 범용성을 위해 표준을 안지키는게
가장 일반적이라고 하는 Basic과 JWT에 적합한 OAuth Framework를 봐보자.
Basic Framework
일반적인 HTTP 인증 프레임워크이다.
- 처음 server에 접근하면 401(권한없음) 코드와 함께 헤더에
WWW-Authenticate: {type} realm="클라이언트가 인증을 하기 위한 도움메시지"
형태로 응답이 온다. - 클라이언트가 자신의 증명 정보(id, password같은)를 암호화해
Authorization: {type} {암호화된 정보}
형식으로 보낸다. - 검증 후 인증을 완료한다. (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/