알쓸전컴(알아두면 쓸모있는 전자 컴퓨터)
Spring Security OAuth2 Login lib 사용기 본문
삽질 과정을 최대한 줄이려고 노력 했지만 영상 중간 중간에 삽질 과정이 들어가는군요 ...
해당 부분은 제가 oAuth2 Login lib가 어떤것인지 알아보고 이해하고 찍은 동영상 입니다.
www.youtube.com/watch?v=3niJTyBUIPI
일단 OAuth2 의 Login의 테스트가 될 서버의 상태를 먼저 본뒤에 Login Lib 를 사용해 보겠습니다.
이렇게 추가 적으로 OAuth2 에 필요한 정보를 주면
인증 완료후 http://localhost:8181/resource/TEST2?code=GNTFqN&state=123
같이 code 와 state 를 함께 넘겨 받도록 됩니다.
이 과정을 다시 보면 제가 해당 서버에
인증 완료뒤에
위에 URL롤 리디렉션을 해주고 해당 URL 에서는
http://localhost:8181/resource/TEST2?code=GNTFqN&state=123
로 리디렉션을 해주게 됩니다.
그렇게 해서 실제로 사용할 서버에 http://localhost:8181/resource/TEST2 요청이 파라메터와 같이
들어 옵니다.
일단 Oauth2 로그인 서버의 상황은 지금과 같습니다.
모두 허용을 해주고
왜나하면 라이브러리 사용시 해당 부분은 인증하는 과정중에 접근이 필요 하기 때문입니다.
여기서 /TEST2 라고 해준 부분이 있는데
redirect_uri=http://localhost:8181/resource/TEST2 이거 이기 때문에
/TEST2 에 들어 올 때 Oauth2 로그인 시작 과정임을 알아야 되기 때문입니다.
현재 리소스와 포트는 위와 같이 설정 해 두었습니다.
중요한 부분은 ClientRegistrationRepository 이부분 입니다.
여기서 인증에 필요한 데이터를 입력해 저장해 놓기 때문입니다.
현재는 인메모리 레포지토리에 저장 했습니다.
위와 같이 적히고 \
일부러 2개를 저장 했습니다.
자 그리고 인증이 필요한
테스트1 에 접근해 보겠습니다.
일부러 크롬을 끄고 켜서 세션을 변경 하겠습니다. 아까 인증한 정보가 남아 있기 때문에 세션을 테스트를 위해서 바꿔줄 필요가 있습니다.
현재는 인증이 안된 상태 입니다.
자 여기에 보면 인증 이 안되서 Oauth2 가 기본으로 지원하는 사이트에 들어 왔습니다.
설정으로 해당 페이지를 커스텀마이징 할수 있지만 일단 기본을 사용했습니다.
그럼 저 2개는
여기
여기
총 2개 입니다.
그리고 로그인을 누르게 되면
일단 http://localhost:8181/resource/oauth2/authorization/auth 로 들어가 되면
스프링 Oauth2 Login 에서 리디렉션을 합니다.
위와 같이 code를 얻기 위한 URL를
해당 정보를 기반으로 만들어 줍니다.
하지만 http://10.20.10.114:8080/auth 에 아직 로그인 안되어 있고 인증이 필요하기에
다시 로그인 페이지로 리디렉션 됩니다.
원래 여기서 http://10.20.10.114:8080/fAuth/
가 아니라
여기로 리디렉션을 해줘야 하지만 코딩을 안해 두었기 때문에 일단 저렇게 움직이도록 코딩 되어 있습니다.
http://10.20.10.114:8080/fAuth/#/login 여기서 로그인 하면 리디렉션만 하지 않지 로그인 인증
은 되도록 해 놨으므로 일단 인증 되었습니다.
http://10.20.10.114:8080/fAuth/ 에 인증이 되고
위와 같이 Oauth2 Login이 실행 시켜
Code를 얻어 오고
요청 했던 곳으로 리디렉션 해줍니다.
원 요청 페이지로 리디렉션 하기 전에 숨은 과정이 있습니다.
숨은 과정은 나중에 좀더 보고
일단 만약에 인증서버에 로그인이 되어 있다면
경우를 보겠습니다.
여기서 error 에 authorization_request_not_found]
가 뜨는 이유는
로그인 후에 어쨋던 redirection 때문에
http://localhost:8181/resource/TEST2?code=Hdxymd&state=123
에 가게 되는데
여기서 우리는 현재 가지고 있는 세션으로는 이전에 인증이 필요한 요청 을 한
이력이 없기 때문에 리디렉션 할곳이 없다는 에러로 받아 들였습니다.
만약 이전 요청이 있는 경우라면
현재가 이전 요청 TEST1 이 있는 경우 입니다.
자 다음과 같이 오류가 나지 않게 됩니다.
인증 이 서버에서 로그인을 위해서 필요한 부분이 또 있습니다.
이부분에서
http://10.20.10.114:8080/auth/getMe
저는 이부분에서 Access Token 을 통해서 유저 정보를 얻어 오는 부분이 작성 되어 있습니다.
여기가 제 인증 서버 입니다.
리소스 서버로도 설정 하여 사용 중인 사항 입니다.
현재 저 서버가 뛰어 져있는 곳은 10.20.10.114:8080/auth 입니다.
여기 어트리뷰트 쪽에 아까의 데이터가 Map 형식으로 들어 옵니다.
여기서 아까 받았던 Code를 통해서 Access Token 을 얻어 오게 됩니다/
그리고
여기서 유저 정보를 요청 해서 같이 넣어 줍니다.
여기서 중요한 것은 응답 받는 json 형식의 데이터에서 sub 이라는 항목이 꼭 있어야 됩니다.
내용은 일단 아무거나 적어도 상관은 없었습니다.
만약 sub 항목이 없으면 에러가 납니다.
그리고 이렇게 인증된 객체가 들어 옵니다.
여기서 알수 있는건 oauth2의 로그인이 해당 서버의 로그인 처럼 사용 된다는것이죠.
처음에 auth링크를 누를 때 세션과 매칭 시켜 access token 와 refresh token 을
메모리에 저장 합니다.
'Web > Spring Framework tip' 카테고리의 다른 글
Spring GetMapping Pageable multiple Sort,복잡한 ObjectMapping 을 axios query 보내는 방법 (0) | 2022.09.22 |
---|---|
스프링 시큐리티와 Oauth 인증 서버 구축 디버깅을 통하여 이해하기 (0) | 2020.10.08 |
spring security OAuth2 Auth,jwt 인증 서버 좋은 자료. (0) | 2020.08.29 |
Transactional 옵션 설명 (0) | 2020.06.02 |
QueryDSL Custom Funtion 등록 및 where 절에서 Index 사용하도록 하는 방법 (1) | 2020.04.06 |