2014-04-01 2 views
1

저는 회사 웹 사이트 용으로 표준화 된 JSON API를 제작했습니다. 나는 API를 가능한 한 상태없는 상태로 유지하면서 사용자를 인증하는 방법을 원합니다. 내 생각은 다음이었다요청 별 API 키

  1. 사용자가 로그인이 웹 서비스는 사용자를 인증하고, 만료 날짜와 함께 클라이언트로 전달되는 임의의 문자열을 생성합니다. 쿠키는 데이터베이스의 항목과 함께 쿠키에 저장됩니다.

  2. 모든 API 요청에 대해 웹 서비스는 데이터베이스 항목에 대해 쿠키 문자열을 확인합니다. 인증을하면 웹 서비스는 새로운 문자열을 생성하고, 데이터베이스와 쿠키의 새 문자열로 이전 문자열을 대체 한 다음 요청 된 정보를 다시 전송합니다.

  3. 클라이언트가 요청을 보내고 쿠키, 데이터베이스의 문자열이 NULL로 설정되어있는 데이터베이스 항목과 일치하지 않는 클라이언트가 다시 로그인 단계에서 프로세스를 시작하는 경우 1.

  4. 요청이 만료 날짜 이후에 전송되면 데이터베이스의 문자열이 NULL로 설정되고 사용자는 다시 로그인해야합니다.

천천히 새로운 기술로 전환함에 따라 회사의 현재 설정으로 가능한 한 혼란을 일으키고 싶습니다. 이 방법은 일반적으로 수행되는 것입니까? 이런 식으로하면 어떤 종류의 보안 문제가 발생할 것입니까? 다른 방법을 사용해야합니까?

답변

0

네, 일반적인 시나리오입니다. 당신이 설명하는 것은 세션 쿠키이며 널리 사용됩니다.

Session Fixation 기술과 그 완화 방법을 읽어보십시오.

하지만 세션을 사용하면 실제로는 상태가 없습니다. API 사용자에게 키 (공유 비밀)를 제공 할 수 있으면 메시지 서명을 고려하여 요청을 인증 할 수도 있습니다. (H)MAC을 사용하고 있는지 확인하십시오. 또한 Replay Attacks에서 자신을 지켜야합니다.

+0

내가하는 것처럼 사실 - 세션 ID는 동일한 사용자 내에서도 두 번 사용할 수 없으며 재생 공격을 차단할 수 있습니까? –

+0

서명 된 메시지 영역에서 재생 공격이 더 재미 있습니다. 세션 고정은 귀하의 세션을위한 것입니다. 특정 경우에 두 가지 방법 (세션 또는 메시지 서명) 중 하나를 선택해야합니다. 서명은 상태 비 저장이지만 키를 안전하게 교환해야합니다 (API를 제공 할 때 작동 할 수도 있음). – seong