Понимание подписи JWT в подписанном токене от IdentityServer - PullRequest
0 голосов
/ 05 июня 2018

По сути, я делаю что-то очень похожее на этот пост.Я хотел бы иметь возможность проверить некоторые токены JWT, которые были подписаны на IdentityServer, и есть некоторые детали, которые я еще не выяснил.Вот пример токена:

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}

Я видел 2 основныхспособы подписи токенов.Один из них заключается в использовании некоторой парольной фразы, которую каждый должен волшебно знать, чтобы проверить токен.Мы не хотим управлять обновлением нескольких клиентов при изменении ключевой фразы, поэтому это не вариант для нас.Другой способ - по существу использовать метод PKI, очень похожий на обмен и аутентификацию ключей HTTPS с использованием сертификатов X509.У меня есть несколько вопросов об этом и этом конкретном примере:

1.Почему 3-й и последний раздел токена Base64 не закодирован?Я предполагаю его Base64Url, это правильно?Остальные сегменты используют Base64, а почему не этот?

2.Мы хотели бы использовать по существу SSL-сертификаты для подписи, и я предполагаю, что этот пример токена проделал то же самое, но как получатель узнает, какой открытый сертификат он должен получить для проверки этого токена?Не следует ли указывать серийный номер сертификата?

3.Почему эта подпись такая большая?Это похоже на способ для многих байтов только для подписи, есть ли другие данные, упакованные внутри?

...