728x90
OAuth를 사용하는 이유
- 보안의 수준을 알 수 없는 애플리케이션에서 일일히 계정을 만들어 사용하면 ID/PW 관리가 어렵고 개인정보가 유출되면 연쇄적으로 피해가 심각하기에, 보안 수준이 어느정도 검증된 사이트(ex, google, facebook)의 API를 이용해서 인증을 받는 방법이 보안상 좋기 때문이다.
OAuth2 동장 방식
- OAuth 인증 방식은 인증의 과정을 '타 서비스에게 위임'하는 인증방식.
- 예를 들어 내 사이트에 구글 로그인 인증을 넣었다고 해서 사용자가 구글 웹사이트에 직접 로그인하는 것이 아니라, 사용자의 정보는 내 사이트에서 관리하고, 구글 로그인 기능을 통해 구글에게 전송한 구글 계정 정보가 유효한지 확인한 후, 유효하다면 해당하는 구글 유저 정보 중 일부를 내 사이트에 제공해 주는 '인증' 과정만 처리한다.
OAuth2 용어 정리
- Resource owner(자원 소유자)
→ Resource server(구글, 페이스북, 카카오 등)의 계정을 소유하고 있는 사용자 - Client
→ 구글, 페이스북, 카카오 등의 API 서비스를 이용하는 제 3의 서비스 - Authorization Server(권한 서버)
→ 권한을 관리해주는 서버, Access Token, Refresh Token등을 발급, 재발급해주는 역할 - Resource Server
→ OAuth2 서비스를 제공하고, 자원을 관리하는 서버 - Access Token
→ Authorization Server로부터 발급받은 인증 토큰, Resource Server에 전달하여 서비스 제공받을 수있다
OAtuth2 인증 과정
- 페이코 참조
OAuth2 프로세스
→ PAYCO 인증서비스 = Authorization Server / PAYCO API 서비스 = Resource Server
15 단계는 Authorization Code 발급 요청 URL을 통해 진행할 수 있습니다.8 단계는 서비스에서 callback URL 을 통해 전달받은 Authorization Code를 사용하여 Access Token 요청 API를 통해 진행할 수 있습니다.
7
8 단계에서 발급받은 Access Token은 서비스에서 자체적으로 저장, 관리해야 합니다.
10~11 사용자의 서비스 요청 시 회원정보가 필요하다면 Access Token을 사용해 API를 호출할 수 있습니다.
→ 기본적인 구조 및 프로세스
- 사용자가 내가 만든 웹 사이트에서 어떤 웹페이지에 접근하려고 요청
- 내 사이트에서는 인증되지 않은 사용자의 요청을 받으면 "구글에게 인증 받고 올래?" 하고 동의를 구하는 페이지 띄움
- 사용자가 동의를 누르면 구글로 인증 요청이 간다
- 구글에서는 로그인이 안되어있으면 로그인을 할 수 있는 화면을 보여주고, 로그인이 되어있으면 "내가 만든 웹사이트에서 너의 구글 계정에 있는 정보를 가져다 쓴다는데 동의할거야?" 라고 구글이 동의를 구하는 화면 보여준다
- 사용자가 동의하면 구글은 바로 정보를 주지 않고 인증 코드(code)를 나의 웹 사이트에게 준다
- 인증 코드(code)를 받은 웹 사이트는 기존에 웹 서비스를 구글에 등록하면서 받은 client ID, client secret, 받은 인증 코드 code를 구글에게 보낸다. (총 3개의 정보)
- 구글이 올바른 클라이언트 요청이었음을 검증했기 때문에 access token을 준다
- → 이 access token을 받아야 웹 사이트에서 사용자의 정보에 접근할 수 있다
- 이제 사용자의 요청에 따라 구글 계정의 정보가 필요하다면 access token으로 정보를 받아 쓸 수 있다
728x90
'[AWS-SM] > Cognito' 카테고리의 다른 글
[중요][AWS] Authenticate users using an AWS ALB and Cognito to access API deployed (0) | 2023.02.15 |
---|---|
[중요] Secure your API Gateway with Amazon Cognito User Pools (0) | 2023.02.05 |
[AWS] Cognito 회원 가입 및 로그인 기능 구현하기(feat. amazon-cognito-identity-js, TypeScript) (1) | 2023.02.04 |
[AWS] Cognito User Pool 생성하기 (0) | 2023.02.04 |
[AWS] Cognito란? (0) | 2023.02.04 |