참고
본 소스는 JAVA SPRING 구조임(RESTFUL 방식)
1. 스프링에서 사용할 라이브러리를 넣자
본인은 아직 graddle 을 사용하고 있지 않아서 Maven 을 쓴다 Maven 으로 넣으니 이해바람 ㅎㅎ
<dependency> <groupId>org.springframework.social</groupId> <artifactId>spring-social-google</artifactId> <version>1.0.0.RELEASE</version> </dependency>
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 얻어오는 소스작성
<bean id="googleConnectionFactory" class="org.springframework.social.google.connect.GoogleConnectionFactory"> <constructor-arg value="*****************" /> <constructor-arg value="*****************" /> </bean> <bean id="googleOAuth2Parameters" class="org.springframework.social.oauth2.OAuth2Parameters"> <property name="scope" value="https://www.googleapis.com/auth/plus.login"/> <!-- <property name="scope" value="https://www.googleapis.com/auth/plus.me"/> --> <property name="redirectUri" value="http://localhost:8080/oauth2callback"/> </bean>
먼저 따로 설정잡기 귀찮아서 Spring XML 설정부분에다가 넣어줬다 요새는 @Configure 써서 Java 코드내에서 설정하는것도
있는데 현재 프로젝트가 XML 로 설정되어있는 부분이라 같이 일하시는 분들 혼란스럽지 않게 XML 로 작성했다
googleConnectionFactory 이 부분에서는 생성자에다가 2개의 값을 넣어줘야되는데 순서에 맞게 넣어주니까 이름이나 Index를
지정하지는 않았다... ID 와 비밀번호를 넣는 부분이니까 아까 2번에서 생성한 클라이언트 아이디와 클라이언트 보안비밀을 넣어주면 끝난다. 뭐 어렵지 않지 ㅎㅎ
실제 스프링 소스를 보자면..
@Autowired private GoogleConnectionFactory googleConnectionFactory; @Autowired private OAuth2Parameters googleOAuth2Parameters;
위와 같이 주입을 해준다 ... 혹시라도 Facebook 이나 다른 객체에서도 사용할 경우 사용하는 이름이 같으면 스프링은 주입이 힘들기때문에 @Resource 를 쓰던가 아니면 @Qualifier 를 꼭 써줘서 내가 어떤객체를 주입하는지 알려줘야된다... 이런 실수는 안하시죠??
가장먼저 Code 발행
OAuth2Operations oauthOperations = googleConnectionFactory.getOAuthOperations(); String url = oauthOperations.buildAuthorizeUrl(GrantType.AUTHORIZATION_CODE, googleOAuth2Parameters);
저렇게 호출하면 url 값을 넘겨주는데 저 url 이 바로 google 인증하는 페이지 url 이다..
Controller 에서 저 url 을 redirect 시키면 구글 페이지가 열리고 해당 사용자에게 로그인하라고 하면서
너가 접속한 웹 페이지에서 사용자의 어떠한 정보를 접근할지 알려주고 동의를 하게 만든다.
동의를 클릭하게되면 callback url 로 code 값을 넘기는데 그 code 값으로 사용자의 정보값을 얻을 수 있다.
4. 사용자의 정보를 얻어오는 부분
OAuth2Operations oauthOperations = googleConnectionFactory.getOAuthOperations(); AccessGrant accessGrant = oauthOperations.exchangeForAccess(code, googleOAuth2Parameters.getRedirectUri(), null); String accessToken = accessGrant.getAccessToken(); Long expireTime = accessGrant.getExpireTime(); if (expireTime != null && expireTime < System.currentTimeMillis()) { accessToken = accessGrant.getRefreshToken(); logger.info("accessToken is expired. refresh token = {}" , accessToken); } Connection<Google>connection = googleConnectionFactory.createConnection(accessGrant); Google google = connection == null ? new GoogleTemplate(accessToken) : connection.getApi(); PlusOperations plusOperations = google.plusOperations(); Person person = plusOperations.getGoogleProfile();
위 부분대로 code 를 사용해서 호출하면 access_token 을 얻어오며, access_token 을 사용하여 사용자의 정보를 얻어온다.
모든 OAuth 는 동일한 방식으로 되어있어서 scope 라는게 존재하는데 구글 역시 scope의 종류가 있으며 여기서는
사용자의 정보를 얻어오기 때문에 PlusOperations 를 사용했다.
최종적으로 Person 객체에 사용자의 정보가 담기게 되며, 그 후 작업은 뭐 알아서...
아까 보여드린 github 사이트에는 워낙 소스도 많고 그래서 모든코드를 다 봐야할지 모르겠지만 ...
사실 스프링은 OAuth 를 대비해서 객체들을 만들어놨고 그것만 사용해도 별 문제없이 동작하게 설계되어있다.
굳이 복잡한 설계가 아니라면 ConnectionRegistry 라던지 그런건 사용안해도 그만이라는 생각...
또한 http://gabiaxel.github.io/spring-social-google-reference/ 이 문서는 반드시 읽어보길 바람~
https://github.com/GabiAxel/spring-social-google/issues/22
출처 | http://okihouse.tistory.com/8
=============================
에러
400 : 올바르지 않은 값이 넘어와서 에러냄
400 해결 : 과거 코드가 아닌 새로 받은 코드를 그대로 넘겨야함
403 : 로그에 ( google + api ) 를 update 하라는 말이 나옴
403 해결 :
1. https://console.developers.google.com들어가 나의 프로젝트로 들어감
2. API 및 인증이라는 카테고리가 나옴 그안에 API라는 메뉴를 클릭
3. 소셜 API에 GOOGLE+ API 가 나옴 클릭
4. 맨위에보면 API 사용이라는 파란버튼이 나옴 클릭해서 해결
'Java' 카테고리의 다른 글
[error] The type BASE64Decoder is not accessible due to restriction on required library (0) | 2016.01.11 |
---|---|
[OAuth] 인증과 권한 개념잡기 (0) | 2015.10.30 |
Using OAuth 2.0 to Access Google APIs (0) | 2015.10.29 |
REST API의 이해와 설계-#3 API 보안 (0) | 2015.10.28 |
REST API 이해와 설계 - #2 API 설계 가이드 (0) | 2015.10.28 |