티스토리 뷰

반응형

프론트엔드 로그인에 이어 백엔드에서의 인증을 구현해보겠다.


사용 툴 및 언어 :  이동

개념 : 이동

앱 생성 : 이동 




프론트에서 받은 accessToken userID 가지고 백엔드에서 정상적인 데이터인지

다시한번 확인할 것이다.

 

https://developers.facebook.com/docs/apis-and-sdks url 가보면

자세히 써있다.

 

중에서 타사 SDK 가보면 Java에서 지공하는 sdk들이 있다.




중에서 RestFB 사용할 것인데 간단 구현이 가능하기 때문에 채택했다.
https://restfb.com

 

역시나 Document 가서 하라는대로 하면 구현이 쉽다.

개발자라면 무조건 google 보다는 Document 통해 개발을 하려는 습관을 가지는 것도 나쁘지 않은것 같다.

 

spring boot security 이용하기 때문에

api 통해 데이터를 받으면 Filter 통해서 인증을 있다.

 

 

모든 소스를 보여줄 수는 없지만 restFB() 통해 인증하는 법만 작성하겠다.

 

일단 다음 페이지에 로그인 플로 직접 빌드하는방법이 있다.



그리고 용어에 나와있지만

 

앱을 통해서 토큰을 받으면 단기토큰은 1~2시간이면 없어진다 그래서 이것을 연장하기 위해 장기토큰으로 변경을 한다.

 

단기토큰을 사용해도 되지만 장기토큰으로 변경하는이유는 클라이언트 단에서 매번 로그인을 단기토큰을 받은다음에 값들이 바뀔 때마다 db update 부하되는것을 조금이라도 줄이기 위해 처음에 장기토큰으로 변환을 한다.

 

다음 문서에는 장기토큰으로 변환하는 방법 적혀있다.



구현


1. dependency 추가



1) maven
<!-- https://mvnrepository.com/artifact/com.restfb/restfb -->
<dependency>
    <groupid>com.restfb</groupid>
    <artifactid>restfb</artifactid>
    <version>2.1.1></version>
</dependency>

2) gradle
// https://mvnrepository.com/artifact/com.restfb/restfb
compile group: 'com.restfb', name: 'restfb', version: '2.1.1'


2. facebook service 구현 




// 1) 장기 토큰 변환 method구현 

       String longTermFacebookToken = this.getLongTermFacebookToken(facebookToken);

	private String getLongTermFacebookToken(String facebookToken) throws ParseException {
	
	/** 
	grant_type은 장기토큰으로 변환한다는 것이고
	여기서 client_id 와 client_secret는 무슨 값이냐 하면 페이스북 앱 만들기에서 만들어서 생긴
	앱 id와 앱 시크릿 코드이다.
	그리고 fb_exchange_token은 클라이언트에서 받은 accessToken이다.
	**/
	String url = "https://graph.facebook.com/oauth/access_token?" 
	+ "grant_type=fb_exchange_token" 
	+ "&client_id=" + env.getProperty("facebook.client.id") 
	+ "&client_secret=" + env.getProperty("facebook.client.secret")
	+ "&fb_exchange_token=" + facebookToken;
	
	// facebook 측에 장기토큰 변환 요청 String 타입으로 받아진다.
	HttpHeaders headers = new HttpHeaders();
	headers.setContentType(new MediaType("application", "json", Charset.forName("UTF-8")));
	HttpEntity<?> httpEntity = new HttpEntity<string>(headers);
	RestTemplate restTemplate = new RestTemplate(requestFactory);
	ResponseEntity<string> response = restTemplate.exchange(url, HttpMethod.GET, httpEntity, String.class);
	
	// JSON으로 변환
	String token = response.getBody();
	JSONParser jsonParser = new JSONParser();
	JSONObject jsonObject = (JSONObject) jsonParser.parse(token);
	// JSON으로 받아 access_token만 추출
	return jsonObject.get("access_token").toString();
	}

        // 2) 장기토큰을 가지고 유저 확인문서 참고 https://restfb.com/documentation/
	
	// 필자는 id, name, email만 필요해 3개만 요청페이스북 정책이 바뀌면서 요청을 남발하지 말고 공식홈페이지 가서 확인하자

       User facebookUser = this.getFacebookUser(longTermFacebookToken);
	private User getFacebookUser(String facebookToken) throws NotFoundEmailException {
	FacebookClient client = new DefaultFacebookClient(facebookToken, Version.VERSION_2_11);
	User user = client.fetchObject("me", User.class, Parameter.with("fields", "id,name,email"));
	if (StringUtils.isEmpty(user.getEmail())) {
	throw new NotFoundEmailException("not found email");
	}
	return user;
	}




3. 이후는 각자 필요한 것을 구현하면 된다.

반응형

'기타 > 페이스북 로그인 구현 (Old)' 카테고리의 다른 글

프론트엔드 로그인  (0) 2018.06.30
페이스북 앱 만들기  (0) 2018.06.29
용어  (0) 2018.06.28
개념  (0) 2018.06.28
사용 언어 및 library  (0) 2018.06.27
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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 31
글 보관함