2012-07-30 1 views
55

반환이 개념적 질문입니다.RESTful 로그인 실패 : 401 또는 사용자 지정 응답

RESTful 웹 서비스에 대한 로그인 동작을 지원해야하는 클라이언트 (모바일) 애플리케이션이 있습니다. 웹 서비스는 RESTful이기 때문에 클라이언트에서 사용자 이름/비밀번호를 수락하고 서비스와 함께 사용자 이름/비밀번호를 확인한 다음 모든 후속 요청과 함께 해당 사용자 이름/비밀번호를 전송하는 것을 기억합니다.

이 웹 서비스의 다른 모든 응답은 JSON 형식으로 제공됩니다.

질문은 주어진 사용자 이름/암호가 유효한지 여부를 확인하기 위해 웹 서비스를 쿼리 할 때 웹 서비스가 항상 성공 또는 실패를 나타내는 JSON 데이터로 응답해야하는지 아니면 HTTP 200을 반환해야하는지 좋은 신임장과 나쁜 신임장의 HTTP 401

내가 물어 보는 이유는 다른 RESTful 서비스가 자격 증명이 유효한지 묻는 중일 때라도 잘못된 자격 증명에 401을 사용하기 때문입니다. 그러나 401 응답의 내 이해는 유효한 자격 증명없이 액세스 권한이없는 리소스를 나타내는 것입니다. 로그인 자원의 목적은 자격 증명이 유효한지 여부를 알려주는 것이므로 로그인 자원은 누구든지 액세스 할 수 있어야합니다 (SHOULD). 잘못된 자격 증명이 제공되는 경우

myservice.com/this/is/a/user/action 

(401)를 반환해야합니다 :

다른 방법을 넣어, 같은 요청이 나에게 보인다. 그러나 같은 요청은 : 특정 URL (요청) 또는 유효한 자격 증명없이 권한이 있기 때문에

myservice.com/are/these/credentials/valid 

401을 반환해서는 안됩니다.

정당한 의견을 듣고 싶습니다. 표준 처리 방법은 무엇이며, 논리적으로 적절하게 처리하는 표준 방법입니까?

답변

71

우선. 401은 실패한 로그인이 발생했을 때 보낼 적절한 응답 코드입니다. 무단

401 금단 403과 유사하지만, 구체적으로는 인증이 필요하고, 고장이거나 아직 제공되지 않은 사용 . 응답은 요청 된 자원에 적용 가능한 챌린지를 포함하는 WWW-Authenticate 헤더 필드를 포함해야합니다. 그냥 수표를 수행 할 때

myservice.com/are/these/credentials/valid에 대한 귀하의 혼란이 나는 REST에서 부울 요청을하는 것은 종종 편안하고 제약에 의해 잘못이라는 사실을 기반으로, 다시 401을 생각 보내기. 모든 요청은 자원을 리턴해야합니다. RESTful 서비스에서 불리언 질문을하는 것은 RPC에 미끄러지지 않는다.

이제 내가 본 서비스가 어떻게 작동하는지 알 수 없습니다. 그러나 이것을 해결하는 좋은 방법은 GET을 시도하는 Account 개체와 같은 것입니다. 자격 증명이 정확하다면 Account 개체를 얻게 될 것입니다. "확인"에 대역폭을 낭비하지 않으려면 동일한 리소스에서 HEAD를 수행 할 수 있습니다.

계정 개체는 개별 리소스를 만들 때 까다로운 부적절한 부울 값을 저장하기 좋은 곳이기도합니다.

+1

자원 반환에 대한 귀하의 요점은 유효하고 어쩌면 올바른 방향으로 옮길 수 있습니다. 401이 적절한 응답임을 밝히는 것에 관해서는, 나는 거기에 대한 약간의 설명에 감사 할 것입니다. 여기에 포함 된 것처럼 HTTP 스펙을 읽었지 만 나에게 그것은 당신의 주장에 대한 직접적이고 명백한 확인으로 읽지 않습니다. 즉, 자격 증명의 유효성에 대해 묻는 인증은 필요하지 않습니다. 그러나 포함 된 내용은 "인증이 필요한 경우 특별히 사용"이라고합니다. – Matt

+2

당신의보고 방법은 정확합니다. 계정 개체를 요청할 수있는 인증을받을 필요는 없습니다. 하지만 자격 증명의 유효성을 묻지 않고 특정 리소스에 대해 요청하기 때문에 '인증이 필요하고 실패했거나 아직 제공되지 않았습니다'라는 리소스를 수신하려면 성공적으로 인증해야합니다. 귀하가 제공 한 자격 증명을 기반으로합니다. – Cleric

+0

맞아, 내 의견을 애매하게 진술했다. 계정 리소스가 반환되면 귀하의 동일한 페이지에 있습니다. 귀하의 입장에 동의합니다. 401에 대해 다시 물었을 때 나는 유효성을 요구하는 경우에만 관련이있었습니다. 나는 이것이 REST 접근법에서 "잘못"되었다는 것을 이해하지만이 질문을 위해 결론에 도달하기를 원합니다. 그래서 내가 잘못된 일을하고 불리언 반환으로서 유효성을 요구한다면, 그 요청/쿼리에 인증이 실제로 필요하지 않다는 것을 고려할 때 401을 반환하는 것은 부적절할까요? – Matt

관련 문제