Size: a a a

iOS Developers — русскоговорящее сообщество

2020 February 27

В

Вовка in iOS Developers — русскоговорящее сообщество
class JWTTokenDecoder {

   func decode(jwtToken jwt: String) -> [String: Any] {

       let segments = jwt.components(separatedBy: ".")
       return decodeJWTPart(segments[1]) ?? [:]
   }

   func base64UrlDecode(_ value: String) -> Data? {

       var base64 = value
           .replacingOccurrences(of: "-", with: "+")
           .replacingOccurrences(of: "_", with: "/")

       let length = Double(base64.lengthOfBytes(using: String.Encoding.utf8))
       let requiredLength = 4 * ceil(length / 4.0)
       let paddingLength = requiredLength - length
       if paddingLength > 0 {
           let padding = "".padding(toLength: Int(paddingLength), withPad: "=", startingAt: 0)
           base64 = base64 + padding
       }
       return Data(base64Encoded: base64, options: .ignoreUnknownCharacters)
   }

   func decodeJWTPart(_ value: String) -> [String: Any]? {

       guard let bodyData = base64UrlDecode(value),
             let json = try? JSONSerialization.jsonObject(with: bodyData, options: []), let payload = json as? [String: Any] else {
           return nil
       }

       return payload
   }
}
источник

В

Вовка in iOS Developers — русскоговорящее сообщество
исправно работает
источник

К

Константин in iOS Developers — русскоговорящее сообщество
Вовка
исправно работает
так, а ключ куда класть, который для декодинга нужен?
источник

В

Вовка in iOS Developers — русскоговорящее сообщество
Константин
так, а ключ куда класть, который для декодинга нужен?
какой ключ?)
источник

В

Вовка in iOS Developers — русскоговорящее сообщество
почитай плз что такое jwt ;)
источник

К

Константин in iOS Developers — русскоговорящее сообщество
окей
secret другими словами
источник

В

Вовка in iOS Developers — русскоговорящее сообщество
для добычи инфы не нужен ключ, там просто base64
источник

В

Вовка in iOS Developers — русскоговорящее сообщество
А если у тебя боди зашифровано - расшифруй и засунь расшифровку перед bodyData = base64UrlDecode(value),
источник

В

Вовка in iOS Developers — русскоговорящее сообщество
либо еще ранее в метод decode
источник

VM

Vitaliy Monastyrev in iOS Developers — русскоговорящее сообщество
Константин
окей
secret другими словами
В jwt нет шифрования, вся информация в base64, а для проверки подлинности просто хэш сумма приходит, ее сверяют с ключом для установления подлинности отправителя (отправитель знает секретный код, либо он получил токен от того, кто знает)
источник

VM

Vitaliy Monastyrev in iOS Developers — русскоговорящее сообщество
Так что с ключом тебе нужно скорее всего этот хэш сверять
источник

К

Константин in iOS Developers — русскоговорящее сообщество
Vitaliy Monastyrev
Так что с ключом тебе нужно скорее всего этот хэш сверять
да, я немного неправильно выразился
просто в обеих библиотеках для декодинга использовался ключ, как раз чтобы сверить хэш
источник

VM

Vitaliy Monastyrev in iOS Developers — русскоговорящее сообщество
Константин
да, я немного неправильно выразился
просто в обеих библиотеках для декодинга использовался ключ, как раз чтобы сверить хэш
Вообще странно, что тебе нужен ключ на клиенте, такого быть не должно. Обычно токены выдаёт сервер клиентам и они ими пользуются, а secret хранится только на сервере, на клиентах бы он храниться не должен.
источник

VM

Vitaliy Monastyrev in iOS Developers — русскоговорящее сообщество
Ну и проверка подлинности клиента на стороне сервера
источник

В

Вовка in iOS Developers — русскоговорящее сообщество
Виталий прав
источник

К

Константин in iOS Developers — русскоговорящее сообщество
хз
логика такая, что при авторизации пользователя в приложении в ответе приходят user_id и secret
далее во всех запросах я отправляю в теле запроса закодированный user_id с secret
а ответ я декодирую с помощью того же secret
источник

К

Константин in iOS Developers — русскоговорящее сообщество
это не мой личный загон, как сказали сделать, так и делаю
источник

В

Вовка in iOS Developers — русскоговорящее сообщество
мда)
источник

VM

Vitaliy Monastyrev in iOS Developers — русскоговорящее сообщество
Константин
хз
логика такая, что при авторизации пользователя в приложении в ответе приходят user_id и secret
далее во всех запросах я отправляю в теле запроса закодированный user_id с secret
а ответ я декодирую с помощью того же secret
По хорошему при авторизации ты должен получать просто jwt токен, в котором закодирован твой user_id и дальше просто отсылать его на сервер. Если тебе с сервера приходит secret, то кто угодно может с его помощью сгенерировать токен и использовать api под чужим аккаунтом
источник

В

Вовка in iOS Developers — русскоговорящее сообщество
это как ключ рядом с кейсом на замке пересылать по почте))
источник