cognito와 oauth2.0
요새 팀원들과 사이드 프로젝트를 수행하고 있는데, 로그인할 때 aws cognito를 사용하기로 했다.
난 이번에 처음 들어보는 것이여서 매우 생소했다.
cognito는 aws 에서 제공하는 인증과 사용자 관리 솔루션이다. cognito 에 대해 알아보기 전에 나는 oauth도 정확히 무엇인지 몰랐다. 그냥 소셜 로그인 정도?? 그래서 oauth 에 대해서 먼저 공부해보았다. 그리고 내가 기억하기 위해 기록을 남긴다.
OAuth 는 무엇이며 왜 써야할까?
OAuth 의 핵심은 사용자의 아이디, 비밀번호를 공유하지 않고 서드파티 애플리케이션에 제한적 접근할 수 있도록 하는 것이다.
예를 들어 우리 프로젝트에 구글 로그인을 넣고 싶다면 기본적으로 유저의 구글 아이디와 비밀번호를 공유 받아야 한다. 그러나 유저 입장에서, 그리고 구글 입장에서 생각해보면 제 3자에게 아이디와 비밀번호를 제공하는 것은 매우 위험한 일이다. 따라서 OAuth는 사용자가 구글에게 자신의 인증 정보를 제공하고 인증을 받은 후 애플리케이션에 대한 액세스 토큰을 발급받는다. 사용자는 개인적인 정보를 공유하지 않고, 이 액세스 토큰을 이용해서 서드파티 애플리케이션에게 제한적인 권한을 부여할 수 있다.
추가적으로 개발자의 입장에서 로그인 및 회원가입을 위해 사용자의 개인정보를 저장하고 관리하면서 따라오는 이슈들이 (구글, 페이스북 등에 위임함으로써) 줄어드는 이점이 있다.
OAuth 의 terminology
- Resource Owner: 리소스에 대한 액세스 권한을 부여할 수 있는 주체 (= user)
- Client: 리소스 오너를 대신하여 보호된 리소스에 대해서 접근 요청하는 애플리케이션 (= third party application)
- Resource Server: 보호된 리소스를 호스팅하는 서버 (= google)
- Authorization Server: 리소스 오너를 인증하고 인증을 받은 후 액세스 토큰을 발행하는 서버
OAuth 의 flow
1. 애플리케이션 내에 유저가 로그인 요청
2. 애플리케이션은 유저를 authorization server 로 리다이렉트
3. authorization server 는 사용자를 로그인 및 권한 부여 프롬프트로 리다이렉트
4. 유저가 로그인 인증
5. authorization server 는 일회용 인증 코드와 함께 애플리케이션으로 리다이렉트
6. 인증 코드, 앱의 클라이언트 아이디, 클라이언트 시크릿 키 같은 자격 증명을 authorization server 로 전송
7. authorization server 는 받은 인증 데이터 검증
8. authorization server 는 토큰 응답
9. 애플리케이션은 액세스 토큰으로 user 의 액세스 정보 요청
10. 요청된 데이터 응답
Amazon Cognito 의 기능과 이점
Cognito는 사용자 인증, 권한 부여, 사용자 관리를 제공하는 서비스이다. Cognito 는 사용자 풀이라는 것을 제공하는데, 말 그대로 사용자를 직접 관리해준다.
- 소셜 로그인을 통합하여 제공할 수 있다. Facebook, Amazon, Google 같은 소셜 미디어를 통한 로그인을 지원한다.
- 회원가입 및 로그인을 Cognito 에서 관리해주기 때문에 개발자는 Resource Server 만 관리하면 된다.
- 자격 증명 풀을 함께 사용하면, 로그인 시 다른 AWS 서비스와 함께 사용할 수 있다.
나는 처음에 OAuth 2.0 에서 사용자의 액세스 토큰 정보를 Resource Server 에 저장한다고 하여 사용자 풀을 사용하면 Resource Server 를 대체하는 것이라 생각했다. 그러나 사용자 풀은 사용자 인증, 관리에 사용되는 서비스이다. 사용자 인증 및 액세스 토큰 발급 처리만 사용자 풀에서 처리해주고 Resource Server 는 실제 리소스에 대한 접근 제어나 다른 처리 등을 할 때 사용할 수 있다.
출처
유튜브 생활코딩
https://www.youtube.com/watch?v=hm2r6LtUbk8&list=PLuHgQVnccGMA4guyznDlykFJh28_R08Q-
Auth0
Get started using Auth0. Implement authentication for any kind of application in minutes.
auth0.com
https://docs.aws.amazon.com/ko_kr/cognito/latest/developerguide/what-is-amazon-cognito.html
Amazon Cognito란 무엇입니까? - Amazon Cognito
Amazon Cognito란 무엇입니까? Amazon Cognito는 웹 및 모바일 앱에 대한 인증, 권한 부여 및 사용자 관리를 제공합니다. 사용자는 사용자 이름과 암호를 사용하여 직접 로그인하거나 Facebook, Amazon, Google
docs.aws.amazon.com