Ваша строка вывода
WwogIHsKICAgICJ0eXAiIDogIkpXVCIsCiAgICAiYWxnIiA6ICJIUzI1NiIKICB9Cl0.WwogIHsKICAgICJhZ2UiIDogNTUsCiAgICAibmFtZSIgOiAiSmltbXkiLAogICAgIlRpdGxlIiA6ICJOaWNlIgogIH0KXQ.AhlqiFIcS-ytUKnhazsn7-eYNwgmXfwON7EN2gozRAw
содержит два массива объектов JSON (плюс подпись):
[
{
"typ": "JWT",
"alg": "HS256"
}
]
.
[
{
"age": 55,
"name": "Jimmy",
"Title": "Nice"
}
]
[]
скобки используются для массивов, а {}
для объектов, следовательно, у вас есть два массива, содержащих объекты JSON вместо двух объектов JSON по желанию:
{
"typ": "JWT",
"alg": "HS256"
}
.
{
"age": 55,
"name": "Jimmy",
"Title": "Nice"
}
Вам нужно снять одну пару []
скобок с обеих сторон и просто
объявите его как массив строк, а не как массив строк.
например. как это:
let headerJson: [String: Any] = [
"alg": "HS256",
"typ": "JWT"
]
Теперь вы получите синтаксически правильный результат, но он все еще длиннее необходимого, поскольку содержит разрывы строк и пробелы.
Обычно сериализатор удаляет все пробелы (пробелы, переносы строк), но в вашем коде используется опция prettyPrinted
:
JSONSerialization.data(withJSONObject: json, options: JSONSerialization.WritingOptions.prettyPrinted)
Этот параметр следует использовать, только если вы хотите где-то отобразить JSON, для JWT удалите этот параметр:
JSONSerialization.data(withJSONObject: json)
Как только вы получите результат, как уже показано на скриншоте jwt.io, сначала вставьте ключ в поле ключа справа (проверьте подпись), а затем вставьте свой токен в левую сторону. Тогда вы должны получить проверенную подпись.
Хотя то, что вы здесь делаете, безусловно, полезно для целей обучения, для более серьезного использования я бы порекомендовал один из пакетов, перечисленных в https://jwt.io/, где вы найдете множество пакетов JWT для множества различных языков, включая Swift. Просто прокрутите страницу вниз, чтобы найти список.