개발 Q&A

제목 네이티브앱에서 소셜인증+jwt 처리할경우 서버측은 어떻게해야할까요?
카테고리 PHP
글쓴이 차가운잎사귀 작성시각 2019/07/02 12:04:41
댓글 : 2 추천 : 0 스크랩 : 0 조회수 : 8958   RSS

안녕하세요?

네이티브앱의 소셜SDK(카톡,네이버,구글등)로 가입/로그인 처리를 진행하려합니다.

(가입시 추가 양식은 프로필설정에서 따로 진행하려합니다.)

 

인증성공에서 받은 소셜아이디, 엑세스토큰, 기타 프로필정보만으로 가입시키려고합니다.

 

문제는 네이티브앱에서 자체 소셜로그인을 진행하고나서 콜백성공이 왔을경우부터인데요.

회원테이블은 보통 아이피/패스워드가 기본이잖아요?

근데 가입양식 자체가 없기때문에.. 이건 필요가없을것같고..

 

서버측에서는 정상적인 클라이언트인지 구분하는게 쉽지않을텐데요.

그래서 생각한것이..

 

가입 케이스 :

1. 네이티브앱 소셜로그인 

2. 소셜프로필 + 엑세스토큰을 서버에 전송

3. 서버측에서 엑세스토큰을 기반으로 자체 소셜정보를 가져와서 엑세스토큰 유효성검증후 가입

4. 가입시 jwt 토큰을 발행

 

로그인 케이스:

1. 네이티브앱 소셜로그인

2. 소셜프로필 + 엑세스토큰을 서버에 전송

3. 서버측에서 엑세스토큰을 기반으로 자체 소셜정보를 가져와서 엑세스토큰 유효성검증후 jwt토큰발행

 

API 케이스:

1 : JWT 토큰이 없는경우 로그인케이스로 진행후 재시도.

2 : JWT 토큰이 존재하고 유효한경우 API 접근.

 

 

생각해보면.. 서버측에서는 앱측에서 발급받은 소셜용 엑세스토큰과 , 자체 발행한 JWT토큰을 섞는것도

이상해보이긴하거든요.

근데 제가 두가지를 조합한이유가..

앱에서 받은 소셜 엑세스토큰을 매번 서버측에서 소셜에 접근해서 유효토큰을 검증하기가 부담스럽다는것도 포함됩니다.

(응답시간도 고려하면 앱에서는 서버동기화 딜레이시간도 더걸릴듯)

서버측에서 소셜토큰은 그냥 단순히 정상클라이언트인지 한번만 최초로 확인하는 용도로 쓰고 ,

서버에서 자체 JWT를 관리하면 검증속도도 훨씬 빠르고 , 발행된 토큰이 문제가 생길경우 , 코드이그나이터의

JWT비밀키를 교체하면 모든 클라측의 토큰이 무효가 되므로 관리도 쉽구요.

 

 

사실 AES 기반의 비밀키를 앱쪽  해더값에 넣고 , 서버에도 넣어서 검증할까했는데..

키가 유출되면 앱 마켓업데이트 반영전까지는 계속 유지되기때문에 위험하다 판단이 들었습니다.

 

클라와 서버에서 동시에 객관적인 클라이언트인지 검증할수있는 방법이 없을까 고민하다가

앱자체 소셜인증후 엑세스토큰을 다시한번더 서버에서 검증하여 클라인증을 통과하는방법을 생각하게됐는데요.

이것이 과연 제가 고민한만큼 충분히 실전 서비스에서 써두되는방식인지 . 보안에 도움이되는지..

 

 

점심 맛나게드시구요. 조언부탁드립니다

 

 

 

 

 

 

 

 

 

 다음글 mysql 경로 옮긴후에 사라지는 문제 (2)
 이전글 서버 cron tab에서 php파일 실행시 문의드립니다... (5)

댓글

변종원(웅파) / 2019/07/02 16:14:35 / 추천 1

소셜인증은 앱에서 직접 하고 그 정보를 서버로 전송하여 회원가입후 토큰 리턴. (소셜인증은 부 개념이지 회원가입의 주는 아닙니다)

서버의 토큰으로 유효성 검토하고 소셜 토큰이 바뀐 경우에만 서버의 정보 갱신

이렇게 처리하고 있습니다. 주, 부를 정하시면 개념 잡기가 편해집니다.

차가운잎사귀 / 2019/07/02 16:24:07 / 추천 0

종원님 답변감사드립니다.

주: 서버토큰 , 부: 소셜인증

 

만약 위와같이 정했을때 서버측에서 요청된 클라이언트가 정상적인 요청인지 구분할수있는방법을 

서버측에서 요청때 받은 소셜 엑세스토큰을 다시 소셜api에 재요청하여 유효한 토큰인지 검사하는게 맞는걸까요?

아님 다른방식이 있을까요?  가장 큰 고민이 정상클라이언트를 가려낼수있느냐가 궁금합니다.