2012-08-10 3 views
1

나는 REST API와 보안에 관해 많은 질문을하고 흥미로운 정보를 찾았지만 아직 이해할 수없는 것이 하나있다.Zend로 안전한 REST API를 만드는 가장 좋은 방법은 무엇입니까?

그래서 REST API는 https 채널을 통해 기본 인증을 사용하여 Zend Framework로 개발되었습니다. 따라서 내가 읽은 세션을 읽었을 때 login/password는 암호화 될 때 암호화됩니다. 이 API의 목적은 Android/iPhone 앱에서 호출되며 로그인 및 비밀번호가있는 사용자 만 사용할 수 있습니다.

현재 API를 호출하기 위해 로그인 및 비밀번호는 항상 함께 전송됩니다. 호출과 같이, 나는 모든 호출에서 그것들을 체크한다. (결과적으로 API 호출마다 인증을 위해서 데이터베이스를 호출한다.)

(웹 개발과 같이) 어떤 종류의 세션 관리가 있습니까?

감사,

답변

0

REST API는 상태 비 저장해야하지만, 당신은 당신이 사용자 이름 + 암호의 첫번째 제출 한 후 얻을 어떤 비밀 키를 사용하여 요청 서명을 사용할 수 있습니다.

즉, 비밀 키를 얻기 위해 사용자 이름과 암호를 매번 보내지 말고 한 번만 사용하십시오.

요청에 서명하는 몇 가지 API를 살펴볼 수 있습니다 (예 : 일부는 OAuth를 구현합니다.

+0

그래서 처음 요청은 사용자 이름과 암호를 보낸 다음 서버가 클라이언트가 API를 호출 할 때 사용하는 비밀 키를 나에게 보냅니다. 그래서이 비밀 키를 저장해야만합니다 (데이터베이스를 "무작위로"생성해야합니다) 그래서 각 호출시 데이터베이스에서 요청을해야합니다. 두 번째 질문 :이 키는 얼마 동안 유효합니까? 트위터가 작동하는 방식을 살펴 보았지만 (OAuth2 사용) 실제로 이해하지 못함을 인정해야합니다./ – Olivier

+0

@ user1571681 : 기본적으로 "의존합니다":) 기본적으로 동일한 암호를 사용할 수 있어야합니다 클라이언트와 서버 모두에서 키 (비록이 요청을 서명하기 위해이 비 밀을 사용하고있는) 첫 번째 요청 이후에 요청을 교환하지 않더라도. 이 비밀은 데이터베이스에 저장 될 필요는 없지만 가장 일반적인 접근 방법입니다. 그것은 무작위 적이어야하고 추측하기가 어렵지만 그러한 종류의 보안이 필요하지 않은 경우 필요하지 않습니다. 원하는 방식으로 키를 무효화 할 수 있습니다. 영구적 일 수 있지만 API에 따라 적절한 시간 제한을 선택하십시오. – Tadeck

+0

@ user1571681 : OAuth와 관련하여 처음에는 이해하기 어려울 수 있지만, 사용자가 트위터 사이트에서 인증 한 다음 클라이언트 응용 프로그램에 전달 된 특정 액세스 토큰으로 리디렉션된다는 단서가 있습니다. 그런 다음 클라이언트 응용 프로그램은 내가 설명한 비밀 키로 사용되는 요청 토큰을 교환합니다. API의 모든 요청은 서명 (HTTP 메소드, 본문, 내용 유형 등과 같은 요청을 식별하는 정보에서 문자열을 작성하고 비밀 키를 추가 한 다음 예를 들어 sha1' 알고리즘을 사용하여 전체를 해시)해야합니다. 귀하는 API가 사용하는 것을 담당하지만 OAuth를 기반으로 할 수 있습니다. – Tadeck

관련 문제