skarltjr / Memory_Write_Record

나의 모든 학습 기록
0 stars 0 forks source link

Oauth2.0 #13

Open skarltjr opened 3 years ago

skarltjr commented 3 years ago

Oauth2

OAuth(Open Authorization)란?

인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근권한을 부여할수 있는 공통적인 수단. 접근 위임을 위한 개방형 표준. ex) Authorization Code Grant(일반적인 소셜로그인) A 사이트 접근 -> 페이스북 로그인 선택 -> 페이스북에 로그인/패스워드 입력후 인증 -> A사이트에 접근가능한 토큰 발급 -> 인증완료

Access Token 과 Refresh Token

  1. Access Token

    • 요청절차를 정상적으로 종료한 클라이언트에게 발급
    • 자원에 접근할때 권한 확인용으로 사용
    • 클라이언트에 발급된 권한의 대표(문자열 형태)
    • 계정인증에 필요한 형태들을 표현
    • 리소스 서버는 여러가지 인증방식에 대응 하지 않아도 권한을 확인할수 있게 해줌.
    • 제한 시간이 있음.
  2. Refresh Token

    • Access token을 새로 발급받기위해 필요.
    • Access token 발급받을때 같이 발급.
    • token 형태는 Access Token과 동일(문자열)

클라이언트 종류

oauth2의 다양한 인증방법

Authorization Code Grant Type : 권한 부여 코드 승인 타입

화면 캡처 2021-02-02 025054

Implicit Grant Type

화면 캡처 2021-02-02 025111

Resource Owner Password Credentials Grant Type

화면 캡처 2021-02-02 025123

Client Credentials Grant Type

화면 캡처 2021-02-02 025135

skarltjr commented 3 years ago

좀 더 자세한 절차

화면 캡처 2021-02-02 030002

  1. 클라이언트(Redirect Url포함) -> 인증서버에 인증요청
  2. 인증서버는 유저에게 로그인창(페이스북 로그인 창 같은)을 제공
  3. 인증서버 인증완료 -> 인증코드를 클라이언트에게 제공.
  4. 클라이언트(인증코드) -> 인증서버에 Access Token요청
  5. 인증서버가 클라이언트 서버에게 Access Token, Refresh Token 발급
  6. 클라이언트 서버는 발급받은 Access Token을 가지고 Resource 서버에 자원 요청
  7. Resource 서버는 클라이언트 서버에게 자원 전달
  8. Access Token가지고 Resource 요청
  9. Access Token에러 발생
  10. Refresh Token가지고 재발급 요청
  11. Access, Refresh Token 재발급

화면 캡처 2021-02-02 030013

  1. 클라이언트 -> 인증서버 인증요청
  2. 유저는 인증서버를 통해 인증
  3. 인증서버는 Access Token포함하여 클라이언트의 Redirect url 호출
  4. 인증서버에 Access Token 검증요청
  5. 인증서버에서 토큰유효성 판단후 완료되면 토큰의 만기시간과 함께 리턴해줌.
  6. 발급받은 Access Token을 가지고 Resource 요청
  7. Resource 서버에서 해당 자원 리턴

화면 캡처 2021-02-02 030024

  1. User가 Id와 Password를 입력
  2. 클라이언트(Id, Password, 클라이언트 정보) -> 인증서버로 넘김
  3. 인증서버에서 클라리언트 서버로 Access Token, Refresh Token발급

화면 캡처 2021-02-02 030032

  1. 클라이언트 정보를 인증서버에 넘김
  2. Access Token을 Client에 전달

참고 https://cheese10yun.github.io/oauth2/ https://hyunleedev.tistory.com/19