状況としては、Rest APIを実装しているバックエンドサーバーがあり、 クライアントとRest APIでやり取りをしています。
- バックエンドサーバーのAPIにアクセスするときは認証(セッション)が必要になります
- クライアントはサーバーからのレスポンスによって、認証(セッション)情報、クライアントが保持している情報を破棄して「ログアウト」します。
2. のレスポンスで現在401を返すと、「ログアウト」する処理にしています
ですが401を返すと無条件で、「ログアウト」という処理が若干不安です
「ログアウト」すると「ログイン」(ログインAPI認証で成功)するまで認証が必要なAPIが使えない状態になります(ほとんどのAPIが使えない状態、ユーザーから見てログインor新規登録しかできない)
このような「クライアントにログアウトさせたい」とう処理をさせたい場合、サーバーはどのようなレスポンスを返すのが良いでしょうか?
またこのようなエラーのベストプラクティス的な書籍やWebがあれば教えていただきたいです。
> クライアントにログアウトさせたい
ここでいう「ログアウト」とは、クライアント側が独自でもっているセッション(のようなもの)でしょうか?それともバックエンドのサーバーへ処理を依頼するとき、REST APIで認証をしますが、この際にログイン操作のようなことがバックエンドのサーバーでなされるのでしょうか。HTTPステータス401自体は一般的にはサーバー側で認証できなかったことを示すので、401受信後にクライアント側がログアウト操作を行うのはちょっと違和感があります。ログイン~ログアウトのセッションをサーバー側、クライアント側のどちらが管理しているかで、判断が異なるのではないでしょうか。
[RFC7235 - 401 Unauthorized]
https://tools.ietf.org/html/rfc7235#section-3.1
この質問での「ログアウト」はクライアントのみに存在する処理で、
「ログアウト」すると「ログイン」(ログインAPI認証で成功)するまで認証が必要なAPIが使えない状態になります(ほとんどのAPIが使えない状態)
またセッションの管理はサーバー側になります(クライアントはサーバーからもらったセッションをリクエスト時に追加するだけ)