認証されていない/許可されていないユーザーがサイトからアクセス制限されたコンテンツを取得しようとしているときにエラーを返す良い方法を探しています。現在、ユーザーにログインして資格情報を確認し、PHPセッションでユーザーIDとセッションの有効期限を保存するように依頼します。この情報は、ユーザーがサイトにアクセスしようとするたびに確認されます(すべてのデータはPHPスクリプトを介して取得されます)。
ユーザーが認証されていない場合、現在、JSON形式でエラー情報を返します。この情報は、フロントエンド(HTML/JS)が「正常に失敗する」ために使用できます。しかし、より適切な方法は、HTTPエラーコードを単に提供することだと思います。
しかし、 Wikipedia と W3C のコード401と403を読んだので、どちらを使用すべきか混乱しています。 401は正しいように見えますが、彼らはHTTP認証メカニズムを想定していると明示的に述べています。 403を使用する必要がありますか?しかし、そのために 彼らは言う "承認は助けにならず、リクエストは繰り返されるべきではない。"
また、アクセスが拒否された理由に関する情報を提供する標準的な方法はありますか(また、ユーザーエージェントがユーザーが許可されていないこととセッションが期限切れになっていることを区別するため)。
このURLで完全に説明されています: https://web.archive.org/web/20131026070133/http://danielirvine.com/blog/2011/07/18/understanding-403-forbidden/
認証エラーのHTTPステータスコードである401 Unauthorizedに問題があります。それだけです。認証ではなく、承認のためです。 401応答を受信すると、サーバーは「あなたは認証されていないか、まったく認証されていないか、誤って認証されていますが、再認証して再試行してください」と伝えます。あなたを支援するために、常に説明するWWW-Authenticateヘッダーが含まれます認証方法。
これは通常、Webアプリケーションではなく、Webサーバーによって返される応答です。
それは非常に一時的なものでもあります。サーバーは再試行するように求めています。
そのため、承認には403 Forbidden応答を使用します。それは永続的であり、私のアプリケーションロジックに結び付けられており、401よりも具体的な応答です。
403応答を受信すると、サーバーから「ごめんなさい。私はあなたが誰であるかを知っています-あなたがあなたが言う人を信じています-しかし、あなたはこのリソースにアクセスする許可を持っていません。たぶん、システム管理者にきちんと尋ねれば、あなたは許可を得ます。しかし、あなたの苦境が変わるまで、もう一度私を悩ませないでください。」
要約すると、401 Unauthorized応答は欠落または不正な認証に使用され、403 Forbidden応答はユーザーが認証されたが、指定されたリソースで要求された操作を実行する権限がない場合に使用されます。