本系列文之後也会置於个人网站
在今天文章之前...
小财神,「铁人发文」按钮还在阿!
好拉!那既然这样,以下今天文章开始:
总觉得...直接开始说明什麽是JWT格式来着。但感觉这样会很无聊,不如我们从已经拿到的Token来看吧!
至今爲止,除了存取权杖(access_token
)、更新权杖(refresh_token
)外,还拿到过识别权杖(id_token
)。仔细看三者,都有两个「.
」可以将权杖分成三个部份。
这些权杖都可以透过JWT.io去解析。总之先透过Password Grant Flow取得access_token
和refresh_token
,或是透过「快速开始」应用取得id_token
。
{
"access_token": "eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJ4VXh6WGR4UWpFNDNIZGdYbXJkUjBQZWxXN1ZoZWowbGRkR2NhN0VubXpZIn0.eyJleHAiOjE2MzM5OTIyNzgsImlhdCI6MTYzMzk5MTk3OCwianRpIjoiMzRlOWQxYjEtM2Q3MC00MmYwLTgzOTUtMGU3NDE1OGMxMmRjIiwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo4MDgwL2F1dGgvcmVhbG1zL3F1aWNrLXN0YXJ0IiwiYXVkIjpbIm15LXF1aWNrLXN0YXJ0LWFwcCIsImFjY291bnQiXSwic3ViIjoiMzQ1YjFiY2EtOTgwNS00YjRiLWEwZjgtZGEyYzcwMTc2YzU5IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoib2F1dGhfdG9vbHMiLCJzZXNzaW9uX3N0YXRlIjoiYjAxM2RmZjMtZmFjMy00YjVmLTkwMjctM2I0NTM1NzVmMzllIiwiYWNyIjoiMSIsImFsbG93ZWQtb3JpZ2lucyI6WyJodHRwczovL29hdXRoLnRvb2xzIl0sInJlYWxtX2FjY2VzcyI6eyJyb2xlcyI6WyJkZWZhdWx0LXJvbGVzLXF1aWNrLXN0YXJ0Iiwib2ZmbGluZV9hY2Nlc3MiLCJxdWljay1zdGFydC1leGFtcGxlLXJvbGUxIiwiR3JvdXAgUm9sZSBBIiwidW1hX2F1dGhvcml6YXRpb24iLCJlbXBsb3llZSJdfSwicmVzb3VyY2VfYWNjZXNzIjp7Im15LXF1aWNrLXN0YXJ0LWFwcCI6eyJyb2xlcyI6WyJxdWljay1zdGFydC1leGFtcGxlLXJvbGV4IiwiUmVhZGVyIl19LCJvYXV0aF90b29scyI6eyJyb2xlcyI6WyJ0ZXN0X3JvbGUiXX0sImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoiZW1haWwgcHJvZmlsZSIsInNpZCI6ImIwMTNkZmYzLWZhYzMtNGI1Zi05MDI3LTNiNDUzNTc1ZjM5ZSIsIndlYnNpdGUiOiJodHRwczovL2JvYi5pZCIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJiaXJ0aGRhdGUiOiIyMDIxLzEwLzAzIiwiZ2VuZGVyIjoibWFuIiwibmlja25hbWUiOiLlsI_mmI4iLCJuYW1lIjoiQm9iIExlZSIsInByZWZlcnJlZF91c2VybmFtZSI6ImJvYiIsIm1pZGRsZV9uYW1lIjoiSiIsImdpdmVuX25hbWUiOiJCb2IiLCJmYW1pbHlfbmFtZSI6IkxlZSIsImVtYWlsIjoiYm9iQGZha2UuZW1haWwiLCJwaWN0dXJlIjoiaHR0cHM6Ly9jZG4ucGl4YWJheS5jb20vcGhvdG8vMjAxMy8wNy8xMy8xMC8wNy9tYW4tMTU2NTg0Xzk2MF83MjAucG5nIn0.kgI-wale8fgsBrB7CtWXJux-zWcK63FaI3BgNKBVx8BD33urWVkyqRqdjC5w0Y_qOKmyKEC8p0KB8ljqtpmGjFmwjM5Ntp8VSsiGCPHLVB28Xu2i9S_Px5kbJOOP4Dr_c6rLJhDH3SVZbVuHSH8n_0Fpgp7_6-mqoeK6yYW1MYagb0R9OwyaHCUfef68ODZpKvpbG-vRant5FsDU4N11KFzxUbGDe10Kx48HVonZB1NVy5K6rToT3qdZRf9g4z-n2ZJxiKqQGVJucUQYAHq56kDi95DsKBpoNodppzYDxb2ZCGCEz0FQFhkI_CSZaoawIXW_876KlI4iwcuFuuVWcw",
"expires_in": 300,
"refresh_expires_in": 1800,
"refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI0NjUwNDBkYi1lNGJkLTRiYTYtOWM2Ny02ZWYxZGJmMmUxOWYifQ.eyJleHAiOjE2MzM5OTM3NzgsImlhdCI6MTYzMzk5MTk3OCwianRpIjoiZjZhM2QyMmMtOGM4My00OGFmLTkwMmQtMjg5MjIxYWEzZDFkIiwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo4MDgwL2F1dGgvcmVhbG1zL3F1aWNrLXN0YXJ0IiwiYXVkIjoiaHR0cDovL2xvY2FsaG9zdDo4MDgwL2F1dGgvcmVhbG1zL3F1aWNrLXN0YXJ0Iiwic3ViIjoiMzQ1YjFiY2EtOTgwNS00YjRiLWEwZjgtZGEyYzcwMTc2YzU5IiwidHlwIjoiUmVmcmVzaCIsImF6cCI6Im9hdXRoX3Rvb2xzIiwic2Vzc2lvbl9zdGF0ZSI6ImIwMTNkZmYzLWZhYzMtNGI1Zi05MDI3LTNiNDUzNTc1ZjM5ZSIsInNjb3BlIjoiZW1haWwgcHJvZmlsZSIsInNpZCI6ImIwMTNkZmYzLWZhYzMtNGI1Zi05MDI3LTNiNDUzNTc1ZjM5ZSJ9.jIbGrKmEG-ltLq2jWXA3l7c3Inq55y_72aaQpamscc0",
"token_type": "Bearer",
"not-before-policy": 1632625952,
"session_state": "b013dff3-fac3-4b5f-9027-3b453575f39e",
"scope": "email profile"
}
因为更新权杖refresh_token
比较短,就以更新权杖为例。「.
」将权杖分成三个部份,由上至下分别为「Header」、「Payload」、「Verify Signature」,也就是描述权杖基础资料(meta data)的「档头」、包含各个cliams权杖资料的「主要内容」、和证明权杖内容未被串改过得「数位签章」。之後会在一一分析各个部份的内容,现在就先看看如何将前两个部份主换成叫为容易读的JSON格式。
关於
kid
、sid
等等意义,与如何处理signature以证明权杖正确性。在iT铁人赛内容将不会提到。
原本有计划再一二篇详细分析JWT格式,以及其他相关的名词,也就包含:JOSE、JWT、JWS、JWE和JWK。也许会题到JWK,但不会好好说明区别。
前两个部份是经过Base64编码的结果,所以同样可以透过Base64进行解码:
echo <header|payload>| base64 -di -|python3 -m json.tool
也就是透过以下指令:
echo eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI0NjUwNDBkYi1lNGJkLTRiYTYtOWM2Ny02ZWYxZGJmMmUxOWYifQ| base64 -di -|python3 -m json.tool
可以得到header的结果:
{
"alg": "HS256",
"typ": "JWT",
"kid": "465040db-e4bd-4ba6-9c67-6ef1dbf2e19f"
}
如果拿access_token
的payload
来进行解析,就会得到以下结果:
其中看到不少在User & Group、User & Claim & Profile 所设定和看到的内容。
>>: [NestJS 带你飞!] DAY31 - 实战演练 (下)
传统的安全性资讯与事件管理(SIEM)系统通常需要很长的时间 来安装及设定。这类系统在设计时也不一定...
PHP起手式 我PHP程序不写也在这之中,将会无法正确执行我们的程序码 <?php ?>...
目标 今天要来做的是倒数计时器 Step1 let countdown; function time...
我们昨天为了接下来的学习,安装了"Unity Hub",今天就要来熟悉一下Uni...
T0857 System Firmware 韧体做为跟硬体的互动的桥梁,若设备中的可能有韧体安全的问...