1. ホーム
  2. node.js

[解決済み] connect/expressjsの "signed "cookieとは何ですか?

2022-06-09 02:19:11

質問

署名入りクッキーとは何なのか、知りたいのです。 ネット上にはあまり情報がなく、これを試すと。

app.use(express.cookieParser('A secret'));

それにしても・・・。Cookie はブラウザ上ではまだ 100% 正常で、ここで "signed" が何なのかよくわかりません (私はクライアント上で何か奇妙なこと、たとえば "A secret" を salt として使用してデータを暗号化するようなことを "see" 期待していたようなものですが?)。

ドキュメントによると、( https://github.com/expressjs/cookie-parser ):

構文解析 クッキー ヘッダを解析し req.cookies にクッキーの名前をキーとしたオブジェクトを入れます。オプションとして を渡すことで、署名付きクッキーのサポートを有効にすることができます。 a secret 文字列を渡すことで、署名付きクッキーのサポートを有効にできます。 req.secret というように を割り当て、他のミドルウェアで使用できるようにします。

どなたかご存知ですか?

メルカリです。

どのように解決するのですか?

クッキーはまだ見えますが、署名があるので、クライアントがクッキーを変更したかどうかを検出することができます。

これは HMAC を作成し、それをbase64でエンコードします。クッキーが読み込まれたとき、署名を再計算し、それに付けられた署名と一致するかどうかを確認します。

もし一致しなければ、エラーを出します。

クッキーの内容も隠したいのであれば、代わりに暗号化する(もしくはサーバ側のセッションに保存するだけ)。そのためのミドルウェアが既にあるのかどうかは分かりませんが。

Edit

また、署名入りクッキーを作るには

res.cookie('name', 'value', {signed: true})

また、署名されたクッキーにアクセスするには signedCookies オブジェクトを使用します。 req :

req.signedCookies['name']