了解IdentityServer签名令牌中的JWT签名

时间:2018-06-04 21:08:03

标签: certificate jwt identityserver4 x509

我基本上做了与this帖子非常相似的事情。我希望能够验证已经在IdentityServer上签名的一些JWT令牌,并且还有一些我尚未弄清楚的细节。这是一个示例标记:

eyJhbGciOiJSUzI1NiIsImtpZCI6IjBiZjM5OWIwYjRkNzY3OTE5MDFlYzlmNTUxNTZkMzdlIiwidHlwIjoiSldUIn0.eyJuYmYiOjE1Mjc4OTA2MDAsImV4cCI6MTUyNzg5NDIwMCwiaXNzIjoiaHR0cDovL2NvbW1hbmRjZW50ZXI6NTAwMCIsImF1ZCI6Imh0dHA6Ly9jb21tYW5kY2VudGVyOjUwMDAvcmVzb3VyY2VzIiwiY2xpZW50X2lkIjoiY29tbWFuZGNlbnRlciIsInN1YiI6ImU3NzY4MjEyLTdhMGYtNDA4YS04YzlmLWZmNDRmOTVlNzc2ZSIsImF1dGhfdGltZSI6MTUyNzg5MDYwMCwiaWRwIjoibG9jYWwiLCJzY29wZSI6WyJvcGVuaWQiLCJwcm9maWxlIl0sImFtciI6WyJwd2QiXX0.N6j_8Mbc-WAZInLnhauBS_dC6my3ggJEFGNBuuanJXGG5Q1mL7K9KZ11cgxrWQEp6NRS07bZrh02qA0Hcd0pLJzg0xB49CR-kFlA8PWdZ-wnf1U4VGq7ZZY2PaxccqextF-s3V-ObEsnPq7k1csTBM_lBW5u4m907q3zcHfPtW9RNz3kELKSuW1vMOWksrOOaJO3UGAPJgRcFjlc5imPykKQVCiAO9UV1nuNUHOLOu4XDim-f3YHLU24J-vbgxkqdUtgs4Xm43b3AplYrkN_TJ0ba5demtnQNd5No0s6bkqkuPvVGz2G3MD5tWkQVnu7kV7GNfTOvJlInCkDOE6few

将此结果转移到https://jwt.io/,您可以看到令牌解析为

{
  "alg": "RS256",
  "kid": "0bf399b0b4d76791901ec9f55156d37e",
  "typ": "JWT"
}.
{
  "nbf": 1527890600,
  "exp": 1527894200,
  "iss": "http://commandcenter:5000",
  "aud": "http://commandcenter:5000/resources",
  "client_id": "commandcenter",
  "sub": "e7768212-7a0f-408a-8c9f-ff44f95e776e",
  "auth_time": 1527890600,
  "idp": "local",
  "scope": [
    "openid",
    "profile"
  ],
  "amr": [
    "pwd"
  ]
}.
{SIGNATURE}

我已经看到了两种主要的签名方式。一个是使用一些每个人神奇地知道的passpharase来验证令牌。我们不希望在密码更改时管理更新多个客户端,因此这不是我们的选择。另一种方法是使用本质上的PKI方法,就像使用X509证书交换和验证HTTPS密钥一样。关于这个和这个特殊的例子,我有几个问题:

1。为什么不是令牌Base64编码的第3部分和最后部分?我猜它的Base64Url,是吗?其余的部分使用Base64,为什么不使用这个呢?

2。我们希望使用基本上SSL证书进行签名,并且我假设这个示例令牌已经完成相同的操作,但接收者如何知道应该获取哪个公共证书以验证此令牌?不应该提供证书序列号吗?

第3。为什么这个签名太大了?这似乎只是一个签名的许多字节的方式,是否有其他数据包装?

0 个答案:

没有答案