認証とセッションは、リクエストごとに完全な認証資格情報を渡さない限り、ステートフルであるため、真に RESTful となることはめったにありません。
これが私がしていることで、あなたのものと似ていますが、大きな違いが 1 つあります。
POST /session/ --> creates a session, passing credentials in HTTP Auth Header
上記は、成功した場合、実際のリソースと同様に、セッション ID とともに 201 を返します。また、Cookie (および特殊なX-
タイプの HTTP ヘッダー) にセッション トークンが含まれており、後続の各要求で使用できます。
GET /protectedResource --> includes the credential in the HTTP header
また、「ログアウト」をクリックするなど、一般的なアクティビティであるセッションを終了/無効化する
DELETE /session/sessionId
あなたが行ったこととの唯一の本当の違いは、クエリ パスまたは本文でトークンと資格情報を決して渡さないことです。唯一の例外は、フォーム ベースの認証を実行して送信する場合ですが、その場合でも、可能な場合は、Web 側で処理してヘッダーとして送信することを好みます。
その理由は 2 つあります。
- 秘密を公開せずに URL を公開できるようにしたい
- 公開せずに URL を再利用できるようにしたい
HTTP 認証 (ヘッダーにある) のもう 1 つの利点は、curl を使用して REST API をテストすることが非常に簡単になることです。
curl --user username:pass http://server/protectedResource
また、セッション トークンを生成して curl で使用することもできます。
nodejs に慣れている場合は、cansecurity http://github.com/deitch/cansecurityの README とソース コードを確認できます。