토큰 만료-JSON REST API-오류 코드


84

JSON REST API가 있습니다. 15 분 동안 유효한 토큰을주는 핸드 셰이크가 있습니다. 15 분 이내에하는 모든 통화는 정상적으로 작동합니다. 15 분 후 오류 개체 (코드, 메시지, 성공 = false 포함)를 반환하지만 어떤 HTTP 오류 코드를 반환해야하는지 궁금합니다. 그리고 HTTP 오류 코드를 사용하면 특정 클라이언트가 엉망이 될까요? (HTML5, iPhone, Android). 이 시나리오에서 모범 사례로 간주되는 것은 무엇입니까?


9
+1, 좋은 질문입니다. 이것에 대한 좋은 해결책을 찾았습니까? (btw- netflixlinkedin 모두 401을 반환합니다.)
Lasse Christiansen


@MichaelFreidgeim이 질문은 이미 더 오래되었습니다
FindOutIslamNow

@FindOutIslamNow, "가능한 중복"은 유사한 질문을 닫고 최상의 답변으로 유지하는 정리 방법입니다. 날짜는 필수가 아닙니다. 참조 meta.stackexchange.com/questions/147643/...을 당신이에 설명하십시오 투표를 필요로 동의하는 경우 meta.stackexchange.com/questions/281980/...
마이클 Freidgeim

답변:


89

401 Unauthorized상태 코드를 반환해야합니다 . 토큰을 다시 설정하기 위해 추가로 하이퍼 미디어를 제공 할 수 있습니다.

웹 앱에서 일어나는 일에 대해 생각해보십시오. 은행 사이트로 이동합니다. 인증되지 않은 경우 로그인 페이지로 이동합니다. 그런 다음 로그인하면 잠시 동안 갈 수 있습니다. 그런 다음 만료되고주기가 반복됩니다.

그냥 생각.


39

사양 rfc6750- "OAuth 2.0 인증 프레임 워크 : Bearer 토큰 사용", https://tools.ietf.org/html/rfc6750 , p.8, 섹션 3.1, 리소스 서버는 401을 반환해야합니다.>

invalid_token 제공된 액세스 토큰이 만료, 취소, 형식이 잘못되었거나 다른 이유로 유효하지 않습니다. 리소스는 HTTP 401 (Unauthorized) 상태 코드로 응답해야합니다 (SHOULD). 클라이언트는 새 액세스 토큰을 요청하고 보호 된 리소스 요청을 다시 시도 할 수 있습니다.


2
참고 SHOULD vs. MUST . 발신자로서 401에 의지 할 수 있으면 좋을 것입니다.
dbreaux

12

FWIW Facebook은 사용자 지정 JSON 응답과 함께 400을 사용합니다. 개인적으로 사용자 지정 JSON 응답으로 401을 선호합니다.

다음은 FB의 응답 본문입니다.

{
  "error": {
    "message": "Error validating access token: Session has expired on Jul 17, 2014 9:00am. The current time is Jul 17, 2014 9:07am.",
    "type": "OAuthException",
    "code": 190,
    "error_subcode": 463
  }
}

29
페이스 북을 개발 지침이 아닌 예외로 취급해야한다는 말이 있습니다. 그냥 말해.
Victor Ivens 2016 년

6
권한 부여 서버 또는 리소스 공급자에 대한 Facebook 호출입니까? 인증 서버는 400 : tools.ietf.org/html/rfc6749#section-5.2를 반환해야 하지만 리소스 공급자는 401
Michael Freidgeim을
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.