일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Random
- Validations
- 전체텍스트
- IBatis procedure
- 로또
- 단축키
- jquery
- 25가지 효율적인 sql작성법
- 페이징
- Login with OAuth Authentication
- 형변환
- 추상클래스
- 자바
- 다운캐스팅
- 스프링
- 전체
- 이클립스
- 야구게임
- 상속
- 가변인자
- angular2
- 업캐스팅
- Full text
- full text indexing
- 자바 야구게임
- while
- 상속예제
- 전자정부
- 다형성
- Today
- Total
nalaolla
google oauth2.0 login 넣기~ (restful 방식) 본문
보통 Facebook, Twitter, Google... 등등의 소셜 네트워크 API 를 사용하는 곳은 Javascript 를 많이 사용하고
아직까지는 대부분의 웹사이트들이 PHP로 이루어진 곳이 많기때문에
Facebook 에서 제공하는 javascript SDK 를 많이 이용하는걸로 판단됩니다~
왜 이렇게 생각 하냐면.... spring reference 가 많이 없습니다...
실력자 분들이 귀찮으셔서 안쓰셨을거라고 생각하는데 ㅎㅎㅎ
Spring 에서는 위와같이 소셜 API 를 사용하는걸 감안해서 만든 프로젝트가 있습니다.
http://projects.spring.io/spring-social/ <-- 여기에 들어가보면 어마어마한 사이트를 연동할 수 있는 API들이 많은데
오늘은 그 중에 Google을 사용해보려고 합니다~
위 사이트의 좌측 하단에 보면 Google 이 있는데 이 부분을 들어가면 엉뚱하게도 Github 페이지로 이동하게됩니다.
https://github.com/GabiAxel/spring-social-google <-- 요기에 샘플소스들이 많은걸 알 수 있지요~ ㅎㅎ
자 이제 소스를 스스로 리딩 후 필요한 부분만 따로 떼어내 프로젝트에 심어야 합니다~ ㅎㅎ
말이쉽지 ㅋㅋㅋ 어느세월에 저 소스코드를 다 파악해서 내가 필요한 부분만 따로 정리해서 뽑아낼지......
다행히 Facebook 의 API 연동방법과 크게 다를바가 없습니다. 하나만 파악하면 나머지도 금방 이라는 말씀
1. 스프링에서 사용할 라이브러리를 넣자
2. Google OAuth 를 파악하자.
https://console.developers.google.com/project <- 요기를 들어가면 구글에서 개발자를 위한 도구들이 많이있는데
Google 에서 제공하는 API 를 사용하기 위해서는 프로젝트를 하나 생성해야한다~
API 인증 > 사용자 인증정보 > OAuth > 새 클라이언트 ID 만들기 를 눌러서 ID 를 생성해야 한다~
본인의 URL redirection 의 경우 http://localhost:8080/oauth2callback 이것과 같이 localhost 도 사용가능하다...
물론 hosts 에서 설정하는건 다 알고있으니까 생략~
구글역시 OAuth 2.0 을 채택하고있는데 OAuth 에 대한 설명을 하자면 너무 귀찮아서 구글도 참고문서보라고 링크만...
한번 보고오세요~
https://developers.google.com/accounts/docs/OAuth2?hl=ko <-- OAuth 에 대한 설명글
3. 스프링 설정 및 Code 얻어오는 소스작성
먼저 따로 설정잡기 귀찮아서 Spring XML 설정부분에다가 넣어줬다 요새는 @Configure 써서 Java 코드내에서 설정하는것도
있는데 현재 프로젝트가 XML로 설정되어있는 부분이라 같이 일하시는 분들 혼란스럽지 않게 XML로 작성했습니다.
googleConnectionFactory 이 부분에서는 생성자에 2개의 값을 넣어줘야되는데
순서에 맞게 넣어주니까 이름이나 Index를 지정하지 않았습니다.
ID 와 비밀번호를 넣는 부분이니까 아까 2번에서 생성한 클라이언트 아이디와 클라이언트 보안비밀을 넣어주면 끝납니다~
실제 스프링 소스를 보자면..
위와 같이 주입을 해준다 ... 혹시라도 Facebook 이나 다른 객체에서도 사용할 경우 사용하는 이름이 같으면 스프링은 주입이 힘들기때문에 @Resource 를 쓰던가 아니면 @Qualifier 를 꼭 써줘서 내가 어떤객체를 주입하는지 알려줘야됩니다... 이런 실수는 안하시죠??
가장먼저 Code 발행
저렇게 호출하면 url 값을 넘겨주는데 저 url 이 바로 google 인증하는 페이지 url 입니다..
Controller 에서 저 url 을 redirect 시키면 구글 페이지가 열리고 해당 사용자에게 로그인하라고 하면서
접속한 웹 페이지에서 사용자의 어떠한 정보를 접근할지 알려주고 동의를 하게 만듭니다.
동의를 클릭하게되면 callback url 로 code 값을 넘기는데 그 code 값으로 사용자의 정보값을 얻을 수 있습니다.
4. 사용자의 정보를 얻어오는 부분
위 부분대로 code 를 사용해서 호출하면 access_token 을 얻어오며, access_token 을 사용하여 사용자의 정보를 얻어옵니다.
모든 OAuth 는 동일한 방식으로 되어있어서 scope 라는게 존재하는데 구글 역시 scope의 종류가 있으며 여기서는
사용자의 정보를 얻어오기 때문에 PlusOperations 를 사용했습니다.
최종적으로 Person 객체에 사용자의 정보가 담기게 되며, 그 후 작업은 뭐 알아서...
아까 보여드린 github 사이트에는 워낙 소스도 많고 그래서 모든코드를 다 봐야할지 모르겠지만 ...
사실 스프링은 OAuth 를 대비해서 객체들을 만들어놨고 그것만 사용해도 별 문제없이 동작하게 설계되어있습니다.
굳이 복잡한 설계가 아니라면 ConnectionRegistry 라던지 그런건 사용하지 않아도 그만인 듯...
또한 http://gabiaxel.github.io/spring-social-google-reference/ 이 문서는 반드시 읽어보세요~
### 아차차!!!! ㅎㅎㅎ
매우 중요한 사실을 하나 안썼는데 아마 저렇게 호출하면 400 에러나 403 에러가 발생하게 됩니다~
그 이유는... 아래 링크에서 보시고 해결해 보세요~
해외 개발자들도 우리와 같은 문제를 만나며, 그걸 해결하기 위해 소통한다는걸 몸소 느끼세요~
한가지 더... ㅎㅎ Google 의 경우 에러가 발생하게되면 code 값 대신에 error 라는 값을 던집니다..(Oauth 특징)
exception 처리는 개발자들의 필수요소인거 아시죵??
'SPRING' 카테고리의 다른 글
스프링의 계층별, 기능별 패키지 구성하기 (0) | 2016.06.20 |
---|---|
[Facebook] 간단한 Login 인증 만들기.. (1) | 2016.06.02 |
twitter4j를 통한 twitter 로그인 연동 (0) | 2016.06.02 |
Spring Framework: MVC 작성방법 (non-annotation) (0) | 2016.05.31 |
Spring Framework: beans - xml 태그 정리 (0) | 2016.05.31 |