2

저는 Android 애플리케이션에서 Rails 웹 서버로 사용자 인증을 가장 잘 구현하는 방법을 연구하는데 많은 시간을 할애하고 있습니다. 필자는 레일스에서 ​​인증을 처리 할 수있는 엔진이 있다는 것을 알고 있지만, 필자가 필요로하는 것은 그리 복잡하지 않기 때문에 스스로 인증 코드를 작성하는 것이 가장 좋습니다.쿠키 또는 RESTful 키에 대한 인증?

저는 RESTful 웹 서비스에 매우 관심이 있습니다. 상태없는 웹 서버에서 코드는 훨씬 더 읽기 쉽고 유지 보수가 쉬우 며 변경 가능하기 때문에 몇 가지 장점이 있습니다. 이 구현에 대해 독립적으로 일하는 대학생으로서, 이러한 것들이 나에게는 매우 중요하지 않지만, 그럼에도 불구하고 REST 가이드 구현은 코딩 관점에서 이상적이라고 생각합니다.

내 응용 프로그램은 자신의 컨텍스트를 유지 관리하는 사용자 계정이 필요하기 때문에 웹 서버에 요청할 때 사용자를 인증해야합니다. 이 애플리케이션을 완전히 RESTful 한 방식으로 구현한다면 어떤 종류의 세션도 유지하지 않고 안드로이드 애플리케이션 (클라이언트 측)이 현재 사용자의 자격증 명 (아마도 유일한 단일 키가 안드로이드 애플리케이션에 리턴 됨)을 전달할 것을 요구한다. 첫 번째 로그인시 웹 서버에서). 이것은 유효한 접근 방법이지만, 서버 측에서 생성 할 수있는 계산상의 오버 헤드가 걱정됩니다.

  • 가의 관련 테이블 행에 대한 정수 사용자 ID를 가진보다 느리게 될 것입니다 해당 사용자에 따라 행동하기 위해 모든 요청에 ​​긴 문자열로 사용자를 찾고 : 왜

    는 여기 CookieStore 세션.

  • RESTful 인증을 데이터베이스에 일반 텍스트로 저장하지 않았을 수 있습니다. 아마도 BCrypt를 사용하여 소금과 해시를 키 대신 저장하십시오. 물론 BCrypt를 사용하여 각 요청에서받은 키를 해시하여 데이터베이스에 저장된 해시를 테스트합니다.

프로덕션 서버를 호스팅해야하므로 실제로 짐을 갚을 여유가 없으므로 REST 배지를 사용할 수 있습니다.

일반적인 사용자가 하루에 10-30 건의 요청을하고 사용자 수가 앱의 인기도에 따라 다르다고 가정하면 (예측할 수는 없지만이 질문을 위해 평균이라고 가정) 내 특정 경우에 RESTfully 인증을 구현하는 것이 가능합니까? 즉, 서버의 하드웨어 요구 사항을 상당히 증가시킬 수있는 계산상의 오버 헤드가 있습니까?

감사합니다.

답변

0

저는 일반적으로 다른 접근 방식을 사용합니다.

사용자가 시스템에 로그인하면 평범하고 암호화 된 정보가 혼합 된 고유 한 생성 키를 전송합니다.

는 기본적으로 그 같은 일을 수행 SHA1 해시의 길이를 알 수 있기 때문에

key = User.id.to_s + SHA1::Digest.hexdigest("#{SECRET_KEY}#{User.id}#{User.name}#{User.created_at.to_i}")

, 당신은 ID를 추출하고 특별한 구분의 필요없이 문자열에서 토큰 수 있습니다. 이 방법은 두 가지 이점이 있습니다 :

  1. 는 필요에 따라 계산 될 수있다으로 DB에 키를 저장하기위한 요구 사항을.
  2. THER 사용자에게 반환 키를 보낼 짧은 (네트워크 효과) 쉽고 (때문에는 ASCII에서, 더 Base64로의 필요성 또는 이와 유사한 것)

희망이 도움이되지!