회고 | 코드숨 핸즈온 후기 | 실습으로 마스터하는 OAuth 2.0: 기본부터 보안 위험까지

    1. 실습으로 마스터하는 OAuth 2.0 란?

    코드숨 인스타를 통해 OAuth2.0 핸즈온 세션을 알게 되어 신청했다.

     

    자세한 설명은 코드숨 링크를 참고!

    https://www.codesoom.com/courses/handson

     

    핸즈온 : OAuth 2.0 | 코드숨

    올바른 공부 방법으로 깊이있는 개발 지식과 기술을 배워보세요.

    www.codesoom.com

     

    2. 어떤 것을 기대하며 이 과정을 신청했을까?

    2-1.  직접 실습해보며 OAuth와 가까워지기

    2-2. 인증, 인가에 대한 막연한 두려움 없애기 

     

    3. 새롭게 알게된 건 무엇일까?

    3-1. OAuth란?

    OAuth2.0은 인가 프레임워크이다. (인증 프로토콜이 아님)

    아닌 이유 : Github 토큰을 가져왔다고 해서 그 사람이 “김성은”인건 아니다.

     

    OAuth는 크게 2가지만 기억하면 된다.

    1. 토큰을 얻는다.

    2. 토큰을 사용한다.

     

    3-2. OAuth2.0 동작 원리 

     

    출처 : 코드숨

     

    크게 6단계로 나눌 수 있다.

     

    1.  브라우저야 너 인가 서버한테 토큰 받아서 다시 나한테 와 

    클라이언트 서버로 로그인 요청을 보내면, 클라이언트 서버는 브라우저로 리다이렉트 응답을 보낸다. 파라미터는 다음과 같다.

    (공식 문서)

     

    키  필수값 여부 설명 
    client_id REQUIRED 클라이언트 식별자
    response_type REQUIRED 어떤 인가 방법으로 보낼지 명시
    (* code는 OAuth2.0의 기본적인 방법인 인가 코드 플로우를 뜻함)
    redirect_uri OPTIONAL 인가 마친 후 Callback URL 
    scope OPTIONAL 인가할 접근 권한

     

    2. 브라우저는 인가 서버로 가고, 인가 서버는 인증할 수 있는 페이지를 보여준다. (* 특정 사이트에서 '깃헙 로그인'하면, 보이는 화면이라고 생각하면 된다.)

     

    3. 인가 서버로 가서 로그인

     

    4. 인가 서버  : 사용자가 접근 권한 승인했어? ㅇㅋ code 줄게 이거 가지고 클라이언트 서버로 가 

    접근 권한를 사용자가 승인하면, 인가 코드를 발급하여 1번 과정에서 요청했던 redirect_uri 뒤에 쿼리 파라미터를 추가하여 브라우저에게 클라이언트 서버로 돌아가라고 리다이렉트 응답을 보낸다.  (authorize/result?code=1234)

     

    5. 브라우저야 code 받아왔어? 이게 진짜 인가 서버에서 받아온 건지 확인하고 accessToken 줄게

    브라우저는 클라이언트 서버에게 요청을 보내고, 요청을 받은 클라이언트 서버는 인가 서버에게 code, client_id, client_secret을 보내 accessToken을 얻는다.

     

    6. 나 브라우전데 드디어 토큰 받았ㄷr.. 토큰 사용한다..

     

    3-3. Github OAuth 앱 권한 부여 방법 

    https://seongeun-it.tistory.com/319

     

    [Github] OAuth 앱 권한 부여 방법

    Github Docs https://docs.github.com/ko/apps/oauth-apps/building-oauth-apps/creating-an-oauth-app OAuth 앱 만들기 - GitHub Docs 개인 계정에서 또는 관리자 액세스 권한이 있는 조직에서 OAuth app을(를) 만들고 등록할 수 있습

    seongeun-it.tistory.com

     

     

    3-4. CSRF 공격 방지 

    Cross Site Request Forgery(사이트 간 요청 위조)의 약어이다. 

    OAuth2.0에서 state는 필수 파라미터는 아니지만, 보안을 위해 사용을 권장하고 있다.

    여러 가지 방법이 있지만 CRSF Token을 사용하여 실습했다.

     

    세션에 state에 임의의 문자열 담아 인가 서버로 보내고, 인가 서버는 code는 만들어서 state는 클라이언트 서버로부터 받은 그대로 돌려준다. 클라이언트 서버는 처음 세션에 등록한 state와 인가 서버에서 받은 state가 맞는지 비교하여 없거나 다르면 요청을 거부해야 한다.

     

    다시 말해. 인가 코드를 가지고 있는 주체와 인가를 요청한 주체가 같은지를 확인한다.

     

    만약, state를 넣지 않는다면 해커가 악의적인 코드를 강제로 삽입할 수 있다. 내 계정에 다른 사람의 접근 권한이 생길 수 있다니 상상만 해도 끔찍하다. 

     

    3-5. OpenId Connect 

    OAuth2.0 위에서 구현된 OpenId Connect는 OAuth2.0과 기본적인 메커니즘은 동일하다.

    OAuth2.0와 차이점은 OpenId Connect는 토큰에 대한 정보가 있다. (OAuth는 토큰에 대한 정보 불투명하다.)

    즉, OpenId Connet를 사용하면 내가 가진 서버에 인증기능을 만들지 않아도 된다.

     

    3-6. 실습 영상 

     

    4. 무엇을 느꼈을까?

    출처 : 나

     

    현재, 회사에서 API Gateway를 개발하고 있는데, 그래서인지 OAuth는 인증, 인가는 어떻게 처리하는지 궁금했다. 

    작년에 수습 프로젝트 과제로 카카오 로그인을 시도했으나 대차게 실패했던(?) 경험이 있기 때문에 이번 핸즈온 세션이 더더욱 기대되었다. 어떤 기술 스택을 사용할지 궁금했는데 JavaScript + Next.js를 사용했다. 실습에 바로 들어가기 전에, OAuth의 동작 원리에 대해 설명해주셔서 좋았다.어떤 걸 하게 되는지 전체적인 흐름을 알 수 있어서 세션에 대한 기대감이 커졌다. 오랜만에 JavaScript를 썼고, Next.js도 처음 접해봐서인지 실습하면서는 따라치느라 정신이 없었다. @.@ 소규모로 진행된 세션이라 실습 중간중간 모르는 것도 편하게 물어볼 수 있어서 좋았다. 실습이 끝나고 나서 기술적으로 어려운 부분이나, 커리어적인 고민을 나누는 시간이 있었는데, 세션만큼 의미 있는 시간이었다. 개발자들의 성장을 돕는다는 코드숨 설명처럼 윤석 님과 대화하면서 가치관이 잘 맞다고 생각해서 디스코드에도 가입했다. 실습 끝나고 나서 자료도 아낌없이 공유해 주셔서 좋았다. 아쉬운 점이 있다면.... 타이핑하느라 놓친 설명이 있어서 아쉬웠다는 것, 그리고 사무실이 너무 추웠다는 것..^.ㅜ (너무 장점만 나열하자면 광고 같아 보이니까 ,, 내돈내산입니다.) 누군가 추천 의사를 물어보면 그렇다고 말하고 싶다. 코드숨에서 진행되는 다른 스터디들도 관심있게 지켜봐야겠다!

     

     

    Ref.

    https://docs.tosspayments.com/resources/glossary/oauth

     

    OAuth 프레임워크 | 토스페이먼츠 개발자센터

    OAuth는 제3자의 클라이언트에게 보호된 리소스를 제한적으로 접근하게 해주는 프레임워크에요.

    docs.tosspayments.com

     

    728x90

    댓글