1. 실습으로 마스터하는 OAuth 2.0 란?
코드숨 인스타를 통해 OAuth2.0 핸즈온 세션을 알게 되어 신청했다.
자세한 설명은 코드숨 링크를 참고!
https://www.codesoom.com/courses/handson
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
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
'📝 Review > 📝 후기와 회고' 카테고리의 다른 글
회고 | (5월~8월) 그 모든 파도는 한 번뿐이고, 결국 모두 지나간다. (12) | 2024.10.09 |
---|---|
회고 | 견디고 버티면 어느 순간 늘게 되어있다. (11) | 2024.05.11 |
회고 | 2023년 - 지고 싶지 않다면 이길 때까지 계속하면 된다. (6) | 2024.01.13 |
회고 | 그리고 누구나 두려워하면서 창작을 하는구나. (3) | 2023.07.04 |
후기 | 2023 Cloud Study Jam 수료 후기(Kubernetes in Google Cloud (1) | 2023.05.13 |
댓글