2014-12-15 3 views
0

이것은 많은 사람들에게 사소한 일일 수 있지만 내 유스 케이스에 대한 올바른 흐름을 이해하지 못했습니다. Google 모바일 앱용 API (IOS & Android)를 구축 중이며 대부분의 웹 애플리케이션과 마찬가지로 API에는 로그인 한 사용자 만 액세스 할 수있는 특정 기능/페이지 (웹 사이트 측면)가 있습니다. 세션은 일반적으로 API 구성에서 권장되지 않으므로 API에서 이러한 내용을 추적하는 방법을 궁금합니다. 내 질문은, 어떻게 식별해야합니까 :REST API - 상태가 유지되지 않는 방식으로 사용자 세션 관리

  1. 사용자가 클라이언트 측에서 로그인했습니다. 따라서 사용자가 사용자 이름과 암호를 보내서 로그인하면 서버 측은 DB에서 확인한 후 사용자를 인증합니다. 이 시점에서, 앞으로 신원 확인을 위해 각 요청과 함께 나를 보내야한다는 것을 고객에게 무엇을 보내야합니까?
  2. 실제 사용자를 요청하는 중입니다 ... 예를 들어 사용자 A는 사용자의 B 정보를 요청할 수 없습니다. 다른 말로하면 내가 생각하고있는 것은 UserID (또는 일부 암호화가 있어야하는 토큰)를 기반으로하는 작업을 수행하면 누군가가 내 보안을 어떻게 든 깨뜨리고 다른 사용자의 ID에 대한 콘텐츠를 요청할 수 있다는 것입니다. 이거 안전합니까?

본질적으로 상태를 무국적으로 유지하기위한 지침을 찾고 있습니다.

답변

0

사용자가 성공적으로 인증 된 후에 session_id를 보내보십시오. user_name에서 md5 해시로 생성 될 수 있습니다 (현재 타임 스탬프로 소금을 짠 것).

서버 측에서는 session_id를 사용자에게 매핑하는 session_data (session_id, user_id, last_access_time, session_data) 테이블을 만들 수 있습니다. last_access_time이 오래된 세션은 쓸모 없게됩니다.

이 방법은 매 요청마다 session_data를 업데이트해야하기 때문에 강렬한 사용자 상호 작용에는 적합하지 않습니다.

이 경우 이러한 테이블은 빠른 저장소에서 이동할 수 있습니다.

0

로그인 상태와 같은 API 개발에는 이러한 개념이 없습니다. 그게 바로 상태가없는 이유입니다. 모든 요청을 인증해야합니다 (요청할 때마다 사용자 이름과 비밀번호를 보내십시오).

참고 : 세션은 가질 수 있지만 REST 클라이언트가 유지 관리하므로 API는 아무 것도 모릅니다.

+0

나는 당신이 말하는 것을 봅니다. 나는 사용자가 로그인 할 때 서버가 클라이언트에 키를 보낼 수 있다고 생각한다. 클라이언트는 클라이언트가 클라이언트 측에서 노래를 부르는 한 모든 APi 호출을 추가 할 것이다. – user3288151

+0

@ user3288151 서버 쪽 세션이기 때문에 불가능합니다. Btw. 나는 REST API를 작성해야한다고 생각하지 않는다. – inf3rno