마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

세션 정보를 담아오는 방법이 있나요?

0 추천
php로 백엔드단을 작성하였고 로그인을 할 때 아이디 비밀번호만 받으면 user_num은 해당 컬럼의 PK값으로 뜨도록 설계 해뒀습니다 ({"success":true,"user_id":"test","user_pass":"test","user_num":1} < 이와 같이 디버그를 찍었을 때 들어오는 값) 그런 후에 저 user_num을 그대로 받아 게시글 작성할 시에 자동으로 fk 키로 들어가도록 설정하고 싶습니다.  제 생각엔 php단에서 할 작업은 다 끝난 거 같고 java 단에서 작업을 추가로 해줘야 할 거 같은데 이럴 땐 어떻게 해야 하는 걸까요?

로그인을 하게 된다면 해당 값이 그대로 넘어와서 세션이 유지 되는 것이 아닌지도 궁금합니다... 감사합니다!
살려주세요제발제발요 (670 포인트) 님이 2022년 10월 25일 질문

1개의 답변

0 추천
 
채택된 답변
REST API는 stateless 입니다. 즉, 안드로이드 앱에서는 세션정보를 보관하지 않습니다. 따라서 통신을 할 때 마다 해당 클라이언트의 접근 권한을 체크해서 로그인이 된 경우가 아니면 접근을 거부하도록 해주어야 합니다. 통상적으로 많이 사용하는 방법 중의 하나는 엑세스 토큰입니다. 모발앱은 로그인을 먼저 하고, 로그인 성공시에 서버는 랜덤한 문자열인 토큰(보통 JWT 라는 걸 많이 사용함)을 모발앱에 리턴해줍니다. 모발앱에서는 이걸 메모리나 파일(통상적으로 카스토어 + 파일) 등에 보관한 다음 REST API를 호출할 때마다 이 토큰을 헤더에 담아서 보냅니다. 서버에서는 이 토큰을 검사하여, 허용된 클라이언트인지 체크하고 아니면 접근을 거부하면 됩니다.

그리고 토큰은 보안 상 영구적으로 사용하지 않고 유효기간을 정해놓고 사용합니다. 예를 들어 언제까지 이 토큰이 유효하다는 정보를 토큰 내에 담습니다. 토큰을 연장하기 위해서는 리프레시 토큰이란 걸 사용합니다. 최초 로그인시 서버에서 엑세스 토큰과 함께 리프레시 토큰을 같이 리턴합니다. 엑세스 토큰과 마찬가지로 모발앱에서는 이 토큰도 안전한 곳에 보관합니다. 토큰이 만료된 경우, 서버에서는 토큰을 재발급받으라는 응답을 내보내며, 이 때 모발앱에서는 보관했던 리프레시 토큰을 토큰 재발행 API를 통해전달하고 서버에서는 토큰을 확인한 후 재발급해주게 됩니다. 이 때도 엑세스 토큰과 리프레시 토큰을 둘다 발급해 줍니다.

많은 회사에서는 표준적인 인증 방식인 OAuth2를 사용하고 있습니다. 우리가 아는 거대 IT 기업들은 모두 다 이방식을 이용해 사용자의 로그인 관리를 합니다. 그리고 요즘은 보안을 강화하기 위해 로그인시 MFA(Multi Factor Authentication)이란 방법을 같이 사용합니다. 즉 로그인시 이메일, SMS, 푸시 같은 방범으로 사용자가 맞는지 추가 확인하는 방식입니다. 아마  이미 많이 사용해 보셨을 겁니다.

OAuth2 같은 경우는 혼자 개발하기는 좀 벅차기 때문에 필요하시다면 https://auth0.com/ 과 같은 서비스 업체를 통해 일정 정도 무료로 사용해 볼 수 있습니다. 파이어베이스도 인증서비스를 제공하구요. 물론 구글도 제공합니다.

구글에 auth0 alternative 정도로 검색하시면 같은 서비스를 제공하는 업체를 찾으실 수 있습니다.

OAuth2 까지 가실 필요가 없다면  서버에서 토큰 관리를 도와주는 라이브리 같은 걸 이용하셔서 사용하시면 될 것 같습니다. 이 경우 아무래도 보안이 좀 허술해질 수 있으니, 신경을 쓰셔야 할 것 같구요.

토큰은 DB에 사용자 ID와 매핑이 되어 있거나 사용자 ID같은 정보 자제를 포함하고 있어야 겠죠. 이렇게 하시면 서버에서는 토큰을 통해 사용자 정보를 꺼낼 수가 있겠죠.
spark (224,800 포인트) 님이 2022년 10월 25일 답변
살려주세요제발제발요님이 2022년 10월 27일 채택됨
모바일 앱에서 사용자 정보를 명시적으로 보관하려면 로그인 성공 후, 앱 전역적으로 접근 가능한 메모리나 SharedPreferences 또는 DB 같은 곳에 세션정보를 보관하시면 됩니다.
답변 감사합니다! 현재 만들고 있는 앱을 유통하거나 할 생각은 없는 터라 그런데 혹시 따로 OAuth2 와 같은 툴을 사용하지 않고도 SharedPreferences를 이용하여 로그인 시 회원정보를 가져와 게시판 작성을 할 때 반영할 수 있을까요?
...