Base64 URL ã»ãŒããšã³ã³ãŒãã£ã³ã°: ãã®æŠèŠãšéèŠæ§
Base64 URL ã»ãŒããšã³ã³ãŒãã£ã³ã°ãšã¯äœã§ããïŒ
Base64 URL ã»ãŒããšã³ã³ãŒãã£ã³ã°ïŒBase64url ãšãåŒã°ããïŒã¯ãæšæºã® Base64 ã®å€çš®ã§ãããURL ããã¡ã€ã«åã§ç¹å¥ãªæå³ãæã€æåãå®å
šãªä»£æ¿æåã«çœ®ãæããŸããæšæºã® Base64 㯠64 æåã®ã¢ã«ãã¡ãããã®äžéšãšã㊠+ ãš / ã䜿çšããããã«ããã£ã³ã°çšã« = ã䜿çšããŸãããããã 3 ã€ã¯ãã¹ãŠ URLãã¯ãšãªæååããã¡ã€ã«ãã¹ã§åé¡ããããŸãã
Base64url 㯠2 ã€ã®åçŽãªçœ®æã§ããã解決ããŸã:
| æšæº Base64 | URL ã»ãŒã Base64 |
|-----------------|-----------------|
| + (ãã©ã¹) | - (ãã€ãã¹) |
| / (ã¹ã©ãã·ã¥) | _ (ã¢ã³ããŒã¹ã³ã¢) |
| = (ããã£ã³ã°) | çç¥ïŒéåžžïŒ |
ãªãæšæº Base64 㯠URL ãå£ãã®ã
+ ã / ãå«ã Base64 ãšã³ã³ãŒããããæååã URL ã«çŸãããšããã©ãŠã¶ãšãµãŒããŒã®åäœãäºæž¬äžèœã«ãªããŸãã
+ ã®åé¡
URL ã¯ãšãªæååã§ã¯ã+ æåã¯ã¹ããŒã¹ãšããŠè§£éãããŸãããã®åäœã¯ application/x-www-form-urlencoded 仿§ã«ç±æ¥ãããã³ãŒããããããŒã¿ã«äºæããªãã¹ããŒã¹ãå«ãŸããåå ã«ãªããŸãã
ããšãã°ãPj4+Pz8/Pw== ã®ãã㪠Base64 æååã«ã¯ + æåãå«ãŸããŠããŸããããã URL ãã©ã¡ãŒã¿ ?token=Pj4+Pz8/Pw== ã«çŸãããšããµãŒããŒã¯ ?token=Pj4 Pz8/Pw== ãšããŠèªèããŸã â + ãã¹ããŒã¹ã«ãªããŸãã
/ ã®åé¡
URL ãã¹ã§ã¯ã/ æåã¯ãã¹åºåãæåã§ããab/CD+Ef== ã®ãã㪠Base64 æååã«ã¯ããã£ã¬ã¯ããªã¬ãã«ãšããŠè§£éããã / ãå«ãŸããŠããŸããããã URL ã»ã°ã¡ã³ãã«çŸãããšãã¯ã©ã€ã¢ã³ããšãµãŒããŒã®äž¡æ¹ãæ§é ã誀解éããå¯èœæ§ããããŸãã
= ã®åé¡
= æåã¯ã¯ãšãªæååã®ããŒãšå€ã®ãã¢ã«äœ¿çšãããŸãã?data=SGVsbG8= ã®æ«å°Ÿã® = ã¯ææ§ã«ãªãå¯èœæ§ããããŸã â ãã® = 㯠Base64 ã®ããã£ã³ã°ã®äžéšãªã®ããã¯ãšãªãã©ã¡ãŒã¿ã®æ§æãªã®ãïŒ
ããŒã»ã³ããšã³ã³ãŒãã£ã³ã°ã¯ãããã®åé¡ãä¿®æ£ã§ããŸãïŒ+ 㯠%2B ã«ã/ 㯠%2F ã«ãªããŸãïŒããæååã®é·ããèšåŒµããããããã°ãé£ããããŸããBase64url ã¯ããã¯ãªãŒã³ãªãœãªã¥ãŒã·ã§ã³ã§ãã
Base64url ã®ä»çµã¿
Base64url 㯠RFC 4648 ã»ã¯ã·ã§ã³ 5 ã§æ£åŒã«å®çŸ©ãããŠããŸããæšæºã® Base64 ãšãŸã£ããåãã¢ã«ãŽãªãºã ã䜿çšããŸã â 3 ãã€ãã 4 æåã«ãªããŸã â ãã ããã¢ã«ãã¡ãããã®äœçœ® 62 ãš 63 ã§ 1 æåã®çœ®æãè¡ãããŸã:
- ã¢ã«ãã¡ãããã®ã€ã³ããã¯ã¹ 62:
+â-ïŒãã€ãã¹ïŒ - ã¢ã«ãã¡ãããã®ã€ã³ããã¯ã¹ 63:
/â_ïŒã¢ã³ããŒã¹ã³ã¢ïŒ
ããã£ã³ã°ïŒ=ïŒã¯éåžžåé€ãããŸãããã³ãŒãæã«æååã®é·ãããæšæž¬ã§ããããã§ããBase64url æååã¯ã远å ã®ãšã¹ã±ãŒããªãã§åžžã«æå¹ãª URL ã³ã³ããŒãã³ãã§ãã
倿åãšå€æåŸ
åããã€ããªããŒã¿ãäž¡æ¹ã®åœ¢åŒã§ã©ã®ããã«èŠããããæ¬¡ã«ç€ºããŸã:
Standard: Pj4+Pz8/Pw==
URL-safe: Pj4-Pz8_Pw
Base64url ã䜿çšãããå Žæ
JSON Web TokenïŒJWTïŒ
JWT 㯠Base64url ã®æãé¡èãªå©çšè ã§ãããã¹ãŠã® JWT ã¯ããããŒããã€ããŒããã·ã°ããã£ã® 3 ã€ã®éšåã§æ§æãããããããã URL ã»ãŒã㪠Base64 ã§ãšã³ã³ãŒãããããããã§åºåãããŸã:
eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0NTY3ODkwIn0.dozjgNqP0m2iTgCjD0
ããã·ã¥ãšã¢ã³ããŒã¹ã³ã¢ã«æ³šç®ããŠãã ãã â ãã©ã¹èšå·ãã¹ã©ãã·ã¥ã¯ãããŸãããJWT ãæšæºã® Base64 ã䜿çšããŠããããWeb ã¢ããªã±ãŒã·ã§ã³ã§æãäžè¬çãªäœ¿çšæ³ã§ãã URL ãã©ã¡ãŒã¿ãšããŠæž¡ããããšãã«ãããŒã¯ã³ãå£ããŠããŸããŸãã
OAuth ãš OpenID Connect
OAuth 2.0 ãš OpenID Connect ã®äž¡æ¹ãã¢ã¯ã»ã¹ããŒã¯ã³ãš ID ããŒã¯ã³ã« JWT ã䜿çšããŠãããBase64url ãšã³ã³ãŒãã£ã³ã°ã¯çŸä»£ã®èªèšŒã®åºç€ãšãªã£ãŠããŸããèªå¯ã³ãŒããããŒãã€ã³ããªã·ãããããŒãã¯ã©ã€ã¢ã³ãã¯ã¬ãã³ã·ã£ã«ãããŒã¯ãã¹ãŠãBase64url ã䜿çšããããŒã¯ã³ãéä¿¡ããŸãã
Web API ãšã¯ãšãªãã©ã¡ãŒã¿
å€ãã® REST ããã³ GraphQL API ã¯ãããŒãžããŒã·ã§ã³ã«ãŒãœã«ããã£ã«ã¿ãŒããŸãã¯ãšã³ã³ãŒãããããã€ããŒãçšã«ãã¯ãšãªãã©ã¡ãŒã¿ã§ Base64 ãšã³ã³ãŒããããããŒã¿ãåãå ¥ããŸããBase64url ã«ããããããã®ãã©ã¡ãŒã¿ã¯è¿œå ã® URL ãšã³ã³ãŒãã£ã³ã°ãªãã§æ£ããæ©èœããŸãã
å®éã®äŸ â API ã«ãŒãœã«ããŒãžããŒã·ã§ã³:
GET /api/users?cursor=MjAyNC0wMS0xNVQxMDozMDowMFo
GitHub ã® API ã¯ã倧ããªçµæã»ããã®ããŒãžããŒã·ã§ã³ã«ãã®æ£ç¢ºãªãã¿ãŒã³ã䜿çšããŠããŸãã
ãã¡ã€ã«åãšãã¡ã€ã«ã¹ãã¬ãŒãž
Base64url æååã¯ããã¹åºåãæåïŒ/ïŒãå«ãŸãããã¡ã€ã«ã·ã¹ãã ãæ··ä¹±ãããç¹å¥ãªæåãå«ãŸããWindows ã§ç¡å¹ãªæåïŒ:ã*ã? ãªã©ïŒãå«ãŸãªããããå®å
šãªãã¡ã€ã«åã«ãªããŸãã
ã³ã³ãã³ãé ä¿¡ãããã¯ãŒã¯ãšãã£ãã·ã¥ããŒ
CDN ãšãã£ãã·ã¥ã¬ã€ã€ãŒã¯ããã°ãã° Base64url ãšã³ã³ãŒããããå€ããã£ãã·ã¥ããŒãšããŠäœ¿çšããŸãã/ ãå«ãæšæºã® Base64 ã¯ãã£ãã·ã¥åå空éã«åœã®ãã£ã¬ã¯ããªéå±€ãäœæããææ§ãªããŒã«ã€ãªããå¯èœæ§ããããŸãã
æšæº Base64 ãš Base64url ã®éã®å€æ
2 ã€ã®å€çš®éã®å€æã¯ãã©ã®èšèªã§ãç°¡åã§ã:
JavaScript
// Standard Base64 to URL-safe Base64
function base64ToBase64url(base64) {
return base64.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
}
// URL-safe Base64 to Standard Base64
function base64urlToBase64(base64url) {
let result = base64url.replace(/-/g, '+').replace(/_/g, '/');
// Restore padding
while (result.length % 4) {
result += '=';
}
return result;
}
Node.js
Node.js ã¯ããŒãžã§ã³ 15.7.0 以éããã€ãã£ãã® Base64url ãµããŒããæäŸããŸã:
// Encode to Base64url
const encodedUrl = Buffer.from('Hello, world!').toString('base64url');
console.log(encodedUrl);
// Output: SGVsbG8sIHdvcmxkIQ
// Decode from Base64url
const decoded = Buffer.from(encodedUrl, 'base64url').toString('utf-8');
console.log(decoded);
// Output: Hello, world!
Python
import base64
# Encode to Base64url
encoded = base64.urlsafe_b64encode(b"Hello, world!")
print(encoded.decode())
# Output: SGVsbG8sIHdvcmxkIQ==
# Decode from Base64url
decoded = base64.urlsafe_b64decode(encoded)
print(decoded.decode())
# Output: Hello, world!
æšæº Base64 ãš Base64url ã®ã©ã¡ãã䜿çšãã¹ãã
æšæº Base64 ã䜿çšãã¹ãå Žå:
- ã¡ãŒã«æ·»ä»ããšã³ã³ãŒãããå ŽåïŒMIME æšæºã§å¿ èŠïŒ
- HTML/CSS åã蟌ã¿çšã®ããŒã¿ URL ãçæããå Žå
- URL å®å šæ§ãé¢ä¿ãªãããŒã¿ããŒã¹ã«ããŒã¿ãä¿åããå Žå
- æšæºã® Base64 ãæåŸ ããã¬ã¬ã·ãŒã·ã¹ãã ãšããåãããå Žå
Base64url ã䜿çšãã¹ãå Žå:
- JWT ããŒã¯ã³ãäœæãŸãã¯è§£æããå Žå
- URL ã¯ãšãªãã©ã¡ãŒã¿ããã¹ã»ã°ã¡ã³ãã§ãšã³ã³ãŒããããããŒã¿ãæž¡ãå Žå
- ãã€ããªããŒã¿ãããã¡ã€ã«åãçæããå Žå
- ãã£ãã·ã¥ããŒãèå¥åãäœæããå Žå
- OAuth ããŒã¯ã³ã OpenID Connect ãæ±ãå Žå
Base64 URL ã»ãŒããšã³ã³ãŒãã£ã³ã°ããªã³ã©ã€ã³ã§è©Šã
ç¡æã®ãªã³ã©ã€ã³ Base64 ãšã³ã³ãŒããšãã³ãŒãã䜿çšããŠãæšæº Base64 ãš URL ã»ãŒã Base64 圢åŒã®éã§å€æããŸããããããŒã¿ã貌ãä»ããå€çš®ãéžæããçµæãå³åº§ã«ååŸããŠãã ããã