-
cors 오류와 oauthTIL 2021. 5. 15. 23:26
이번 미션에서는 git을 써서 oauth를 구현하려고 했다.
하지만 cors에러가 났고 한참을 헤매다 아이작의 도움으로 해결했다.
그럼 cors 오류란 무엇인가?
https://www.youtube.com/watch?v=6QV_JpabO7g&t=147s
이 영상을 통해 학습하자.
cors는 같은 오리진이 아닐 때 발생한다. 같은 프로토콜, 호스트, 포트번호가 아니면 cors에러가 난다는 것이다.
+ 응답도 200 ok이어야 한다.
(허락을 구하는 리퀘스트가 한번 먼저나가고 허락이 되면 다음 진짜 요청이 나간다.)
https://gisungcu.tistory.com/220
2021.05.30 기록장
To Do Oauth 리팩토링 책 읽기 Done Oauth 리팩토링 책 읽기 예외 처리 Weekly goal 책 읽기 블로그 읽기 Feeling 오늘은 예외 처리와 oauth 리팩토링을 진행했다. 예외처리는 dan의 코드를 보고 좀 따라 했고, o
gisungcu.tistory.com
그럼 하나의 페이지에서 다른 페이지에게 요청을 하면 매번 cors에러가 나는가?
정보를 주는 쪽에서 Access-Control-Allow-Origin를 통해 특정 오리진을 허용해줄 수 도 있고 프론트에서 프록시등을 통해 우회할 수 있다.
하지만 내가 만난 문제는 git에서 cors를 허용해주지 않았기에 나는 문제였다.
https://github.com/isaacs/github/issues/330
OAuth web flow endpoints don't support CORS · Issue #330 · isaacs/github
All of the API v3 endpoints on api.github.com support CORS (https://developer.github.com/v3/#cross-origin-resource-sharing): however, the github.com endpoints involved in creating an OAuth2 access ...
github.com
https://stackoverflow.com/questions/42150075/cors-issue-on-github-oauth/42150336
cors issue on github oauth
import request from 'superagent'; const self = this; request .post('https://github.com/login/oauth/access_token') .set('Content-Type', 'multipart/form-data') .query({ ...
stackoverflow.com
먼저 문제의 flow다
FE배포를 하지 않아서 localhost:3000번을 사용하신다. 근데 처음에 리액트의 fetch를 사용해서 서버/api/login을 호출 하기에 cors 에러가 난다. (리액트를 잘 몰라서 내가 이해한 fetch는 요청을 하면 리스폰스가 있어야 한다는 것이다. 그렇기에 리다이렉트 시 git에 정보를 요청하고 거기서 리스폰스가 왔는데 오리진이 달라 cors오류가 나는 것이다.)
그렇기에 서버에서 access-control-allow-origin 열어줘 봤자 오류가 나는 것이었다
https://developer.mozilla.org/ko/docs/Web/HTTP/CORS
교차 출처 리소스 공유 (CORS) - HTTP | MDN
교차 출처 리소스 공유(Cross-Origin Resource Sharing, CORS)는 추가 HTTP 헤더를 사용하여, 한 출처에서 실행 중인 웹 애플리케이션이 다른 출처의 선택한 자원에 접근할 수 있는 권한을 부여하도록 브라
developer.mozilla.org
이제 아이작이 제시해준 flow를 보자
FE는 이제 바로 git으로 간다. 근데 fetch를 사용하는 것이 아니라 a태그나 버튼으로 새로운 창을 띄우는 것이다.
(fetch를 통해 오리진과 다른 곳의 정보를 요청하는 것이 아니라 새로운 페이지를 띄우는 것이다.)
oauth app의 callbackUrl을 (localhost:3000/anything)로 하면 FE에서 code를 받을 수 있다. 그런 뒤 BE 쪽으로 code를 전달해주면 BE는 왔다 갔다 하고 jwt를 리스폰스로 돌려준다.
마음에 안 드는 점은 callbackUrl을 localhost로 한다는 것이다. FE를 배포한다면 FE의 url로 바꿔보자.
두 번째 flow이다.
맨 처음의 flow에서 달라진 것은 fetch가 아닌 url로 요청한다는 것이다.
하지만 이 것의 문제는 callbackUrl이 배포서버이기에 다시 FE 쪽으로 jwt를 반환할 수 없다는 것이다.
(callbackUrl을 배포서버로 둔 이유는 code를 바로 받아서 처리하기 위함이었다.)
다 끝나고 버튼 하나만 있는 페이지를 둬서 localhost로 jwt를 다시 보내던가..
그래서 2번째 flow로 가는 게 가장 좋아 보인다.
그렇게 찾아보니 다른 곳의 flow와 동일하기에 믿음이 간다.
https://shinsunyoung.tistory.com/86
Spring Boot에서 CORS 적용해보기
안녕하세요! 이번 포스팅에서는 CORS가 무엇인지 간단하게 알아보고, Spring Boot에서 CORS를 적용하는 방법에 대해 알아보겠습니다. 전체 코드는 Github에서 확인이 가능합니다. ✍️ 저는 만들어둔 AP
shinsunyoung.tistory.com
https://spring.io/guides/gs/rest-service-cors/
Enabling Cross Origin Requests for a RESTful Web Service
this guide is designed to get you productive as quickly as possible and using the latest Spring project releases and techniques as recommended by the Spring team
spring.io
oauth와 jwt 구현 시 고민했던 점이다.
oauth는 그냥 인증을 위한 것이고 jwt는 로그인 유지를 위한 것이다.
https://stackoverflow.com/questions/44324080/how-to-store-access-token-oauth-2-auth-code-flow
How to store access token? (Oauth 2, Auth code flow)
From what i understand the purpose of the Authorization Code flow is to exchange the auth code for access token. This exchange happens between the server which serves the page and authorization ser...
stackoverflow.com
git oauth
https://docs.github.com/en/developers/apps/identifying-and-authorizing-users-for-github-apps
Identifying and authorizing users for GitHub Apps - GitHub Docs
Identifying and authorizing users for GitHub Apps Your GitHub App can perform actions on behalf of a user, like creating an issue, creating a deployment, and using other supported endpoints. When your GitHub App acts on behalf of a user, it performs user-t
docs.github.com
리프레쉬 토큰으로 언제 새로운 access토큰을 호출해야 할까?
access 토큰이 만료될 때마다? 슬라이딩 세션 방식은 특정 요청을 하면 그곳에서 리프레쉬 토큰을 가지고 새로운 access token을 받아오는 전략이다.
https://blog.ull.im/engineering/2019/02/07/jwt-strategy.html
ull.im
울려 퍼지다.
반향하다.
공명하다.blog.ull.im
세션에 accessToken을 담는 것은 동의 못하지만 jwt의 유효시간을 보고 재발행을 요청하는 쪽은 FE이다.
BE에서 타임 아웃 에러가 나면 할 수 도 있을 거 같다.
https://swalloow.github.io/implement-jwt/
JWT를 구현하면서 마주치게 되는 고민들
최근 모바일, 웹 등 다양한 환경에서 서버와 통신하면서 많은 사람들이 JWT 토큰 인증 방식을 추천합니다. 이 포스팅에서는 JWT를 이해하고 구현하면서 마주치게 되는 고민들에 대해 정리해보려
swalloow.github.io
oauth 기초 지식을 습득할 수 있다.
https://developers.cafe24.com/app/front/develop/oauth
카페24 개발자센터
카페24 오픈 API를 활용해 186만 쇼핑몰 운영자를 대상으로 앱 비즈니스 기회를 창출할 수 있습니다.
developers.cafe24.com
jwt를 만들고 나서 cookie로 줄지, http authorization 헤더에 담아 줄지 고민했는데, K말에 따르면 json올 주는 것이 맞다는 것이다. 밑은 oauth에서 access_token을 줄 때의 예시이다.
https://datatracker.ietf.org/doc/html/rfc6750
rfc6750
datatracker.ietf.org
토큰 전략
http://www.2e.co.kr/news/articleView.html?idxno=208594
OAuth 2.0 소개 [2부] : OAuth 2.0의 작동 메커니즘 - 투이컨설팅
OAuth2의 토큰(Token)OAuth2가 지원하는 여러가지 권한 부여 방식들의 공통점은 토큰을 사용한다는 점이다. 토큰의 종류로 접근 토큰(Access Token)과 재생 토큰(Refresh Token)이 있다. 하지만 OAuth2에서는 접
www.2e.co.kr
'TIL' 카테고리의 다른 글
2021.05.18 기록장 (0) 2021.05.18 2021.05.17 기록장 (0) 2021.05.17 2021.05.15~16 기록장 (0) 2021.05.14 2021.05.13~14 기록장 (0) 2021.05.13 2021.05.12 기록장 (0) 2021.05.12