web-dev-qa-db-ja.com

トークンの期限切れ-JSON REST API-エラーコード

JSON RESTAPI。15分間有効なトークンを提供するハンドシェイクがあります。15分間以内に行うすべての呼び出しは正常に機能します。エラーオブジェクト(コード、メッセージ、成功= falseを含む)を返していますが、どのHTTPエラーコードを返すべきか疑問に思っていましたか?また、HTTPエラーコードを使用すると特定のクライアントが台無しになりますか?(HTML5、iPhone、Android)このシナリオでベストプラクティスと見なされるものは何ですか?

61
BuddyJoe

401 Unauthorizedステータスコードを返す必要があります。トークンを再度確立するハイパーメディアを追加で提供する場合があります

Webアプリで何が起こるか考えてください。銀行のサイトに行きます。認証されていない場合は、ログインページに移動します。その後、ログインすると、しばらく行くことができます。その後、有効期限が切れ、サイクルが繰り返されます。

ちょっとした考え。

71
suing

仕様によると、rfc6750-「OAuth 2.0 Authorization Framework:Bearer Token Usage」、 https://tools.ietf.org/html/rfc675 、p。 8、セクション3.1、リソースサーバーは401を返す必要があります:>

invalid_token提供されたアクセストークンは、他の理由で有効期限が切れている、取り消されている、不正な形式、または無効です。リソースは、HTTP 401(Unauthorized)ステータスコードで応答する必要があります。クライアントは、新しいアクセストークンを要求し、保護されたリソース要求を再試行できます。

28
Louis

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
  }
}
10
rynop

OAuth 2の仕様を検索しましたが、有効期限が切れると "Invalid Token Error"が返されることしかわかりませんでした。使用しているHTTPコードについては言及していません。ただし、最も安全な方法は400を使用することです。

2
Darrel Miller