22

認証/承認コンポーネントも持つAPIを開発しています。

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

認証または承認されていないユーザーに最も適切な応答コードを見つけようとしています。

http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.htmlに注意してください:

無許可 -> 401

禁止 -> 403

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

具体例を使用してみましょう。

  • John Doe は認証されていません。DELETE で 401 または 405 を受け取る必要がありますか?
  • Amy は認証されていますが、承認されていません。DELETE で 403 または 405 を受け取る必要がありますか?

(John と Amy が禁止または許可されていなくても、別の HTTP 動詞で同じリソースにアクセスできないわけではないことに注意してください。)

ありがとう。

4

2 に答える 2

39

この場合、明確化のためにいくつかの例を提供すると便利だと思います。

  • 認証なし + サポートされている方法 =401
  • 認証されていない + サポートされていない方法 =405
  • 認証済み + 承認済み + サポートされている方法 =2xx
  • 認証済み + 承認済み + サポートされていない方法 =405
  • 認証済み + 無許可 + サポートされている方法 =403
  • 認証済み + 無許可 + サポートされていない方法 =405

言い換えれば、手続き上の観点から:

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

編集:この図に出くわし、この投稿に出くわす可能性のある他の人に役立つかもしれないと考えました. 拡大するにはクリックしてください。

ここに画像の説明を入力

オリジナルはこちら

于 2016-02-02T15:25:22.480 に答える
13

405 Method Not Allowedメソッドをサポートしていない場合にのみ使用してください。このメソッドを使用できないことをクライアントに伝えるために使用しないでください。

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

于 2012-06-26T04:15:32.303 に答える