원본 본문으로 이동하기

Spring Security OAuth 통합 로그인 : 1. OAuth 소개

박용서 - Spring Security OAuth 통합 로그인 시리즈 1. OAuth 소개 - https://gs.saro.me/#!m=elec&jn=833 2. 시큐리티와 OAuth 통합 구조 및 시큐리티 작성 - https://gs.saro.me/#!m=elec&jn=834 3. 시큐리티에 OAuth 연동 (페이스북, 네이버...) - https://gs.saro.me/#!m=elec&jn=835 4. 추가사항 - https://gs.saro.me/#!m=elec&jn=840 참고 플랫폼에 상관없이 OAuth2 를 통해 연동해본 경험이 있다면 바로 다음강의로 넘어가셔도 됩니다. OpenID 2000년도 중반 OpenID 가 생겨나고 유행 하였습니다. 오픈 아이디를 이용하게 되면 오픈 아이디를 제공해주는 사이트에 가입하고, 해당 오픈 아이디를 지원해주는 모든 사이트에서 접속할 수 있기 때문에 회원정보를 간단하게 관리할 수 있습니다. 또한 사이트 가입에 대한 부담이나 장벽을 낮춤으로써 더 많은 회원을 유치 할 수 있습니다. OAuth 하지만 오픈 아이디는 표준스펙이 존재하지 않았기 때문에 제공자마다 서로 다른 프로토콜을 제공하여 여러 오픈 아이디를 제공하기 위해선 각 규격별로 연동을 만들어야 했고, 일부 프로토콜에선 보안 이슈가 많이 나오기도 했습니다. 때문에 표준적인 방법을 고려하던 사람들은 OAuth 라는 규격을 만들고 2007년 10월 03일 OAuth 1.0 을 발표하게 되었습니다. https://oauth.net/ 2016년 OAuth 의 최신버전은 2.0이며 대부분의 소셜과 국내 대형 포털들은 해당 스펙에 맞게 로그인을 제공해 주고있습니다. OAuth2 를 제공하는 서비스 페이스북, 깃허브, 트위터, 네이버, 카카오등... (그밖에도 많이 있지만 필자도 찾아봐야지 압니다.... 일반적으로 로그인 API를 지원한다라고 말하면 OAuth2 지원이라고 봐도 무방합니다.) 작동구조 페이스북을 예로 들어서 설명해 보겠습니다. - 페이스북에서 로그인 연동 앱 "가리사니" 를 만들었다고 가정합니다. 준비 Client ID : 앱이 가지고 있는 클라이언트 아이디 (사용자에게 노출됨) Secret Key : 앱이 가지고 있는 비밀키 (서버 내부 동작임으로 사용자에게 노출되지않음) Access Token 주소 : 엑세스 토큰을 발급해주는 주소입니다. User Authorization 주소 : 로그인이 이뤄질 주소 웹이라면 다이얼로그(UI)가 구현되어 있는 주소로 보냄. UserInfo 주소 : 유저 리소스에 접근하는 주소 허용 리다이렉트 주소 : 엉뚱한 곳으로 리다이렉트 하여 보안적 취약점을 만드는 것을 방어하기위해 리다이렉트를 허용할 주소를 설정합니다. scope : 가져올 정보들 (전자우편, 생일등...) 인증과정 # 가리사니 서버 > 로그인 페이지에서 페이스북 버튼을 클릭합니다. > User Authorization 주소에 클라이언트 아이디와 스코프(필요권한), 리다이렉트를 보냅니다. # 페이스북 서버 > 웹이라면 일반적으로 다이얼로그(UI)가 있는 "페이스북"의 로그인 화면으로 이동합니다. > 사용자는 스코프(필요권한)을 확인하고 아이디와 암호를 입력 후 접속합니다. > 로그인이 완료되었다면 페이스북은 가리사니에게 임시코드를와 함께 리다이렉트 합니다. # 가리사니 서버 > 클라이언트 아이디, 비밀키, 임시코드를 Access Token 주소에 요청합니다. (서버측 동작) > 서버는 응답정보를 주며 엑세스 토큰도 발급됩니다. > UserInfo 주소에 엑세스 토큰과 함께 요청한 필요권한(아이디, 전자우편, 생일등..)정보도 요청하여 가져옵니다. - 여기서 사용자가 필요권한 중 일부를 커스텀으로 설정하여 제거하였다면 해당정보는 가져올 수 없게 됩니다. (그렇다면 권한 부족에의한 로그인 실패처리를 합니다. / 다만 권한설정이 기억되어 사용자에게 다시 묻지 않을 수 있음으로 신중하게 처리해야합니다.) > 가리사니 서버는 해당 정보를 토대로 로그인 과정을 통해 사용자에게 피드백을 합니다. 이런식으로 OAuth 로그인이 완료됩니다. (자세한건 다음장에서!! 적도록하겠습니다.) - 스프링 자바