Open Authorization의 약자로 인터넷 사용자들이 아이디와 비밀번호를 제공하지 않고도 Access 권한을 얻을 수 있도록 하는 권한부여 산업 표준 프로토콜
이다.
인터넷 산업이 발달하면서 사이트가 증가하고 로그인을 해야하는 상황이 많아지면서 개인정보를 여러 곳에 입력해야 하는 상황이 생겼다.
개인정보를 여러 곳에 입력하면서 피싱에 둔감해지고 무엇보다 Application이 안전하다는 보장이 없기 때문에 보안에 취약해졌다.
당시에는 인증과 권한을 부여하는 요구를 만족 시킬 수 있는 인증방식이 없어서 Twitter의 주도로 OAuth 1.0이 탄생했다.
비밀번호 인증 방식의 문제
- 신뢰 : 사용자가 Application에 ID와 PW를 제공하기 꺼려함
- 피싱 : 각종 Application에 ID와 PW를 계속 제공할 경우 비슷한 아이디와 비밀번호를 사용하게 될거고, 결국 피싱에 노출될 가능성이 높아진다.
무엇보다 OAuth를 사용하면 클릭 한 번으로 간편하게 로그인 할 수 있을 뿐만 아니라, 연동되는 외부 Web Application에서 카카오톡, Google, Github 등이 제공하는 기능을 간편하게 사용할 수 있다는 장점이 있다.
예를들어 외부 Web Application에서 Google로 로그인 하면 API를 통해 연동된 계정의 Google Calendar 정보를 가져와 사용자에게 보여줄 수 있다.
비교 | OAuth1.0 | OAuth2.0 |
---|---|---|
참여자 구분 | User, Consumer, Service Provider | Resource Owner, Client, Authorization Server, Resource Server |
Token | Request Token, Access Token | Access Token, Refresh Token |
Authentication | 요청 된 Signature(서명) | Security Token |
Expired date | 없음 | Access Token 유효기간 부여, 만료 시 Refresh Token 이용 |
Client | Web Service | Web |
OAuth 1.0과 OAuth 2.0은 둘다 보안을 강화하기 위한 프로토콜이다. 하지만 두 프로토콜은 다른 방식으로 작동한다.
OAuth 2.0은 더욱 간단하고 범용적인 프로토콜이며 모바일 기기와 같은 다양한 플랫폼에서 사용할 수 있지만 애플리케이션의 보안을 유지하는데 필요한 추가적인 작업이 필요하다.
OAuth1.0 -> OAuth2.0에서 달라진 점
1. 기능의 단순화, 기능과 규모의 확장성 등을 지원하기 위해 만들어졌다.
2. HTTPS를 통해 암호화를 하여 과정의 단순화를 하였다.
3. 다양한 인증 방식이 제공된다.
4. API 서버에서 Authentication Server와 Resource Server가 분리됐다.
OAuth 1.0과 OAuth 2.0 중에서 어떤 것이 더 안전하다는 것은 사용하는 상황과 환경에 따라 달라진다. 적절한 보안 조치를 취하고 프로토콜을 적절하게 사용한다면 둘 다 안전하게 사용할 수 있다.
용어 | 설명 |
---|---|
사용자(user) | 서비스 제공자와 소비자를 사용하는 계정을 가지고 있는 개인 |
소비자(consumer) | Open API로 개발된 OAuth를 사용하여 서비스 제공자에게 접근하는 애플리케이션 |
서비스 제공자(service provider) | OAuth를 통해 접근을 지원하는 애플리케이션 |
소비자 비밀번호(consumer secret) | 서비스 제공자에게 소비자임을 인증하기 위한 키 |
요청 토큰(request token) | 소비자가 사용자에게 접근 권한을 인증받기 위해 필요한 정보가 담겨있는 토큰 |
접근 토큰(access token) | 인증 후 사용자가 서비스 제공자가 아닌 소비자를 통해서 자원 접근을 허락하는 키를 갖고있는 토큰 |
용어 | 설명 |
---|---|
Resource owner | 사용자 |
Client | Resource Server에서 제공하는 자원을 사용하는 애플리케이션 |
Resource Server(API Server) | 자원을 호스팅하는 서버 |
Authorization Server | 사용자의 동의를 받아서 권한을 부여하는 서버, 일반적으로 Resource Server와 같은 URL 하위에 있는 경우가 많음 |
출처 : 페이코 개발자 센터
계정 ID와 PW 등 계정 인증에 필요한 형태들을 Token으로 표현함으로써, 리소스 서버는 여러가지 인증 방식에 각각 대응하지 않아도 권한을 확인할 수 있게 된다.
아래 인증 종류 4가지 모두 정상적인 인증을 마치면 Access Token이 발급된다.
Access Token은 발급 받은 이후 사용할 수 있는 시간이 제한되어 있다. Access Token이 만료되면 새로운 Access Token을 얻어야 하는데 그때 Refresh Token이 활용된다.
Refresh Token 발급 시점은 권한 서버가 Access Token을 발급해주는 시점에 Refresh Token도 함께 발급해 주기 때문에 다른 절차 없이 Refresh Token 을 미리 가지고 있다. 권한서버에서만 활용되며 리소스 서버에는 전송되지 않는다.
출처 : wso2 docs
출처 : mds블로그
특징
장점
단점
사용사례
출처 : wso2.docs
출처 : mds블로그
특징
response_type=token
이라고 넘긴다.장점
단점
사용사례
출처 : wso2.docs
출처 : mds블로그
특징
grant_type=credentails
라고 넘긴다.장점
단점
사용사례
출처 : wso2.docs
특징
grant_type=client_credentails
라고 넘긴다.장점
단점
사용사례