- 이처럼 웹 사이트 계정 인증에서 타 서비스의 계정을 사용하는 인증 방식을 OAuth 2.0 인증 방식이라고 한다.
{
"sub": "110248495921238986420",
"name": "Aaron Parecki",
"given_name": "Aaron",
"family_name": "Parecki",
"picture": "https://lh4.googleusercontent.com/-kw-iMgD
_j34/AAAAAAAAAAI/AAAAAAAAAAc/P1YY91tzesU/photo.jpg",
"email": "aaron.parecki@okta.com",
"email_verified": true,
"locale": "en",
"hd": "okta.com"
}
- 서비스 등록
- 특정 서비스의 OAuth 인증을 사용하기 위해서는, 해당 서비스에 내가 OAuth 인증을 사용 할 수 있는 어플리케이션을 등록해야 한다.
- 예를 들어, 내가 URL을 가지는 웹 서비스를 하나 만들었는데, 내 웹 서비스에서 '구글 로그인' 방식의 OAuth 인증을 추가로 사용할 수 있도록 지원하고 싶다고 가정
- 구글 API 콘솔에 접속하여 새로운 프로젝트를 생성해주는 것이 첫번째!
- 프로젝트의 메인 콘솔 페이지에서 사용자 인증 정보를 만들어야 한다.
- OAuth 클라이언트 ID 만들기
- OAuth를 사용할 서비스의 유형, 이름, redirectURL
- 클라이언트 ID, 클라이언트 비밀번호 발급 -> Google OAuth 인증 사용
- OAuth 클라이언트 ID 만들기
2. OAuth 2.0 동작 방식
- 인증의 과정을 '타 서비스에게 위임' 하는 인증 방식
- 위임을 한다는 뜻은 웹 사이트 내, '구글 로그인' 인증을 넣었다고 해서 사용자가 구글 웹 사이트에 직접 로그인하는 것이 아니다라는 뜻
- 내 웹 사이트에 접속한 사용자의 정보는 여전히 내 웹 사이트에서 관리해야 한다.
- 구글이 해주는 일은 웹 사이트 사용자가 '구글 로그인' 기능을 통해 구글에게 전송한 계정 정보가 유효한지 확인 후, 유저 정보 중 일부를 내 웹 사이트에서 제공해주는 '인증' 과정만을 처리해주는 것이다.
- 구글 인증 페이지
- 웹 사이트에 접속해 로그인 페이지에서 구글 로그인 버튼을 누르면 아래와 같이 Google 인증 페이지로 이동
- 해당 인증 페이지는 구글에서 제공하는 구글 인증 서버 페이지 :https://accounts.google.com/o/oauth2/auth
- 단순히 이 링크를 들어가면 400 오류 페이지
- 필수적으로 제공해줘야 하는 파라미터를 전달해주지 않음
- 즉, OAuth를 인증을 사용하고 싶다는 것이지만 다짜고짜 인증 서버 페이지 주소를 입력하면 어떤 웹 사이트에서 OAuth 인증을 요청하는지를 알 수 없기 때문에 오류 발생
- 누가 요청 했는지 서버에 알려주기 위해서 OAuth 클라이언트 생성 시, 받았던 클라이언트 ID이다.
- 웹 서비스를 구글에 프로젝트로 등록 했고, 등록 시 웹 사이트 URL 정보를 제공했기 때문에 구글에서는 클라이언트 ID를 주면 구글에서 어떤 웹 사이트에서 인증을 요청하는지 자체적으로 식별 가능
- 클라이언트 ID 외에도 많은 추가 정보를 제공해줘야 한다 : Redirect URL
- 구글 인증 서버에 올바른 구글 계정 정보를 입력하게 되면 유효 하다면 해당 유저의 정보를 우리의 웹 서비스로 전송
- 웹 사이트로 계정 정보를 전송 해야 현재 로그인 한 유저 정보가 어떤 유저인지 식별 가능
- 웹 서비스에서 자체적으로 유저 정보를 관리 가능 (OAuth 인증 방식에서 google은 단지 '인증' 만을 다루고, 실제 유저 정보는 웹 사이트에서 관리)
- 이를 위해 사용해야 하는 것이 RedirectURL 이다.
- 구글 인증 서버에서 OAuth를 사용하기 위해서는 인증 서버에 RedirectURL 정보를 줘야 하고, 서버는 해당 url로 유저의 정보를 전달해준다.
- 구글 인증 서버에 올바른 구글 계정 정보를 입력하게 되면 유효 하다면 해당 유저의 정보를 우리의 웹 서비스로 전송
3. 액세스 토큰
- 바로 유저 정보를 전달해주면 보안 상 취약 하므로 하나의 단계를 더 추가하는데, 이 단계를 구현하기 위해 사용하는 것이 토큰이다.
- 사용자가 구글 인증에 성공하면, 구글에서는 우리의 RedirectURL로 리다이렉트 하는데 이때, 사용자 정보를 보내주기 전에 URL에 code라는 파라미터 변수를 추가해준다.
- 이 code를 통해 구글 계정 정보에 접근 할 수 있는 토큰을 얻는다.
- https://accounts.google.com/o/oauth2/token 해당 URL로 code 정보를 포함하여 POST로 요청을 보내야 한다.
- 클라이언트 ID, 비밀번호 도 추가적으로 제공해줘야 하며 RedirectUrl도 함께 제공해줘야 한다.
- https://www.googleapis.com/oauth2/token
POST Body 정보: code=코드정보, client_id=클라이언트-아이디, client_secret=클라이언트-비밀번호, redirect_uri=https://www.test.com/auth/google/callback
- https://www.googleapis.com/oauth2/token
- 토큰이 발급 되면 해당 토큰을 사용하여 https://www.googleapis.com/oauth2/v3/userinfo 라는 URL에 우리의 액세스 토큰 정보를 포함하여 GET 요청을 보내면, 아래와 같은 유저 정보를 JSON 형태로 얻을 수 있다.
{
"sub": "110248495921238986420",
"name": "Aaron Parecki",
"given_name": "Aaron",
"family_name": "Parecki",
"picture": "https://lh4.googleusercontent.com/-kw-iMgD
_j34/AAAAAAAAAAI/AAAAAAAAAAc/P1YY91tzesU/photo.jpg",
"email": "aaron.parecki@okta.com",
"email_verified": true,
"locale": "en",
"hd": "okta.com"
}
'배움 기록_실무 ✏️' 카테고리의 다른 글
static의 모든 것 (0) | 2022.10.10 |
---|---|
AWS Database Migration Workshop (1) | 2022.05.25 |
OAuth 동작 방식 (1) | 2022.03.29 |
쿠팡 파트너스 API 연동 (2) | 2022.02.28 |
Spring batch 개발 (4) | 2022.02.10 |