1

私は、OAuth を介して他のサードパーティ サービス (それ自体は REST API) でエンド ユーザーのデータと対話する機能を提供する REST 風の API サービスを作成しています。一般的な例として、自分のサービスから Facebook や Twitter などのサードパーティ サービスにデータを公開することがあります。

たとえば、エンド ユーザーと Facebook で OAuth ダンスを実行すると、サービスがユーザーの Facebook アカウントと対話するために使用できる短期的なアクセス トークンが得られるとします。そのアクセス トークンが期限切れになり、ユーザーが私のサービスを使用して Facebook に公開しようとした場合、どのようなエラーがユーザーに返されますか?

401 は私には適切ではないようです。MY サービスでユーザーの認証状態に 401 が適用されるようです。403 の方がはるかに適切に思えますが、非常に一般的でもあります。

4

3 に答える 3

3

401は行く方法です。HTTP プロトコルを定義する RFC2616 からの 2 つの抜粋:

セクション 10.4.2 (約 401):

リクエストに承認資格情報がすでに含まれている場合、401 応答は、それらの資格情報に対する承認が拒否されたことを示します。

これは期限切れのトークンに適しているようです。認証資格情報がありますが、拒否されたため、ユーザー エージェントは再認証する必要があります。

セクション 10.4.4 (約 403):

サーバーは要求を理解しましたが、要求を満たすことを拒否しています。承認は役に立たず、要求を繰り返すべきではありません。

これは、ユーザー資格情報にもかかわらずリソースにアクセスできない場合に使用する必要があります。アジアのIPにヒットした米国でのみ機能するWebサイト/API、または有害であると宣言されて非アクティブ化されたWebページである可能性があります(そのため、コンテンツは検出されましたが、サーバーはその提供を拒否しています).

OAuth2 では、推奨されるワークフローは、トークンがどのように渡されるかによって異なります。Authorizationヘッダーによって渡された場合、サーバーは 401 を返す場合があります。クエリ文字列パラメーターを介して渡された場合、最も適切な応答は 400 Bad Request です (残念ながら、HTTP の最も一般的な応答です)。これは、OAuth2 仕様のセクション 5.2 で定義されています https://datatracker.ietf.org/doc/html/draft-ietf-oauth-v2-26

于 2012-05-22T16:42:11.217 に答える
1

一般的であることに問題はなく、403 ステータスが関連しているように思えます。その理由をもう少し詳しく説明した、より人間が読めるバージョンを提供することを妨げるものは何もありません。

于 2012-05-22T16:21:30.587 に答える
0

エラー応答に関してある程度の野心がある場合は、次のリストが包括的なリストになると思います。

400不正な要求

たとえば、パラメータが 0 ~ 9 と 11 の間の int を必要とする場合など、不正な形式のリクエストが送信されました。これを返すことができ、応答本文で指定しますparameter x requires a value between 0 and 9

401無許可

認証の問題にのみ使用されます。署名が間違っている可能性があります。ノンスが以前に使用されていた可能性があります。送信されたタイムスタンプが許容可能な時間枠内にありません。ここでも、応答本文を使用して、これで応答する理由をより正確に指定してください。明確にするために、これは OAuth 関連のエラーにのみ使用してください。

403禁止します

適切に形成され、承認された操作が (現在または今後も) まったく不可能であることを明示的に示すこと。たとえば、リソースが別のユーザーによって編集のためにロックされている場合を考えてみましょう: レスポンス本文を使用して、の行に沿って何かを言いますAnother person is editing this right now, you'll have to wait mmkay?

403 Forbiddenリソースに到達しようとすることにも関係している可能性があります。たとえば、ユーザーがリソース /resource/101212/properties.json へのアクセス権を持っているが、/resource/999/properties.json へのアクセス権を持っていない場合Forbidden due to access rights、応答本文で次のように単純に述べることができます。

404お探しのページが見つかりませんでした

要求されたリソースは存在しません。または、単に URL がサービス内の API に正しくマッピングされていません。レスポンスボディで指定します。

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

これは、たとえば、API を呼び出すことができずGET、別のメソッドを使用する必要があることを表します。これが返された場合も、追加の応答ヘッダーを返さなければなりませんAllow: POST, PUT, etc

于 2012-05-23T11:11:05.943 に答える