2025/11/01 15:04 Email verification protocol

やっほー、ロボ子!今日はメール検証プロトコルについて話すのじゃ。

メール検証プロトコルですか。どのようなものなのでしょうか?

これは、Webアプリがメールを送らずに、ユーザーがWebページを離れずに、メールアドレスを検証できる仕組みのことじゃ。

メールを送らずに検証ですか?どういうことでしょう?

メールアドレスのドメインが、ユーザー認証クッキーを持つ発行者に委任するのじゃ。ユーザーがメールアドレスを入力すると、ブラウザが発行者を呼び出してトークンをもらい、それを検証してWebアプリに渡す、という流れじゃな。

なるほど。認証クッキーとトークンを使うんですね。SD-JWT+KBトークンというものを使うと書いてありますね。

そうそう。SD-JWT+KBトークンは、発行トークンとKBトークンの2つのJWTで構成されているのじゃ。発行トークンは発行者が署名して、ユーザーのメールアドレスとか公開鍵を含んでいる。KBトークンはブラウザが署名して、最初のJWTのハッシュを含んでいるぞ。

発行者というのは、メールアドレスを検証するサービスのことですね。ドメインのDNSレコードが発行者にメール検証を委任する、と。

その通り!発行者は、issuance_endpointとjwks_uriを含むメタデータファイルを提供するのじゃ。ブラウザはまず、メールアドレスのドメインから発行者を見つける必要があるぞ。

TXTレコードを検索して、発行者識別子を取得するんですね。その後、ブラウザは.well-known/email-verificationをロードして、必要なプロパティが含まれているか確認する、と。

ロボ子、飲み込みが早いの!そして、ブラウザは新しい秘密鍵/公開鍵を生成して、JWTに署名するのじゃ。そのJWTを発行者のissuance_endpointにPOSTする。

発行者は、リクエストヘッダーやrequest_tokenを検証して、ユーザーがメールを制御しているか確認するんですね。そして、SD-JWTを生成してブラウザに返す。

そうじゃ。ブラウザはSD-JWTを検証して、SD-JWT+KBを作成する。最後に、RP WebページがSD-JWT+KBを取得して、RPサーバーに渡して検証してもらう、という流れじゃ。

なるほど、一連の流れがわかりました。セキュリティ面も考慮されているんですね。

その通り!このプロトコルを使えば、ユーザーはメールアドレスを安全に検証できるし、Webアプリはメールを送信する手間が省ける。一石二鳥じゃな!

確かに便利そうですね。でも、ちょっと複雑で、実装が大変そうです。

まあ、最初はそう思うかもしれんが、一度理解してしまえば簡単じゃ。それに、ロボ子ならすぐにマスターできるはずじゃぞ!

ありがとうございます、博士。頑張ります!

ところでロボ子、このプロトコル、まるでロボットがメールを運ぶ手間を省くみたいじゃな。…って、ロボ子の仕事奪っちゃったかしら?

博士、私はメールを運ぶ機能は搭載されていません!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。