OAuth
OAuth
OAuth
- 사용자가 비밀번호를 입력하지 않고 어떤 웹 사이트 / 애플리케이션에게 다른 웹사이트의 정보 접근 권한을 부여하는 표준
- ex) 프로그래머스는
github로 로그인
을 통해 사용자의 정보를 github로부터 가져 옴
- ex) 프로그래머스는
- 접근 권한을 위임하는 행위
- 1.0a 버전과 2.0 버전 존재
OAuth 1.0a
- 가장 최초의 oauth 버전은 1.0이나, 세션 고정 공격을 회피하기 위해 1.0a 버전으로 수정되었다고 함
- Access token 이 만료되지 않는 문제 및 웹이 아니면 사용이 힘듦
- 또한 암호화를 직접 수행해야 하므로 번거로움
OAuth 1.0a 참여자
- User: Service provider에 계정을 가지고, consumer를 사용하려는 사용자
- Service provider: OAuth 관련 open api를 제공하는 서비스
- Consumer: Service provider의 정보를 사용하려는 웹 서비스
OAuth 1.0a 동작 방식
- User가 consumer에서 소셜 로그인 버튼을 클릭
- Consumer가 service provider에게 request token을 요청하고 받음
- Consumer는 해당 token을 이용해 user를 로그인 페이지로 이동
- User가 로그인(인증)을 수행
- Consumer가 service provider에게 access token을 요청하고 받음
- 이후 consumer는 사용자 정보가 필요할 때마다 access token을 이용해 service provider의 api 호출
OAuth 2.0
- 1.0a의 단점을 보완해 업그레이드한 버전
- https가 필수로 사용하며 암호화를 https에게 맡김
- API 서버와 인증 서버를 분리 가능하게 설정
- Access token의 life time을 지정해 만료되도록 설정
OAuth 2.0 참여자
2.0으로 변경되며 용어 체계가 달라짐
- Resource Owner: 실제 사용자
- Client: Resource server에서 정보를 가져오려고 하는 웹 사이트/애플리케이션
- Resource Server (API 서버): 사용자의 자원(이름, 프로필 등)을 호스팅하는 서버
- Authorization server (인증 서버): 사용자 동의를 받아 client에 권한을 부여하는 서버. Resource server과 같이 구성되기도 함
OAuth 2.0 동작 방식
편의상 client는 서비스, resource owner는 사용자, authroization server는 auth server라고 지칭.
- 서비스가 auth server에 자신의 서비스를 등록함
- 서비스는 client ID, client secret, redirect uri를 받음
- 사용자가 서비스에서 소셜 로그인 버튼을 클릭함
- 서비스는 auth server에 redirect URI, client ID 등과 함께 요청을 보냄
- Auth server는 사용자에게 로그인 페이지를 제공하고, 로그인 수행
- Auth server는 4번에서 요청한 서비스가 올바른지 검증
- 검증이 완료되면 Auth server가 사용자에게 authorization code를 redirect uri에 담아서 전달
- 사용자는 redirect uri로 redirect되고, 이 과정에서 서비스는 authorization code를 얻음
- 서비스는 authorization code, client ID, client secret등으로 auth server에 access token 요청
- Auth server는 access token, refresh token을 client에게 발급
- 사용자는 로그인된 화면으로 이동됨
- 이후 서비스는 사용자 정보가 필요할 때마다 access token으로 resource server의 api 호출
- Access token은 만료 되면 refresh token을 이용해 재발급 받음
References
- https://tecoble.techcourse.co.kr/post/2021-07-10-understanding-oauth/
- https://showerbugs.github.io/2017-11-16/OAuth-%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C
- https://en.wikipedia.org/wiki/OAuth
- https://hudi.blog/oauth-2.0/
- https://linuxism.ustd.ip.or.kr/1543
- https://oauth.net/core/1.0a/