[SpringBoot] Authentication-JWT-OAuth2-HTTP[0]

유형찬·2022년 8월 23일
0

Springboot

목록 보기
1/2

서론

사실 백엔드에서 1차 뉴비 절단기는 Auth 가 아닐까? 조심스레 말해본다.

백엔드 Resource 를 모두가 사용하는 경우는 거의 없다고 말할 수 있다. 따라서 Authentication 이란

거의 필수적인 요소이다. 거의 모든 서비스에 필요하기 때문에 백엔드 공부 초반에도 필요로 하는 내용이며

스프링에서는 Filter , Handler , Intercepter , Security 등 각종 내용에 연계 되어 공부가 많이 필요한 부분 이다.

물론 그런만큼 Reference Code도 많으며 관련 강의도 많다.

하지만 따라 친다고 내 것이 되냐? 그건 또 아니다... 복잡하고 어려운 만큼 많은 공부가 필요하다.

먼저 이번 파트 블로깅에서는 대표적인 로그인 기술 JWT - Oauth2 인증 방식에 대해서 알아 보도록 하자!

참고로 로그인 방식에는 Session , JWT 등이 있다.

용어

Authentication

  • 인증, 접근 자격이 있는지 검증하는 단계를 말합니다.

Authorization

  • 인가, 자원에 접근할 권한을 부여하는 것입니다. 인가가 완료되면 리소스 접근 권한이 담긴 Access Token이 클라이언트에게 부여됩니다.

Access Token

  • 리소스 서버에게서 리소스 소유자의 보호된 자원을 획득할 때 사용되는 만료 기간이 있는 Token입니다.

Refresh Token

  • Access Token 만료시 이를 갱신하기 위한 용도로 사용하는 Token입니다. Refresh Token은 일반적으로 Access Token보다 만료 기간이 깁니다.

JWT

JWTHeader, Payload, Signature의 각각 세 부분으로 이루어지며, Json 형태인 각 부분은 Base64U로 인코딩 되어 표현된다. 또한 각각의 부분을 이어 주기 위해 .(dot) 구분자를 사용하여 구분한다. 추가로 Base64는 암호화된 문자열이 아니고, 같은 문자열에 대해 항상 같은 인코딩 문자열을 반환한다.

각 부분별 상세 내용은 자료가 많으므로 생략!

Oauth2 인증 방식

Authorization Code Grant│ 권한 부여 승인 코드 방식

다음 내용이 어려울 수 있다. 간단하게 설명 해보겠다!
구글 로그인을 대표적으로 생각 해봤을 때 다음과 같은 구조로 진행하게 된다.

  • mobile request to Google accounts : return code
  • moblie request to Server having this.code
  • Server request to Google token Sever return Access Token
  • Server request to Google Info for request User by using Access Token

간단하게
1. Google에 코드줘!
2. 서버는 코드 받고 구글 토큰 서버에 토큰 줘!
3. 서버는 받은 토큰으로 Google Auth에 정보를 요청 한다.
4. 회원 가입 , 토큰 생성 로직 ( 로그인 ) 실행

이게 끝이다. 간단하지 않나! Oauth2 도 사실 별거 없다. 그냥 정보를 가지고 있는 서버에 정보를 요청 하는 것 뿐

아래는 구글 로그인 Oauth2 를 Postman으로 처리하는 과정이다.
Google Public Docs를 참고했고 기본적인 HTTP 방식의 Oauth 요청이다. 가장 간단하고 자주 쓰이는 방법이다.

공통 사항

`https://accounts.google.com/o/oauth2/v2/auth`

    • parameter 값으로 요청

여기서 Response Type 이 중요한데

Type을 두 가지를 줄 수 있음

  • token
  • code로 두 가지를 선택 할 수 있다.

code 의 경우

중간 API 단계가 하나 더 필요한데

access Token을 받기 위해

[oauth2.googleapis.com](http://oauth2.googleapis.com) 로 다음 필드를 파라미터로 준다.

Filed (아래 키는 임의 의 값임)

client_id

  • API Console Credentials page에서 가져온 클라이언트 ID입니다.

  • 391325632115484-kfq4bh4gewgke6iiu7a428tjja1do9j1n.apps.googleusercontent.com

client_secret

  • Credentials page에서 가져온 API Console 클라이언트 보안 비밀번호

  • GOCGEWS-L3NJ2wegweinkkwOdMcUNmBsyjg35

code

  • 초기 요청에서 반환된 승인 코드입니다.

  • 앞서 받은 code 값

code_verifier

  • 1단계에서 만든 코드 인증기

  • 없어도 됨

grant_type

redirect_uri

  • 지정된client_idCredentials page
    에서 프로젝트에 나열된 리디렉션 URI 중 하나입니다.

  • http://localhost:8080/oaut2/redirect/google

Token 의 경우

  • token으로 받을 경우 Google UserInfo 에 바로 접근 할 수 있는 Access Token을 얻게 된다. 이 경우 앱 또는 웹에서 파라미터로 가져오기 때문에 구글 정보 노출에 위험이 갈 수 있다.

  • 또한 google refresh Token 또한 발급 받을 수 없다.

요약

  1. [https://accounts.google.com/o/oauth2/v2/auth](https://accounts.google.com/o/oauth2/v2/auth) 로 상기 파라미터 넣어 요청
    • return Code
  2. 로그인 하려고 하는 서버에 Code 전송
  3. 서버에서는`https://accounts.google.com/o/oauth2/v2/auth` 에 http 요청
    • return Access Token
  4. 서버에서 Access Token 으로 Https 요청
  • example
  • https://www.googleapis.com
GET /oauth2/v2/userinfo HTTP/1.1
Host: www.googleapis.com
Authorization: Bearer access_token
return Google USER INFO

다음 포스팅은?

다음 포스팅은 이번 포스팅에서 다루지 못한 나머지 3개의 인증 방식과
Spring boot 에서 Oauth-Client , Security 의존성을 이용한 포스팅을 할려고 한다.

profile
rocoli에요

0개의 댓글