특히 사용자가 웹 API에서 인증 / 인증 된 작업을 수행하는 방법에 관심이 있습니다.
인증 쿠키가 REST 철학과 호환되는 이유는 무엇입니까?
특히 사용자가 웹 API에서 인증 / 인증 된 작업을 수행하는 방법에 관심이 있습니다.
인증 쿠키가 REST 철학과 호환되는 이유는 무엇입니까?
답변:
이상적인 ReSTful 서비스를 사용하면 클라이언트 (브라우저에 없을 수도 있음)가 한 번의 요청으로 필요한 작업을 수행 할 수 있습니다 . 전체 상태가 서버가 아닌 클라이언트에 의해 유지되기 때문입니다. 클라이언트는 상태를 완전히 제어 할 수 있기 때문에 상태를 자체적으로 생성 할 수 있으며 (합법적 인 경우) API와 대화하여 "완료"합니다.
쿠키를 요구하면 어려워 질 수 있습니다. 브라우저 이외의 클라이언트의 경우 쿠키 관리는 쿼리 매개 변수, 일반 요청 헤더 또는 요청 본문에 비해 매우 불편합니다. 반면, 브라우저에서 쿠키를 사용하면 많은 것을 훨씬 간단하게 만들 수 있습니다.
따라서 API는 먼저 Authorization
브라우저에서 비인증 클라이언트가 선호하는 장소이기 때문에 필요한 인증 데이터를 헤더 에서 찾을 수 있지만 브라우저 기반 클라이언트를 단순화하고 간소화 하기 위해 세션 쿠키를 확인할 수도 있습니다. 서버 측 로그인의 경우 일반 Authorization
헤더가 누락 된 경우에만 해당됩니다 .
또 다른 예는 일반적으로 많은 매개 변수 세트가 필요한 복잡한 요청 일 수 있습니다. 비 대화식 클라이언트는 모든 데이터를 하나의 요청으로 방해하는 데 어려움이 없지만 HTML 양식 기반 인터페이스는 요청이 여러 페이지 ( '마법사'페이지와 같은)로 분할되어 사용자가 표시되지 않도록 할 수 있습니다 이전 선택에 따라 적용 할 수없는 옵션이 있습니다. 모든 중간 페이지는 클라이언트 측 쿠키에 값을 저장할 수 있으므로 사용자가 실제로 요청을 제출 한 마지막 페이지 만 서버에 전혀 영향을 미치지 않습니다. API는 요청 본문에서 필요한 속성을 찾고 필요한 매개 변수가 없으면 쿠키를 찾는 것으로 돌아갑니다.
편집 : RE에서 아래 @Konrad의 의견 :
비교할 때 토큰은 어딘가에 저장하지 않고 토큰을 쉽게 무효화 할 수 없기 때문에 구현하기가 더 어렵습니다.
어 ... 서버 쪽에서 쿠키를 확인하고 있습니까? 당신이해서 말 24 시간 후에 쿠키를 삭제하는 브라우저가 의미하지 않습니다. 이 쿠키는 고도로 숙련 된 사용자가 저장하고 "만료"된 후에도 오랫동안 재사용 할 수 있습니다.
서버 측에 세션 데이터를 저장하지 않으려면 토큰 (쿠키 등)에 저장해야합니다. 자체 포함 된 인증 토큰을 마카롱 이라고도합니다 . 쿠키와 추가 헤더 또는 요청 엔터티 자체에 의해 클라이언트와 서버간에 전달되는 방식은 인증 메커니즘 자체와 완전히 독립적입니다.
HttpClient
.NET에서는 아무 문제없이 쿠키를 사용할 수 있으며 실제로 생각할 필요가 없습니다. 비교할 때 토큰은 어딘가에 저장하지 않고 토큰을 쉽게 무효화 할 수 없기 때문에 구현하기가 더 어렵습니다.
curl
또는 wget
쿠키를 관리하는 것은 무척 불편 그리고 당신이 정말로 무리 그들에 대해 생각해야합니까. 내 답변을 편집하여 다른 요점에 대답했습니다.
예 및 아니요-사용 방법에 따라 다릅니다.
쿠키는 클라이언트, 클라이언트, 클라이언트 및 클라이언트에 의해 클라이언트 상태를 유지하는 데 사용되는 경우 편안합니다.
서버 상태를 쿠키에 저장하는 경우 기본적으로로드를 클라이언트로 옮기는 것입니다.
그렇다면 몇 가지 예는 무엇입니까?
평안한:
편안하지 않은 :
안정은 서버의 상태 비 저장에서 비롯됩니다. 클라이언트는 애플리케이션 상태를 유지하고 서버로 보내어 서버가 어디로 갈 것인지 결정할 수 있도록 위치를 알려줍니다. 기본적으로 세션 / 상태에는 기록 데이터가 필요하고 과거 요청에 의존하므로 편안한 응용 프로그램은 이상적이지 않습니다 (로그인 화면을 사용하려는 경우 100 % 순수 편안한 응용 프로그램을 가질 수는 없습니다).
쿠키를 사용할 수 있습니다. REST가 허용합니다.
REST는 세션 정보를 클라이언트 측에 저장해야하지만 인증과 관련하여 일부 정보는 보안상의 이유로 서버 측에 남아 있어야합니다.
내 블로그 중 하나에서 게시물 , 인증 데이터가 REST에 대한 범위를 벗어난 것으로 간주되는 일반적인 합의가있다. 따라서 서버가이 세션 데이터의 일부를 옆에 두는 것이 좋습니다.