2010-07-20 7 views
2

PHP로 RESTful 웹 서비스를 만들려고합니다.RESTful 웹 서비스 PHP가있는 로그인

Roy fielding에 따르면 클라이언트와 서버 간의 통신은 사실상 상태 비 저장이어야합니다.

현재 로그인 한 사용자의 사용자 이름과 마찬가지로 로그인 정보를 PHP $ _SESSION 변수에 저장하는 것은 세션 상태를 저장한다는 의미이므로 잘못된 방법입니까? 이는 사용자의 개인 데이터에 대한 액세스를 허용하기위한 것입니다.

쿠키를 사용하여 REST 원칙에 대한 로그인을 추적하고 있습니까? 아니면 너무 중요하지 않은가?

+3

아니요, 세션 및 쿠키는 Stateless HTTP에 대한 상태 메커니즘을 구현하는 수단입니다. – Gumbo

+0

REST 원칙에 따라 쿠키를 사용하고 있습니까? – tjvr

답변

0

나는 너무 중요하지 않다.

0

특정 시스템에서 중요 할 수있는 무 상태 애스펙트에 대해 하드 코어가되고 싶다면 각 요청에 대해 사용자의 자격 증명을 보낼 수 있습니다. 이렇게하면 '상태'를 만들지 않고 특정 리소스와 동사에 대한 액세스 권한을 부여 할 수 있습니다. 예를 들어 documentation for Amazon's S3 service을 참조하십시오.

예를 들어 장바구니처럼 다른 세션을 사용하면 REST에 반대하는 상태에 중점을 두는 경향이 있습니다.

+0

쇼핑 카트 등으로 세션을 사용해서는 안되며 REST가 세션을 부적절하게 사용해야한다는 의미입니까? – tjvr

+1

세션은 장바구니에만 적합하지만 장바구니는 무국적이지 않으므로 REST의 (적어도 일부 해석과) 호환되지 않습니다. – grossvogel

+0

grossvogel 미안하지만 그건 틀렸어. 장바구니는 REST와 매우 호환이된다. 당신은 바구니를 바구니에 넣을 필요가있다.) REST 논문 6 장에 다시 설명되어있다. – nathan

8

HTTP는 상태가 저장되지 않으므로 세션 사용은 HTTP 설계에 위배됩니다 (오늘날 웹의 대부분의 설계 및 보안 문제가 이에 근거합니다).

진정한 비 상태 유지 인증을 얻으려면 API에 WWW-Authenticate 및 Authorization 헤더를 사용하거나 HTTP + TLS (https)를 통해 공개되도록 API를 업그레이드하고 각 API 사용자 계정을 식별하는 X509 인증서를 발급 한 다음, 그런 다음 요청은 각 API 호출과 함께 전송됩니다 (API 키로 계정에 저장 한 공개 키로 식별 할 수 있습니다).

ps : 문맥 상 항상 읽을만한 가치가 있으며, chapter 6 of Roy's dissertation은 매우 가치가 있지만, 단 하나의 챕터 5 REST에서는 종종 무시됩니다. 당신이 확장을 :) 필요한 경우

를 사용할

Challenge Response Authentication에 사용되는 Authorization 요청 헤더와 WWW-Authenticate 응답 헤더하는 표준 HTTP 헤더, 두 개의 일반적이고 위하여 표준화 방법과 .. 답을 확장 할 수 있습니다 이 헤더는 BasicDigest 인증입니다. 적절한 자격 코드로 액세스가 실패하거나 WWW-Authenticate 응답 헤더를 사용하여 챌린지를 발행하도록 요청하는 프로세스와 함께 인증 자격 증명이 전송되면 흐름은 폼 기반 인증과 동일하지만 RESTful HTTP에서 작동합니다 레벨이 아니라 일 경우을 사용하여 세션을 설정하는 대신 각 요청을 확인해야합니다 (양식 기반 인증을 사용하는 경우와 마찬가지로 )).

내가 참조하는 HTTP + TLS/x509 메서드는 일반적으로 Public key 인증으로 알려져 있으며 응용 프로그램 수준이 아닌 프로토콜 수준에서 작동하며 기본적으로 지원됩니다. 즉, 클라이언트는 개인 키 + 인증서 + 공개 키를 가지고 있으며, 공개 키가 포함 된 인증서가 서버로 전송되면 사용자가 연결할 때 인증서의 세부 정보를 읽습니다 (원하는 경우) 당신이 그것을 인정한다면 그것을 공개하기 위해 공개 키를 사용하여 권한을 부여하십시오.이것은 모든 것이 암호화되어 있고 클라이언트와 서버 사이에 아무것도없는 HTTP + TLS 스택을 사용하기 때문에 더 안전합니다. 주로 '암호'가 두 부분으로 이루어지기 때문에 비밀로 유지됩니다. , 공개 키가 함께 키 쌍을 형성합니다.

PHP 매뉴얼은 a nice section on HTTP Authentication 코드 (헤더 메소드 용)와 all the functions needed for HTTP+TLS/x509 (설명서에는 예제가 있지만 다양한 기능으로 분리되어 있음)도 있습니다.

+0

WWW-Authenticate 및 Authorization 헤더/HTTPS 및 X509를 확장 할 수 있습니까? 감사! – tjvr

+0

@ blob8108 expanded : – nathan

+0

사용자 이름/비밀번호 로그인을 위해이 방법 중 하나를 사용하는 실제 웹 사이트가 있습니까? 그리고 이것이 OpenID 또는 이와 유사한 기술로 가능합니까? 설명 주셔서 감사합니다! – tjvr