2012-06-26 6 views
10

私は、認証/認可コンポーネントも持つAPIを開発しています。十分なアクセス権がない状態で、401または405応答コードをREST APIユーザーに返す必要がありますか?

認証ステータスに関係なく誰でも書き込み可能(POST)ですが、認証されていない場合、通常のユーザーとして認証されているか、管理者として認証されているか、アクセスしようとしているリソースについては、 GET、DELETE、およびPUTに対して異なる応答を返す。

私は、認証されていない、または許可されていないユーザーに最も適切な応答コードを見つけようとしています。心http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

ください:

無断 -

> 401が禁断 - > 403

メソッドは許可されていません - > 405

はのは、具体的な例を使ってみましょう:

  • John Doeは、401または405を受け取った場合、DELETEで認証されていませんか?
  • Amyは認証されていますが、承認されていません。

(ジョンとエイミーが禁止または意味するものではありません不正されているにもかかわらず、彼らは異なるHTTP動詞と同じリソースにアクセスすることがアレントを覚えておいてください。)

感謝。

+0

も参照してくださいhttp://stackoverflow.com/questions/3297048/403-forbidden-vs-401-unauthorized-http-responses – Ryan

+0

ジョンは401を取得する必要があります。エイミーは403を取得する必要があります。 – Ryan

+0

405メソッドが許可されていないようです[完全に無関係](http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html)。 – Ryan

答えて

11

405 Method Not Allowedは、この方法をサポートしていない場合にのみ使用してください。 クライアントには、この方法を使用できないと伝えるべきではありません。

あなたの場合の唯一の良いHTTPコードは401 Unauthorizedです。メソッドが存在し、メソッドにアクセスするためにログインする必要があることをクライアントに示します。この場合

+3

ほぼ。一度あなたが認証されているが、操作を許可されていない場合、それは403になります。 –

+0

@JulianReschke、確かに分かりません。 403の場合、標準では「401 Unauthorizedレスポンスとは異なり、認証で違いはありません」と記載されています。しかし、この場合、認証*は、リソースにアクセスできるようになるため、違いを生み出します。 –

+2

Laurent: "サーバーは要求を理解しましたが、認証を拒否します。異なるユーザー認証資格情報を提供すると成功する可能性がありますが、要求で提供された資格情報は不十分です。 - http://greenbytes.de/tech/webdav/draft-ietf-httpbis-p2-semantics-latest.html#status.403 –

7

は、私は明確化のためのいくつかの例を提供すると思う便利です。

  • 非認証+サポートされている方法= 401
  • 非認証+サポートされていない方法= 405
  • 認証+サポート+認定方法= 2xx
  • 認証済み+認定済み+未対応メソッド= 405
  • Au手続き的な観点からthenticated +無断+サポートされている方法= 403
  • 認証+無断+サポートされていない方法=つまり405

、:メソッドはサポートされているかどうか

  1. チェック。そうでない場合:405
  2. サポートされている場合は、ユーザーが認証されているかどうかを確認します。そうでない場合:401
  3. 認証された場合は、ユーザーが承認されているかどうかを確認します。そうでない場合:403
  4. 承認されている場合:2xx

EDIT:私は、この図につまずいたし、それがこの投稿を渡ってつまずく可能性がある他の誰にも役に立つかもしれないと思いました。拡大するにはクリックしてください。

enter image description here

オリジナルhere

+1

うわー、それは信じられないほど詳細です。私は開発者の神に祈っています。私はこのフローチャートの5%以上を使う必要はありません。 –

関連する問題