Digest認証の仕組みをBashとJavaScriptで理解したい。

Basic 認証や Digest 認証をゼロから実装する機会があったのでその仕組をメモしておく。 本記事の node はすべて v18 である。 Basic 認証と Digest 認証 Basic 認証 はじめに Basic 認証の仕組みにを解説する。 Basic 認証においてクライアントが初めて http リクエストを送ったときは、Status Code が401 Unauthorizedでヘッダーに www-authenticate: Basic realm="secure" が付与されたレスポンスがサーバーから帰ってくる。 ちなみに realm は認証領域を表す。 クライアントがユーザーとパスワードを user:pass のように入力したときは Authorization: Basic dXNlcjpwYXNz を付与してレスポンスを返す仕組みになっている。 このような動作は Basic 認証を用いたサイトに Chrome で接続し、デベロッパーツールで通信を監視することで確かめることが出来る。 次に、dXNlcjpwYXNzの計算方法について確認しておく。 結論から言うとdXNlcjpwYXNzはuser:passを base64 でエンコードしたものである。 Bash では $ echo -n "user:pass" | base64 dXNlcjpwYXNz JavaScript では > btoa("user:pass") 'dXNlcjpwYXNz' のように計算出来る。 ただ、Base64 はハッシュ関数でもなんでもなくて文字列を単純な方法で変換しているだけなので、簡単に戻すことが出来る。 Bash では ❯ echo -n "dXNlcjpwYXNz" | base64 -d user:pass JavaScript では...

July 13, 2022 · 4 min · 703 words · derbuihan