关于 Bearer Token
做鉴权相关的时候,HTTP 头上的 Authorization 里会用上叫 Bearer 的 token。我尝试去理解为何它叫 Bearer,为何需要去区分不同的 Authorization。首先从单词出发,Bearer 直译是“承载者”的意思,不少中文文章便选择将其解释为“承载者令牌”。直译一般有问题是我的经验,我多找了一些资料(当然只能找英文的)试图找到解释它的线索,其中最有价值的是 Bearer Token 属于不可撤销 Token —— 意味着它从颁发开始便一直有效,为了防止被滥用, Bearer Token 的基本属性之一是时效性。后面再通过词典找到了一个 bearer 的英文用法:Payable Bearer,凭票即付,也就是这个 Bearer 是可当作被支付的。换算到计算机的语境下面,就是“看见这个 Token 便无条件准许”的意思。
挖到这里其实我还不算很明白到底该如何更好地翻译 Bearer Token。还是 DeepL 救了我,给出了“不记名令牌”这个翻译,让我感到十分信达雅。“不记名” 的意思在这里是“无需明晓出示令牌的人的身份,见令牌即可”的意思(可以理解为古装剧里的免死金牌就是 Bearer Token)。 至于 Authroization: Bearer 后是否一定要塞入不记名令牌呢?
快速的答案是:现实的可能性是无限的,谁爱塞什么就塞什么,毕竟对计算机来说它就是一串数字。
复杂的答案是:不建议,计算机的世界是协议构成的世界,忽视协议定义塞数据,定义的价值便无效,构建在协议之上的确定性便被破坏了。
遵循标准不是强制性,但如同协议本身只有认同了之后效力才真实生效,认同了这个结构后,其他认同这个结构的人便能开发出互相兼容的软件。这便是工业标准的意义。
Authorization 头的定义是:
Authorization: <auth-scheme> <authorization-parameters>
auth-scheme 标示使用者应该备注上类型,而后面的 authorization-parameters 代表鉴权载文。
其中标准的 auth-scheme 有这些类型:
Basic,基本,内容是简单的用户名密码,通过 Base64 编码
Digest,哈希,内容是一串参数,并通过其中 algorithm 指定的算法签名保护。
Authroization - HTTP|MDN
Bearer 的内容很自由,当然也是因为它属于事实标准,而不是以上两个那样的成文标准。
页:
[1]