> base64url | jwt | url-safe <
// Base64url - URL とファイル名に安全な、パディングなしの Base64 互換形式
URL に対応
特別な URL 文字を使用しないため、クエリパラメータやパスでも安全です。
JWT 標準
JSON Web Token や OAuth 2.0 の仕様で採用されている形式です。
任意のパディング
パディング文字 (=) を省略して、よりシンプルな URL にできます。
>> 技術情報
Base64url の仕組み:
Base64url は Base64 の一種で、「+」を「-」、「/」を「_」に置き換えることで、URL やファイル名でも安全に扱えるようにした形式です。URL 上の問題を避けるため、多くの場合「=」のパディング文字は省略されます。
比較:
Base64: SGVsbG8+Pw== Base64url: SGVsbG8-Pw
Base64url を使う理由:
- >JWT トークン
- >OAuth 2.0 フロー
- >URL クエリパラメータ
- >ファイル名のエンコード
- >Web API 署名
>> よくある質問
Base64url とは何ですか?
Base64url は、URL やファイル名で安全に利用できる Base64 エンコードの亜種です。「+」を「-」、「/」を「_」に置き換え、必要に応じて「=」のパディングを取り除くことで、URL エンコードの問題を避けます。
なぜ通常の Base64 を URL で使わないのですか?
通常の Base64 では「+」「/」「=」を使用しますが、これらは URL では特別な意味を持ちます。「+」は空白として扱われることがあり、「/」はパス区切り、「=」はパラメータ用に使われるため、解析時に問題が発生します。
Base64url はどこで使われますか?
Base64url は JWT(JSON Web Token)、OAuth 2.0 の認可コード、SAML アサーション、そして URL や HTTP ヘッダーでバイナリデータを渡す必要があるあらゆる API で広く使われています。
Base64url ではパディングは必須ですか?
いいえ、Base64url ではパディングは任意です。長さから復元できるため、多くの実装ではパディングを省略します。特に JWT では、より短く読みやすい URL のためにパディングなしが要求されています。
URL セーフ Base64 と標準 Base64 の違いは何ですか?
両方とも RFC 4648 で定義されています。
• 標準 Base64(§4)は A-Z、a-z、0-9、+、/ を使い、= でパディングします。+ と / は URL やファイル名で特別な意味を持ちます。
• URL セーフ Base64(§5、base64url)は + を -、/ を _ に置き換え、= を省略するのが一般的です。エンコードされるデータ自体は同じで、最後の 2 文字だけが異なります。
標準 Base64 を Base64url に変換するには?
1 行の文字列置換で可能です:b64.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '')。逆方向は同じ置換を逆に行い、長さが 4 の倍数になるまで = を付け足します。ほとんどの言語はこの両方を標準ライブラリで提供しています。
各言語での Base64url のエンコード/デコード方法は?
Node.js:Buffer.from(str).toString('base64url') / Buffer.from(s, 'base64url').toString()(Node 16 以降ネイティブ対応)
Python:base64.urlsafe_b64encode / base64.urlsafe_b64decode
Java:Base64.getUrlEncoder().withoutPadding().encodeToString(bytes)
Go:base64.RawURLEncoding.EncodeToString(b)(Raw はパディングなし)
PHP:rtrim(strtr(base64_encode($s), '+/', '-_'), '=')
Base64url と JWT の関係は?
JWT は 3 つの Base64url 文字列をピリオドでつないだ構造です:<header>.<payload>.<signature>。各セグメントはすべて パディングなし の Base64url で、RFC 7515(JWS)は = の省略を明示的に義務付けています。そのため JWT は URL のクエリパラメータ、Authorization ヘッダー、Cookie にそのまま入れても追加のエスケープが不要です。
Base64url と標準 Base64、どちらを使うべき?
文字列が通る経路で選びましょう。
• URL・ファイル名・HTTP ヘッダー・Cookie:追加エスケープ不要の Base64url
• JSON/XML ボディ・メール・DB:どちらでも可。歴史的には 標準 Base64 が既定
• JWT / OAuth 2.0 / WebAuthn / WebPush / JWE / JWK:仕様上 パディングなしの Base64url が必須
迷ったら Base64url の方が現代的で安全です。